Spring Boot 部署

简单介绍三种Spring Boot应用的部署方式,分别是:nohub、Linux 服务化、Docker,nohub方式和Linux服务化建议用于单体应用,分布式应用建议使用 Docker。教程建立在Spring Boot已经完成打包并且可用情况下。

环境

CentOS 7,SELinux开启

Spring Boot应用程序(路径为/program/app.jar

nohub启动

直接启动,这种方式其实就是 java -jar,只是通过 nohub 使程序能够以守护进程继续运行

1
nohup java -jar /program/app.jar &

查询程序进程

1
ps aux|grep report-0.0.1-SNAPSHOT.jar

停止程序进程

1
kill -9 xxxx上面查询到的pid

Linux 服务化

为 Spring Boot 应用建立一个简单的 Linux 服务

新增服务文件

1
vim /etc/systemd/system/myapp.service

编辑内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[Unit]
#服务描述
Description=My Spring Boot Application
After=network.target

[Service]
Type=forking
TimeoutStartSec=0
#这里改为机器的JVM路径
ExecStart=/opt/jdk1.8.0_191/bin/java -jar /program/app.jar
ExecStop=/opt/jdk1.8.0_191/bin/java -jar /program/app.jar
#这里可以使用非root用户,记得给用到的路径授权哦
#User=root
#Group=root

[Install]
#多用户
WantedBy=multi-user.target

启动服务

1
systemctl start myapp

停止服务

1
systemctl stop myapp

重启服务

1
systemctl restart myapp

自启服务

1
systemctl enable myapp

关闭自启

1
systemctl disable myapp

Docker 部署

  1. Docker 安装

  2. 准备镜像

    新建 Dockerfile

    1
    vim /program/Dockerfile

    边界 Dockerfile

    1
    2
    3
    4
    FROM openjdk:8-jre-alpine
    VOLUME ["/tmp"]
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar"]
    CMD ["/program/app.jar"]

    构建镜像

    1
    docker build -f ./Dockerfile -t myapp .
  3. 启动 Spring Boot 服务

    为了简单说明 Docker 部署,这里先使用 host 网络模式

    1
    2
    3
    4
    5
    6
    7
    docker run -d \
    --net=host \
    --restart=unless-stopped \
    --name myapp \
    -v /etc/localtime:/etc/localtime \
    -v /program/app.jar:/program/app.jar:ro \
    myapp

    net:网络模式

    restart:重启策略。unless-stopped,服务异常时总是重启,除非主动停止

    name:容器名

    第一个-v:同步物理机的时间至容器

    第二个-v:映射物理机文件/program/app.jar至容器/program/app.jar


Spring Boot 部署
http://example.com/2019/09/11/Spring-Boot-部署-Linux-服务化/
作者
Holy
发布于
2019年9月11日
许可协议