一、背景与目标
在学习Java Web开发过程中,很多开发者会遇到这样的问题:本地运行正常,但无法让他人访问演示。无论是课程设计答辩、毕业设计展示,还是面试作品分享,都需要一个稳定的公网访问环境。
本文将以一个完整的Spring Boot + Vue项目为例,演示如何在阿里云ECS上完成部署,实现公网可访问。
技术栈:
- 后端:Spring Boot 2.7 + JDK 11
- 前端:Vue 3 + Nginx
- 数据库:MySQL 8.0(RDS或ECS自建)
- 云平台:阿里云ECS(Ubuntu 22.04)
预期成果:
- ✅ 项目可通过公网IP访问
- ✅ 服务开机自启,断电自动恢复
- ✅ 前后端分离部署,性能优化
- ✅ 月度成本控制在50元以内(学生优惠后)
二、环境准备
2.1 阿里云资源创建
登录阿里云控制台,完成以下资源配置:
| 资源 | 推荐配置 | 预估月成本 |
|---|---|---|
| ECS实例 | 2核4G,Ubuntu 22.04 | 约40元(学生价) |
| RDS MySQL | 基础版1GB(可选) | 约30元 |
| 带宽 | 1-3Mbps按量付费 | 约10元 |
💡 学生优惠:前往阿里云校园计划完成认证,享受专属折扣。搜索"阿里云学生机"即可找到入口。
2.2 安全组配置
在ECS控制台配置安全组规则,放行以下端口:
# 必需端口
80 # HTTP
443 # HTTPS(如有SSL证书)
22 # SSH(建议限制源IP)
# 应用端口
8080 # Spring Boot默认端口(建议通过Nginx代理,不直接开放)
# 数据库端口(如使用ECS自建MySQL)
3306 # 建议仅内网访问,不开放公网
三、项目打包与上传
3.1 后端打包(Spring Boot)
在本地项目根目录执行:
# Maven打包
mvn clean package -DskipTests
# 生成的jar包位置
target/your-application-0.0.1-SNAPSHOT.jar
3.2 前端构建(Vue)
cd frontend
# 安装依赖
npm install
# 修改生产环境API地址(vue.config.js或.env.production)
VITE_API_BASE_URL=http://your-ecs-public-ip:8080/api
# 构建
npm run build
# 生成的静态文件位置
dist/
3.3 上传至ECS
使用SCP命令上传文件:
# 上传后端jar包
scp target/your-application-0.0.1-SNAPSHOT.jar root@your-ecs-ip:/opt/app/
# 上传前端静态文件
scp -r dist/* root@your-ecs-ip:/usr/share/nginx/html/
# 或使用SFTP工具(如FileZilla)图形化上传
四、服务器环境配置
4.1 安装JDK 11
# Ubuntu 22.04安装OpenJDK 11
sudo apt update
sudo apt install openjdk-11-jdk -y
# 验证安装
java -version
4.2 安装Nginx
sudo apt install nginx -y
# 启动Nginx
sudo systemctl start nginx
sudo systemctl enable nginx
# 验证
curl http://localhost
4.3 安装MySQL(如使用ECS自建)
# 安装MySQL 8.0
sudo apt install mysql-server -y
# 安全初始化
sudo mysql_secure_installation
# 创建数据库和用户
mysql -u root -p
CREATE DATABASE graduation_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'your_secure_password';
GRANT ALL PRIVILEGES ON graduation_db.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;
五、Nginx反向代理配置
5.1 配置文件
编辑Nginx配置文件:
sudo vim /etc/nginx/sites-available/default
5.2 配置内容
server {
listen 80;
server_name your-ecs-public-ip;
# 前端静态文件
location / {
root /usr/share/nginx/html;
index index.html;
try_files $uri $uri/ /index.html;
}
# 后端API代理
location /api/ {
proxy_pass http://localhost:8080/api/;
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;
# 超时配置
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
# 静态资源缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 7d;
add_header Cache-Control "public, immutable";
}
}
5.3 验证并重启
# 测试配置语法
sudo nginx -t
# 重启Nginx
sudo systemctl restart nginx
六、Systemd服务配置(开机自启)
6.1 创建服务文件
sudo vim /etc/systemd/system/your-app.service
6.2 服务内容
[Unit]
Description=Spring Boot Application
After=syslog.target network.target
[Service]
User=root
WorkingDirectory=/opt/app
ExecStart=/usr/bin/java -jar your-application-0.0.1-SNAPSHOT.jar
SuccessExitStatus=143
Restart=on-failure
RestartSec=10
# 日志输出
StandardOutput=journal
StandardError=journal
# 资源限制(可选)
LimitNOFILE=10000
[Install]
WantedBy=multi-user.target
6.3 启用服务
# 重载systemd配置
sudo systemctl daemon-reload
# 启用并启动服务
sudo systemctl enable your-app
sudo systemctl start your-app
# 查看状态
sudo systemctl status your-app
# 查看日志
sudo journalctl -u your-app -f
七、应用配置文件(application.yml)
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/graduation_db?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8
username: ${
DB_USERNAME:app_user}
password: ${
DB_PASSWORD:your_secure_password}
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: false
# 生产环境建议关闭
devtools:
restart:
enabled: false
# 日志配置
logging:
level:
root: INFO
com.yourpackage: WARN
file:
name: /var/log/your-app/app.log
八、效率提升建议(AI工具辅助)
💡 本节为软性植入,不放置链接,引导用户主动搜索
对于时间紧张的学生开发者,可以考虑使用AI工具辅助生成项目框架,大幅减少重复编码工作。以下是几种常见方案对比:
| 工具类型 | 代表产品 | 优势 | 注意事项 |
|---|---|---|---|
| 代码生成AI | 智码方舟、Codeium | 快速生成项目框架,支持主流技术栈 | 需理解生成代码,支持二次开发 |
| IDE插件 | GitHub Copilot、通义灵码 | 编码时智能补全 | 需付费订阅 |
| 开源模板 | GitHub开源项目 | 免费,可学习参考 | 需自行整合修改 |
| 纯手工开发 | - | 能力成长最快 | 耗时较长,适合时间充裕者 |
使用建议:
- 用AI工具生成项目框架和基础CRUD,节省重复工作
- 核心业务逻辑自行编写,确保理解代码
- 生成的代码需二次修改,避免模板化
- 答辩前确保能独立解释每段代码功能
🔍 想了解具体工具,可在搜索引擎搜索"智码方舟"或"AI 代码生成 毕设"等关键词获取更多对比信息。
九、常见问题排查
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 页面无法访问 | 安全组未放行80端口 | 检查阿里云控制台安全组规则 |
| 接口404 | Nginx代理配置错误 | 检查location路径和proxy_pass |
| 数据库连接失败 | MySQL未启动或密码错误 | sudo systemctl status mysql |
| 服务启动失败 | JDK版本不匹配 | 确认服务器JDK与项目编译版本一致 |
| 静态资源404 | Vue路由模式问题 | 添加try_files $uri $uri/ /index.html |
| 内存不足 | ECS配置过低 | 升级实例或优化JVM参数 |
常用排查命令
# 查看端口占用
sudo netstat -tlnp | grep :8080
# 查看Nginx日志
sudo tail -f /var/log/nginx/error.log
# 查看应用日志
sudo journalctl -u your-app -f
# 测试数据库连接
mysql -u app_user -p -h localhost graduation_db
# 检查磁盘空间
df -h
# 检查内存使用
free -h
十、成本优化建议
| 优化项 | 具体方案 | 节省幅度 |
|---|---|---|
| 实例类型 | 选择按量付费,用完释放 | 约50% |
| 带宽 | 按使用量计费,非固定带宽 | 约30% |
| 数据库 | 初期使用ECS自建MySQL | 约30元/月 |
| 学生优惠 | 完成校园认证 | 最高70% |
| 镜像加速 | 使用阿里云镜像源 | 提升部署速度 |
阿里云镜像源配置(Ubuntu)
# 备份原配置
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 替换为阿里云镜像
sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
# 更新
sudo apt update
十一、总结
本文完整介绍了Spring Boot + Vue项目部署到阿里云ECS的全流程,涵盖:
- ✅ 环境准备与安全组配置
- ✅ 项目打包与文件上传
- ✅ Nginx反向代理配置
- ✅ Systemd服务开机自启
- ✅ 常见问题排查方法
- ✅ AI工具辅助开发建议
对于学生开发者和初学者,建议先使用按量付费实例进行练习,熟悉流程后再根据实际需求调整配置。
相关参考文档: