在阿里云上部署 Java 后端项目,通常有几种主流路径。选择哪种方式取决于你的项目规模、运维能力要求以及预算。作为技术从业者,我将从最推荐的现代化云原生方式到传统的虚拟机部署方式进行详细拆解,并给出最佳实践建议。
一、方案对比与选型建议
| 方案 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 容器服务 ACK + Docker | 中大型项目、微服务、需要弹性伸缩 | 自动化运维、高可用、易迁移、资源利用率高 | 学习成本稍高,需掌握 Kubernetes 基础 |
| 轻量应用服务器 / ECS(传统部署) | 小型项目、个人开发者、快速上线 | 操作简单、成本低、直观 | 手动维护依赖环境,扩容麻烦,故障恢复慢 |
| 函数计算 FC(Serverless) | 事件驱动、低频访问、突发流量 | 按量付费、零运维、自动扩缩容 | 冷启动延迟、调试复杂、不适合长连接或常驻进程 |
✅ 推荐路径:
- 如果是生产级项目,首选 ACK(容器服务) 或 SAE(Serverless 应用引擎);
- 如果是个人项目/小团队,使用 ECS + Docker Compose 或 Tomcat/JDK 直接部署 更简单高效。
下面以 ECS 实例 + JDK + Tomcat/Nginx + MySQL(可选) 的经典架构为例,详细说明部署流程。这是大多数初学者和中小项目最常用的方式,也最容易理解底层逻辑。
二、完整部署步骤(基于 ECS + JDK + Spring Boot Jar)
1. 准备工作
(1)购买阿里云 ECS 实例
- 地域选择:靠近用户群体(如华东1杭州、华南1深圳)
- 实例规格:至少 2C4G(Java 应用建议 ≥2GB 内存)
- 操作系统:推荐 CentOS 7.9 / Ubuntu 20.04 / Alibaba Cloud Linux 3
- 安全组规则:开放端口
80(HTTP)、443(HTTPS)、22(SSH)
(2)本地打包项目
确保你的 Spring Boot 项目已打成可执行 jar 包:
mvn clean package -DskipTests
生成文件类似:target/myapp-1.0.0.jar
(3)准备数据库(可选)
- 可使用自建 MySQL(安装在同一 ECS 或另一台 ECS)
- 或使用阿里云 RDS MySQL(推荐,高可用、备份方便)
2. 登录 ECS 并安装基础环境
通过 SSH 登录服务器:
ssh root@<your-ecs-ip>
安装 JDK(以 OpenJDK 17 为例)
# CentOS/RHEL
sudo yum install -y java-17-openjdk java-17-openjdk-devel
# Ubuntu/Debian
sudo apt update
sudo apt install -y openjdk-17-jdk
验证安装:
java -version
安装 Nginx(用于反向XX和静态资源托管)
# CentOS
sudo yum install -y nginx
# Ubuntu
sudo apt install -y nginx
启动并设置开机自启:
sudo systemctl start nginx
sudo systemctl enable nginx
3. 上传项目文件
使用 scp 命令从本地上传 jar 包到服务器:
scp target/myapp-1.0.0.jar root@<your-ecs-ip>:/opt/app/
在服务器上创建目录并赋予权限:
sudo mkdir -p /opt/app
sudo chown -R $USER:$USER /opt/app
4. 配置 systemd 服务(推荐方式,便于管理)
创建服务文件 /etc/systemd/system/myapp.service:
[Unit]
Description=My Spring Boot Application
After=syslog.target network-online.target
[Service]
User=root
Group=root
ExecStart=/usr/bin/java -jar /opt/app/myapp-1.0.0.jar --spring.profiles.active=prod
SuccessExitStatus=143
TimeoutStopSec=10
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
重新加载 systemd 并启动服务:
sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp
查看日志:
journalctl -u myapp -f
5. 配置 Nginx 反向XX
编辑 Nginx 配置文件 /etc/nginx/conf.d/default.conf 或新建 /etc/nginx/conf.d/myapp.conf:
server {
listen 80;
server_name your-domain.com; # 替换为你的域名
location / {
proxy_pass http://127.0.0.1:8080; # Spring Boot 默认端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
测试配置并重载 Nginx:
sudo nginx -t
sudo systemctl reload nginx
6. 域名解析与 HTTPS(可选但推荐)
(1)绑定域名
在阿里云 DNS 控制台添加 A 记录,将域名指向 ECS 公网 IP。
(2)申请 SSL 证书
- 进入阿里云“SSL 证书”服务,申请免费 DV 证书
- 下载证书后上传至 Nginx 配置目录
修改 Nginx 配置启用 HTTPS:
server {
listen 443 ssl;
server_name your-domain.com;
ssl_certificate /etc/nginx/certs/fullchain.pem;
ssl_certificate_key /etc/nginx/certs/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# HTTP 自动跳转 HTTPS
server {
listen 80;
server_name your-domain.com;
return 301 https://$host$request_uri;
}
重载 Nginx:
sudo systemctl reload nginx
7. 数据库连接配置(如果使用 RDS)
在 application.yml 中配置 RDS 连接信息:
spring:
datasource:
url: jdbc:mysql://rm-xxx.mysql.rds.aliyuncs.com:3306/mydb?useSSL=false&serverTimezone=UTC
username: your_rds_username
password: your_rds_password
driver-class-name: com.mysql.cj.jdbc.Driver
⚠️ 注意:RDS 需在白名单中添加 ECS 的内网 IP 或公网 IP(若使用公网访问)。
三、进阶优化建议
1. 使用阿里云 SLB(负载均衡)
当有多个 ECS 实例时,使用 SLB 实现流量分发和高可用。
2. 使用 OSS 存储静态资源
图片、视频等大文件不要存本地磁盘,改用阿里云 OSS,并通过 CDN 提速。
3. 监控与告警
- 启用阿里云“云监控”,设置 CPU、内存、带宽阈值告警
- 集成 Prometheus + Grafana 实现深度监控
4. 日志收集
- 使用 Filebeat + Logstash + Elasticsearch(ELK)集中管理日志
- 或直接使用阿里云 SLS(日志服务),开箱即用
5. CI/CD 自动化
结合阿里云效(Codeup + Flow)实现代码提交 → 自动构建 → 自动部署到 ECS 或 ACK。
四、常见问题排查
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 无法访问网站 | 安全组未放行 80/443 端口 | 检查 ECS 安全组规则 |
| Nginx 报 502 Bad Gateway | Spring Boot 未启动或端口错误 | 检查 systemctl status myapp |
| 数据库连接超时 | RDS 白名单未加 ECS IP | 登录 RDS 控制台添加白名单 |
| 内存溢出(OOM) | JVM 堆内存设置过大 | 调整 -Xmx 参数,如 -Xmx512m |
| 中文乱码 | 编码不一致 | 确保 JVM 启动参数包含 -Dfile.encoding=UTF-8 |
五、总结
在阿里云部署 Java 后端项目的核心流程是:
- 选对基础设施(ECS / ACK / SAE)
- 安装运行环境(JDK + Nginx)
- 上传并运行应用(Jar 包 + systemd 服务)
- 配置网络与安全(Nginx 反向XX + SSL + 域名)
- 接入数据库与存储(RDS + OSS)
- 建立监控与自动化体系
对于新手,建议先从 ECS + 手动部署 开始,熟悉 Linux 操作和网络配置后再过渡到容器化和服务化架构。随着业务增长,逐步引入 SLB、OSS、SLS、ACK 等阿里云原生产品,提升系统的稳定性与可维护性。
如需进一步了解容器化部署(Docker + K8s)或 Serverless 方案,欢迎继续提问。
云技术博客