问题
好久没有写过SpringBoot部署了。
步骤
安装JDK17
找到JDK17下载页面,下载JDK17的rpm包,如下图:
下载成功后,然后使用FileZilla上传该rpm文件。上传成功后,使用yum命令手动安装rpm包,如下:
sudo yum install ./bellsoft-jdk17.0.12+10-linux-amd64.rpm
这样yum会下载相关依赖自动安装JDK17.具体依赖如下:
Installing:
bellsoft-java17 x86_64 3:17.0.12.0.0.10-1 @commandline 183 M
Installing dependencies:
alsa-lib x86_64 1.2.9-1.al8 alinux3-updates 497 k
libX11 x86_64 1.7.0-9.al8 alinux3-updates 617 k
libX11-common noarch 1.7.0-9.al8 alinux3-updates 160 k
libXau x86_64 1.0.9-8.al8 alinux3-updates 38 k
libXext x86_64 1.3.4-8.al8 alinux3-updates 46 k
libXi x86_64 1.7.10-1.1.al8 alinux3-os 49 k
libXrender x86_64 0.9.10-7.2.al8 alinux3-os 33 k
libXtst x86_64 1.2.3-7.2.al8 alinux3-os 22 k
libxcb x86_64 1.13.1-1.3.al8 alinux3-os 230
Transaction Summary
==============================================================================================================================================================================================================================
Install 10 Packages
Total size: 185 M
Total download size: 1.7 M
Installed size: 369 M
Is this ok [y/N]: y
Downloading Packages:
(1/9): libXrender-0.9.10-7.2.al8.x86_64.rpm 1.5 MB/s | 33 kB 00:00
(2/9): libxcb-1.13.1-1.3.al8.x86_64.rpm 8.1 MB/s | 230 kB 00:00
(3/9): alsa-lib-1.2.9-1.al8.x86_64.rpm 26 MB/s | 497 kB 00:00
(4/9): libXtst-1.2.3-7.2.al8.x86_64.rpm 300 kB/s | 22 kB 00:00
(5/9): libX11-1.7.0-9.al8.x86_64.rpm 32 MB/s | 617 kB 00:00
(6/9): libXau-1.0.9-8.al8.x86_64.rpm 4.2 MB/s | 38 kB 00:00
(7/9): libXi-1.7.10-1.1.al8.x86_64.rpm 460 kB/s | 49 kB 00:00
(8/9): libXext-1.3.4-8.al8.x86_64.rpm 3.9 MB/s | 46 kB 00:00
(9/9): libX11-common-1.7.0-9.al8.noarch.rpm 1.8 MB/s | 160 kB 00:00
Java
先检查一下SpringBoot项目是否使用了fat jar方式打败,主要配置就是启用jar可执行即可,具体配置在pom.xml中,设置如下:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
这种方式是不使用父POM方式,如果使用父POM(spring-boot-starter-parent父POM),这应该直接在子模块里面,设置插件即可:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
创建用户
sudo useradd --system --home /var/api --shell /sbin/nologin --comment "api user" --user-group api
创建文件夹
sudo mkdir /var/api && sudo chown -R api /var/api && sudo chgrp -R api /var/api && sudo chmod 707 -R /var/api
Systemd配置文件夹
sudo vim /etc/systemd/system/api.service
,内容如下:
[Unit]
Description=myapp
After=syslog.target network.target
[Service]
User=myapp
Group=myapp
Environment="JAVA_HOME=/path/to/java/home"
Environment="NACOS_HOST=127.0.0.1"
Environment="NACOS_PORT=8848"
Environment="NACOS_USER=nacos"
Environment="NACOS_PASS=xxxx"
Environment="NACOS_NAMESPACE=xxxx"
Environment="SPRING_PROFILES_ACTIVE=dev"
ExecStart=${JAVA_HOME}/bin/java -jar /var/myapp/myapp.jar
ExecStop=/bin/kill -15 $MAINPID
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
设置Spring外部配置文件
sudo vim /var/api/api.conf
,内容如下:
JAVA_OPTS="-Djava.library.path=/var/xxx/bin/lib -Dspring.profiles.active=prod -server -Xms6g -Xmx6g -XX:MaxGCPauseMillis=500 -XX:+UseParallelGC"
RUN_AS_USER="api"
上传jar文件
上传需要部署的jar文件到/var/xxx/目录下面。
重制文件权限
sudo chown -R api /var/api
sudo chgrp -R api /var/api
sudo chmod 700 -R /var/api
sudo chmod 500 /var/api/api.jar
sudo chattr +i /var/api/api.jar
sudo chmod 400 /var/api/api.conf
sudo chown api:api /var/api/api.conf
注意这里是使用了文件加锁权限,如果需要解锁需要使用下面命令:
sudo chattr -i /var/api/api.jar
# 查看锁
sudo lsattr /var/api/api.jar
启动服务
# 启用服务
sudo systemctl enable api.service
# 启动服务
sudo systemctl start api.service
这里假设防火墙关闭了,没有使用。
生产环境重新部署
sudo chattr -i /var/api/api.jar && sudo chmod 707 -R /var/api && sudo rm /var/api/api.jar
# 删除文件,重新上传文件。。。。
# 上传完成后
sudo chown -R api:api /var/api && sudo chmod 700 -R /var/api && sudo chmod 500 /var/api/api.jar && sudo chmod 400 /var/api/api.conf && sudo chattr +i /var/api/api.jar && sudo systemctl stop api.service && sudo systemctl start api.service
# 查看实时日志
journalctl -u api.service -f
最自由重新部署
# 解封权限
sudo chattr -i /var/api/api.jar && sudo chmod 707 -R /var/api
# 重启服务
sudo systemctl stop api.service && sudo systemctl start api.service && journalctl -u api.service -f