将Java项目部署到服务器
为了把Java项目部署到服务器上,我可走了不少万弯路,现在将这些方法分享给大家。
部署方法1.0
最初使用的方案,手动部署:
- 先上服务器,使用ps aux | grep java和kill -9 <PID>关闭正在运行的Java
- 本地使用mvn clean package打包
- 将打包后的jar包上传到服务器:scp target/projectName.jar root@<服务器ip>:/var/www/projectName
- 在服务器上后台运行这个jar包:nohup java -jar /var/www/projectName/projectName.jar > /var/www/projectName/projectName.log 2>&1 &
相当繁琐,来一遍不想再来第二遍。一度让我不想再动代码。
部署方法2.0
使用systemd来管理Java进程:
- 创建配置文件
vim /etc/systemd/system/projectName.service
- 编辑配置文件
[Unit]
Description=Serve Java Application
After=network.target
[Service]
User=root
WorkingDirectory=/var/www/projectName
ExecStart=/usr/bin/java -jar /var/www/projectName/projectName.jar --server.port=3000
Restart=always
RestartSec=5s
SuccessExitStatus=143
StandardOutput=append:/var/www/projectName/projectName.log
StandardError=append:/var/www/projectName/projectName-error.log
[Install]
WantedBy=multi-user.target
- 重新加载systemd
systemctl daemon-reload
- 启动Java项目
systemctl start projectName
- 配置开机启动
systemctl enable projectName
- 检查启动状态
systemctl status projectName
开发完成需要重新部署的时候只需要运行以下命令即可:
mvn clean package
scp target/projectName.jar root@<服务器ip>:/var/www/projectName
ssh root@<服务器ip> "systemctl restart projectName"
这一套的配置的好处是不用再登录服务器上杀进程了,优雅了不少,但本地还是要手动输入命令行。
部署方法3.0
至此已经成熟很多了,知道了使用Jenkins和Github Action来实现自动部署,我们只需要配置一次,后续代码改动只需要推送代码就能自动部署。
手动输入命令行的部分也被简化了,Action在检测到代码变化的时候就能够帮我们执行上面的流程了。
部署方法4.0
现在发现在服务器上运行jar包的方式不太优雅,于是使用了Docker。
同样是基于上面的自动化流程,控制服务器执行:
- 拉取代码
- 打包
- 构建镜像
- 运行镜像
缺点是这一套有点重,又是打包又是构建镜像。某次在我同时部署多个项目的时候,服务器承受不住崩溃了。
部署方法5.0
使用了镜像仓库,将打包和构建镜像的流程放到了Github Action中:
- 打包,构建镜像
- 登录镜像仓库
- 推送镜像
然后控制服务器:
- 拉取镜像
- 运行镜像
这样配置之后就舒服多了,大大节省了服务器资源,服务器要做的就是只是运行镜像了。
总结
目前使用的还是5.0的方法,后续如果有更好的优化流程也会分享给大家,欢迎大家在评论区交流。
评论