SpringBoot项目部署初体验

前言

一个微服务项目,小到几个模块,大到十几二十几个模块,每个模块都是单独的SpringBoot工程,这么多模块的部署,部署成本真的很高,而且每个服务的部署,都是手动部署,打成war或者jar ?,一个一个的部署也是相当的麻烦,介于此:

我前段时间倒腾了一个博客系统,昨天测试基本功能已经跑通了,可能再过段时间我就要买服务器架设自己的博客系统了,这个系统由SpringBoot支撑,我们就把它当作一个微服务项目的一个一个模块,进行学习微服务项目的部署

北京人原始部署:全程手动

基于前面的介绍,测试项目采用SpringBoot开发,我们将该服务打成一个jar,然后再Docker中运行该jar即可

整个流程我们豪爽的分为下面两步:

  1. SpringBoot项目打包jar 【maven插件支持,否则找不到main方法入口】
  2. 创建Docker镜像、容器、并启动容器,访问测试

SpringBoot项目打包成jar

没有其他要说的,就是一个maven插件,这里说明一下,这个插件必须有,否则打成的jar不能运行

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

通过idea分别执行clean package打包命令,然后我们就可以在项目内的target目录下找我打成的jar包

【小提示】:可以在本地运行该jar,测试功能是否畅通,功能测试完好再做下一步深入入入入...

  • java -jar jar包全名称

通过Dockerfile文件构建镜像

Dockerfile编写规则

在本地磁盘中找到该jar,并将其上传到我们的Linux服务器:

上传到我们的Linux服务器后,我们就在该jar的同等路径下,编写Dockerfil文件,注意在同一路径下!

下面对上面的命令做一个简单的解释:

  • jdk:8   :构建一个jdk8镜像的新镜像,如果本地不具有,docker回去中央仓库下载
  • ADD 这一栏将当前目录下的这个jar ,复制到镜像内的根目录下
  • 最后一栏表示 完成上面操作后将进行的命令,类似于CMD 也就是启动该jar的脚本命令

然后就是镜像构建了: docker build -t ‘ninjablog:1.0‘ .

下面仍然做一个简单的解释:

  • 【docker build -t ‘ninjablog:1.0‘ . 】 :表示构建一个镜像取名为ninjablo,版本号为1.0
  • 这里我需要注意的是,镜像名字千万不要使用大写字母,会构建失败的,我也不知道为什么
  • 构建完成之后,通过docker images 查看本地镜像,就会看到我们刚刚构建的那个镜像大摇大摆的出现在了列表中

镜像就算是已经构建成功,下面我们创建基于该镜像的容器

中途夭折心酸故事

然后我创建容器,并运行容器,这个时候通过 docker logs -f 容器名/id 查看到一堆有一堆的异常,我炸了

经过30分钟的排查后,我觉得可能是mysql的配置错了。我配置的localhost:3306,明显我的容器中没有这玩意儿,

经过一番折腾,我再次打包、上传。做镜像。开容器,...再打包....再打包......

一个小时后!啊,我的天啊,怎么回事啊?Linux上都能远程连接Windows上的mysql,为什么你个SpringBoot连接不上

  • 我尝试使用ip:port的方式用navicat连接本地数据库,连接失败
  • 开启本地数据库远程连接功能,开放所有数据库访问权限,Linux完美连接,项目报异常
  • 突然想起我的docker上好像有mysql诶?马上折腾,启动容器,创建数据库,导数据,容器重启,OJBK

基于该镜像创建容器

两种方式创建容器

好了,几经波折,终于到了我们最后的环节了,创镜像,起容器,访项目!

这里我用数据库容器,以及一个由项目构建的镜像启动的容器,两个容器排排站:

然后就是测试访问了!,然后就是404,我靠!,通过docker logs -f myblog 查看日志,又是一堆异常!

再次夭折心酸故事

这次没上次折腾的久,安装docker的机器的防火墙未关,在上一步中,我用了mysql容器,导致被墙了

首先全局关闭防火墙,启动容器,发现报错,不能启动,重启docker,刷新配置,再次重启。

守的云开见月明

再次查看我们容器的启动日志,没有异常,刷新两哈 docker ps ,发现我们的myblog容器一直在线,并没有宕掉

然后启动浏览器,进行项目访问测试:

使用到的命令集合

  • docker build -t ‘ninjablog:1.0‘ . :构建一个名为ninjablog的镜像,版本为1.0,可以缺省版本设置
  • docker run -d -p 8888:8888 --name myblog ninjablog:创建并运行一个容器,参数很多,详见我给的资料
  • docker rm 容器Name/Id :根据名字或者id删除该容器
  • docker rmi 镜像名字/id :根据镜像名字或者id删除镜像
  • firewall-cmd --state :CentOS7查看当前系统的防火墙状态
  • firewall-cmd --permanent --zone=public --add-port=3306/tcp :在防火墙开启状态下,开放3306端口,自行修改
  • docker logs -f myblog :查看myblog容器的运行日志,有版本号配置的话需要补全
  • systemctl restart docker:重启docker
  • docker start 容器Name/id :根据名字或者id启动一个容器
  • docker ps :查看所有的容器,后跟 -a 查看当前正在运行的容器

好的这种山顶洞人的原始部署方式到此结束,我们翻开下一个篇章

山顶洞人半自动化:Maven插件自动部署

原文地址:https://www.cnblogs.com/msi-chen/p/11706256.html

时间: 2024-11-06 07:16:46

SpringBoot项目部署初体验的相关文章

springboot+支付宝完成秒杀项目的初体验

springboot+支付宝完成秒杀项目的初体验 思考的问题: 首先是秒杀的商品查询,考虑到是热点数据,所以写一个接口读取当日批次的秒杀商品到redis中(那么接下来对商品的操作都放入redis中). 当用户抢购商品时,考虑到的是是否在秒杀时间段内以及商品是抢完的问题.首先需要判断该商品是否在秒杀时间内,然后要查询该商品数量是否足够.当然这些还不够,还要有为了防止高并发的解决方案: 对用户限流:对恶意请求通过ip设置访问次数,超过次数则抛出异常. 利用消息队列的异步请求来削峰. 利用redis做

2019-03-26 SpringBoot项目部署遇到跨域问题,记录一下解决历程

近期SpringBoot项目部署遇到跨域问题,记录一下解决历程. 要严格限制,允许哪些域名访问,在application.properties文件里添加配置,配置名可以自己起: cors.allowed.origin=http://10.xx.253.xx:8081,http://localhost:4200 做前后端分离的时候,这里允许的域名/IP一般都是前端项目所部署的机器. 添加一个配置类.@Configuration和@Bean注解一定要加上的.这样SpringBoot在启动的时候才会扫

Springboot项目部署在Jboss上的一些问题

前言 由于公司的问题,重构后的微服务必须要部署在Jboss上, 版本为Jboss EAP 7.1,Springboot 2.1.3.RELEASE.部署时候遇到了一些问题,在这记录下来 一.修改Jboss根目录为应用访问目录 首先将jboos的默认欢迎页修改为空,否则会冲突,打开jboss-eap-7.1\standalone\configuration\standalone.xml, 找到 <subsystem xmlns="urn:jboss:domain:undertow:4.0&q

IDEA创建springboot项目部署到远程Docker

安装IDEA插件安装Docker integration插件,如果没安装,按照下图指引方式安装插件. 配置Docker打开小扳手(setting)找到docker,输入虚拟机ip,不出意外会连接成功的. 新建springboot项目用idea向导新建一个springboot项目web-demo,添加测试类HelloController 编写Dockerfile文件 在项目根目录下新增Dockerfile文件,如果Dockerfile放到了子目录,会造成ADD和COPY指令无法访问打包文件的问题

SpringBoot项目部署到外部Tomcat的相关配置

在开发阶段我们推荐使用内嵌的tomcat进行开发,因为这样会方便很多,但是到生成环境中,需要将项目部署到外部Tomcat中运行,此时需要一些额外的配置: 1.pom.xml调整 1.1 打包方式修改 <packaging>jar</packaging> 变更为 <packaging>war</packaging> 1.2 将spring-boot-starter-tomcat的范围设置为provided scope设置为provided,将springboo

如何把springboot项目部署到tomcat上

前言: 开始以为打包springboot项目为war包丢到tomcat上的webapps下面就可以访问controller层的路径了,可是调用接口却报404的错误,而打开8080的主页,不加路径却可以看到index.jsp正常显示,后来查网上的资料才知道是需要添加一个servlet的初始化类 ServletInitializer类 import com.btw.Application; import org.springframework.boot.builder.SpringApplicati

NetCore1.1+Linux部署初体验

1.环境准备 Centaos7+Win10 虚拟机 Win10安装VS2017 https://www.asp.net/downloads注意勾选下.Net Core 3.Centaos安装netcore 1.1参见https://www.microsoft.com/net/core#linuxcentos sudo yum install libunwind libicu curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?l

Spring-Boot项目部署到单独tomcat运行

前言: 本文是对学习SpringBoot过程中的笔记,拿最简单的项目进行部署,大家可以进行类比,文章最后会提供部署前和部署后的github地址,用代码做的笔记,可能会很乱,有兴趣的同学可以参考 正文: 项目就是访问http://localhost:8080/hello 浏览器会打印出一行字,够简单吧:) 开始修改这个项目,这里我复制一下这个项目,方便对比,像我一样干的请注意修改复制后的项目的properties--->Web Project Settings中的context root,以及修改

SpringBoot项目部署

项目背景 个人博客:http://www.huangyichun.cn/blog/8 采用SpringBoot开发的个人博客,部署到腾讯云服务器上,服务器系统为ubuntu16.04,其中数据库采用Mysql,项目由maven构建而成. 部署流程 安装mysql数据库 //首先执行下面3个命令 sudo apt-get install mysql-server sudo apt install mysql-client sudo apt install libmysqlclient-dev //