在阿里云 CentOS 服务器上部署多个 Spring Boot 应用,需要配置以下环境和进行相应设置,以确保应用稳定运行、互不干扰,并具备良好的可维护性。以下是详细的配置清单和建议:
一、基础环境准备
1. 安装 Java 环境(JDK)
Spring Boot 应用依赖 Java 运行环境。
# 查看是否已安装
java -version
# 推荐使用 OpenJDK 或 Oracle JDK(以 OpenJDK 为例)
sudo yum install -y java-1.8.0-openjdk-devel
# 或者安装较新版本(如 JDK 11/17)
sudo yum install -y java-11-openjdk-devel
✅ 建议:生产环境统一使用 LTS 版本(如 JDK 8、11、17)。
2. 配置 JAVA_HOME 环境变量
编辑 /etc/profile 文件:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export PATH=$JAVA_HOME/bin:$PATH
执行 source /etc/profile 使配置生效。
二、应用部署方式选择
通常有以下几种部署方式:
| 方式 | 说明 |
|---|---|
| JAR 包直接运行 | 最常见,每个应用打包为独立的 JAR |
| 使用脚本管理 | 编写启动/停止脚本 |
| 使用 systemd 管理 | 推荐,实现开机自启、日志管理等 |
三、端口规划与隔离
每个 Spring Boot 应用必须监听不同的端口(默认 8080),避免冲突。
例如:
| 应用 | 端口 |
|---|---|
| App1 | 8081 |
| App2 | 8082 |
| App3 | 8083 |
在 application.yml 中配置:
server:
port: 8081
四、创建专用用户(安全建议)
不要使用 root 用户运行应用。
# 创建用户
sudo useradd -m springboot
# 设置密码(可选)
sudo passwd springboot
# 切换用户
su - springboot
将每个应用部署到该用户的家目录下,如:
/home/springboot/app1/app1.jar
/home/springboot/app2/app2.jar
五、使用 systemd 管理多个应用(推荐)
为每个 Spring Boot 应用创建一个 systemd 服务文件,实现开机自启、自动重启、日志记录。
示例:创建 app1.service
# /etc/systemd/system/app1.service
[Unit]
Description=Spring Boot App1
After=syslog.target
[Service]
User=springboot
WorkingDirectory=/home/springboot/app1
ExecStart=/usr/bin/java -jar /home/springboot/app1/app1.jar
SuccessExitStatus=143
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
启用服务
sudo systemctl daemon-reload
sudo systemctl enable app1.service
sudo systemctl start app1.service
重复此步骤为 app2、app3 创建 app2.service、app3.service。
六、防火墙配置(开放端口)
CentOS 默认使用 firewalld。
# 开放端口(如 8081)
sudo firewall-cmd --permanent --add-port=8081/tcp
sudo firewall-cmd --reload
或关闭防火墙(仅测试环境):
sudo systemctl stop firewalld
sudo systemctl disable firewalld
七、反向X_X(可选,推荐 Nginx)
若希望统一通过域名访问,可使用 Nginx 反向X_X。
安装 Nginx
sudo yum install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
配置反向X_X(示例)
# /etc/nginx/conf.d/app1.conf
server {
listen 80;
server_name app1.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
重启 Nginx:
sudo nginx -t && sudo systemctl reload nginx
八、日志管理
Spring Boot 默认输出日志到控制台,systemd 会将其记录到 journal。
查看日志:
sudo journalctl -u app1.service -f
也可在 application.yml 中配置日志输出到文件:
logging:
file:
name: /home/springboot/app1/logs/app.log
level:
root: INFO
结合 logrotate 进行日志轮转。
九、监控与健康检查
- 使用 Spring Boot Actuator 提供健康检查接口。
- 配置 Prometheus + Grafana 监控 JVM 和应用状态。
- 使用
curl http://localhost:8081/actuator/health检查应用状态。
十、安全加固(生产环境)
- 更新系统:
sudo yum update - 配置 SSH 密钥登录,禁用密码
- 使用安全组限制公网访问(阿里云控制台)
- 定期备份应用和数据
总结:部署 checklist
| 项目 | 是否完成 |
|---|---|
| 安装 JDK 并配置 JAVA_HOME | ✅ |
| 创建专用用户运行应用 | ✅ |
| 每个应用使用不同端口 | ✅ |
| 使用 systemd 管理服务 | ✅ |
| 配置防火墙开放端口 | ✅ |
| 使用 Nginx 反向X_X(可选) | ✅ |
| 配置日志输出与轮转 | ✅ |
| 启用 Actuator 健康检查 | ✅ |
| 安全加固(SSH、安全组等) | ✅ |
✅ 最佳实践建议:
- 每个应用独立部署、独立端口、独立服务管理。
- 使用 systemd + Nginx 是生产环境的标准组合。
- 自动化部署可结合 Jenkins、Shell 脚本或 Ansible。
如有需要,我可以提供完整的部署脚本模板或 systemd 服务生成工具。
CLOUD云枢