在阿里云 CentOS 服务器上部署多个 Spring Boot 应用,需要配置以下核心环境和服务:
一、基础系统环境
1. 操作系统
- CentOS 7/8(推荐 CentOS 7,因 CentOS 8 已停止维护)
- 确保系统为最小化安装或标准安装均可
2. 防火墙与安全组
- 阿里云安全组:开放必要端口(如 80、443、各应用端口)
- 系统防火墙(firewalld):
sudo systemctl enable firewalld sudo systemctl start firewalld sudo firewall-cmd --permanent --add-port=8080/tcp # 示例应用端口 sudo firewall-cmd --reload
3. 用户权限
- 建议使用非 root 用户运行应用(如
appuser)sudo useradd -m appuser sudo passwd appuser
二、JDK 环境(Java Development Kit)
Spring Boot 基于 Java,需安装 JDK(推荐 JDK 8 或 JDK 11/17)
安装方式(任选其一):
方式1:使用 yum 安装 OpenJDK
sudo yum install -y java-1.8.0-openjdk-devel
# 或 JDK 11
sudo yum install -y java-11-openjdk-devel
方式2:手动安装 Oracle JDK
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
sudo tar -zxvf jdk-17_linux-x64_bin.tar.gz -C /usr/local/
export JAVA_HOME=/usr/local/jdk-17
export PATH=$JAVA_HOME/bin:$PATH
验证安装
java -version
javac -version
设置环境变量(永久生效)
编辑 /etc/profile 或 /etc/bashrc:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile
三、应用部署架构(多应用隔离)
每个 Spring Boot 应用应独立运行,建议采用以下方式之一:
方案1:直接使用 systemd 管理(推荐)
为每个应用创建独立的 service 文件,例如 /etc/systemd/system/app1.service:
[Unit]
Description=App1 Spring Boot Application
After=syslog.target network.target
[Service]
User=appuser
Group=appuser
ExecStart=/usr/bin/java -jar /opt/apps/app1/app1.jar
SuccessExitStatus=143
WorkingDirectory=/opt/apps/app1
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
启用并启动:
sudo systemctl daemon-reload
sudo systemctl enable app1
sudo systemctl start app1
sudo systemctl status app1
为每个应用复制修改上述文件(app2.service、app3.service 等),注意修改
Description、ExecStart、WorkingDirectory和端口。
方案2:使用 Docker 容器化部署(更优雅)
安装 Docker:
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker appuser
为每个应用编写 Dockerfile,然后使用 docker-compose.yml 统一管理:
version: '3.8'
services:
app1:
build: ./app1
ports:
- "8081:8080"
restart: always
app2:
build: ./app2
ports:
- "8082:8080"
restart: always
启动:
docker-compose up -d
四、Web 服务器 / 反向X_X(可选但推荐)
用于统一入口、SSL 终止、负载均衡。
方案1:Nginx 反向X_X
安装 Nginx:
sudo yum install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx
配置 /etc/nginx/conf.d/apps.conf:
server {
listen 80;
server_name example.com;
location /app1 {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /app2 {
proxy_pass http://127.0.0.1:8082;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
测试并重载:
sudo nginx -t
sudo systemctl reload nginx
方案2:使用 Apache HTTP Server
sudo yum install -y httpd
sudo systemctl start httpd
sudo systemctl enable httpd
五、数据库与其他中间件(按需)
如果应用依赖 MySQL、Redis、RabbitMQ 等,需额外安装:
MySQL
sudo yum install -y mysql-server
sudo systemctl start mysqld
sudo systemctl enable mysqld
sudo mysql_secure_installation
Redis
sudo yum install -y redis
sudo systemctl start redis
sudo systemctl enable redis
也可使用阿里云 RDS、Redis 托管服务,避免自建。
六、日志与监控(可选但重要)
日志管理
- Spring Boot 默认输出到控制台,建议配置日志文件输出
- 使用
journalctl查看 systemd 服务日志:journalctl -u app1.service -f
监控工具
- Prometheus + Grafana:监控 JVM、CPU、内存等
- ELK Stack:集中日志管理
七、自动启动与开机自启
确保所有服务开机自启:
sudo systemctl enable app1
sudo systemctl enable app2
sudo systemctl enable nginx
sudo systemctl enable mysqld
八、完整部署流程总结
| 步骤 | 操作 |
|---|---|
| 1 | 创建非 root 用户(appuser) |
| 2 | 安装 JDK |
| 3 | 上传 Spring Boot JAR 包到 /opt/apps/ |
| 4 | 为每个应用创建 systemd service 文件 |
| 5 | 安装并配置 Nginx 反向X_X |
| 6 | 安装所需中间件(MySQL/Redis 等) |
| 7 | 配置防火墙和安全组 |
| 8 | 启动所有服务并设置开机自启 |
| 9 | 验证访问 |
九、注意事项
- 端口冲突:确保每个应用使用不同端口
- 资源限制:通过 systemd 的
LimitNOFILE、MemoryLimit等参数限制资源 - 安全加固:禁用 root SSH 登录、使用密钥认证、定期更新系统
- 备份策略:定期备份应用代码、配置文件、数据库
- 阿里云 ECS 最佳实践:使用实例角色、OSS 存储静态资源、SLB 负载均衡
如需进一步细化某一部分(如 Docker 部署详解、Nginx SSL 配置、健康检查等),可以继续提问!
CLOUD技术博