将Java项目部署到服务器

技术相关10139 阅读0

为了把Java项目部署到服务器上,我可走了不少万弯路,现在将这些方法分享给大家。

部署方法1.0

最初使用的方案,手动部署:

  1. 先上服务器,使用ps aux | grep java和kill -9 <PID>关闭正在运行的Java
  2. 本地使用mvn clean package打包
  3. 将打包后的jar包上传到服务器:scp target/projectName.jar root@<服务器ip>:/var/www/projectName
  4. 在服务器上后台运行这个jar包:nohup java -jar /var/www/projectName/projectName.jar > /var/www/projectName/projectName.log 2>&1 &

相当繁琐,来一遍不想再来第二遍。一度让我不想再动代码。

部署方法2.0

使用systemd来管理Java进程:

  1. 创建配置文件
 vim /etc/systemd/system/projectName.service
  1. 编辑配置文件
 [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
  1. 重新加载systemd
 systemctl daemon-reload
  1. 启动Java项目
 systemctl start projectName
  1. 配置开机启动
 systemctl enable projectName
  1. 检查启动状态
 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。

同样是基于上面的自动化流程,控制服务器执行:

  1. 拉取代码
  2. 打包
  3. 构建镜像
  4. 运行镜像

缺点是这一套有点重,又是打包又是构建镜像。某次在我同时部署多个项目的时候,服务器承受不住崩溃了。

部署方法5.0

使用了镜像仓库,将打包和构建镜像的流程放到了Github Action中:

  1. 打包,构建镜像
  2. 登录镜像仓库
  3. 推送镜像

然后控制服务器:

  1. 拉取镜像
  2. 运行镜像

这样配置之后就舒服多了,大大节省了服务器资源,服务器要做的就是只是运行镜像了。

总结

目前使用的还是5.0的方法,后续如果有更好的优化流程也会分享给大家,欢迎大家在评论区交流。

评论

发表评论