在AWS EC2上部署SpringBoot项目实现服务不间断运行的方案咨询
SpringBoot 项目EC2常驻运行部署方案
以下按生产适用性从高到低给出方案,可根据自身需求选择:
1. 系统原生systemd服务(生产环境首选)
Linux发行版默认自带的服务管理工具,无额外依赖,支持开机自启、异常自动重启、统一日志管理,是稳定性最高的方案。
操作步骤:
- 新建服务配置文件:
sudo vim /etc/systemd/system/你的项目名.service - 填入以下配置,替换对应占位符为你实际的环境参数:
[Unit] Description=自定义的SpringBoot项目描述 After=network.target nginx.target # 声明在网络、Nginx启动完成后再启动当前服务 [Service] User=ec2-user # EC2默认用户名,Ubuntu系统替换为ubuntu WorkingDirectory=/home/ec2-user/你的war包所在目录 # 替换为war包实际存放路径 ExecStart=/usr/bin/java -jar 你的war包文件名.war # 替换为实际Java执行路径、war包名称 Restart=always # 进程异常退出时自动重启 RestartSec=5 # 重启间隔为5秒 StandardOutput=journal+console # 日志统一输出到系统日志 StandardError=journal+console [Install] WantedBy=multi-user.target
- 重载systemd配置使新服务生效:
sudo systemctl daemon-reload - 启动服务:
sudo systemctl start 你的项目名 - 设置开机自动启动:
sudo systemctl enable 你的项目名 - 常用操作命令:
- 查看服务运行状态:
sudo systemctl status 你的项目名 - 查看实时运行日志:
sudo journalctl -u 你的项目名 -f - 重启服务(比如更新war包后):
sudo systemctl restart 你的项目名 - 停止服务:
sudo systemctl stop 你的项目名
- 查看服务运行状态:
2. nohup 临时方案(适合快速测试,不推荐生产长期用)
无需额外配置,一行命令即可把进程挂到后台,终端退出不会影响进程运行:
- 启动命令:
nohup java -jar 你的war包文件名.war > app.log 2>&1 &nohup会忽略终端挂断信号,关闭SSH连接后进程不会被终止> app.log 2>&1会把程序的标准输出、错误输出都写入当前目录的app.log文件方便排查问题- 末尾的
&让进程在后台运行
- 后续操作:
- 查看进程ID:
ps aux | grep 你的war包文件名.war - 停止服务:
kill -9 对应进程ID
- 查看进程ID:
3. PM2 复用方案(熟悉PM2操作可直接用)
PM2本身支持管理非Node的其他语言进程,不需要额外学习新工具,操作逻辑和你管理Node项目完全一致:
- 启动命令:
pm2 start java --name "自定义项目标识名" -- -jar 你的war包文件名.war - 常用操作和Node项目完全相同:
- 查看所有PM2管理的进程列表:
pm2 list - 查看当前项目实时日志:
pm2 logs 自定义项目标识名 - 重启项目:
pm2 restart 自定义项目标识名 - 停止项目:
pm2 stop 自定义项目标识名 - 设置开机自启:
pm2 save && pm2 startup
- 查看所有PM2管理的进程列表:
注意事项
以上所有方案都不需要修改你现有的Nginx路由配置,只需要保证SpringBoot项目启动的端口和Nginx转发的对应端口一致即可。
内容的提问来源于stack exchange,提问作者Minnie
相关产品推荐
相关产品推荐

