1. 项目概述
最近在尝试使用sealos云平台部署一个完整的Java前后端分离项目(以若依框架为例),整个过程踩了不少坑,也积累了一些实战经验。sealos作为新兴的云服务平台,提供了从开发到部署的一站式解决方案,特别适合个人开发者和小型团队快速搭建项目环境。
选择若依框架作为示例,是因为它是一个基于Spring Boot和Vue.js的权限管理系统,包含了前后端分离架构的典型组件,非常适合用来演示完整的部署流程。通过这个案例,你将学会如何在sealos上:
- 创建前后端服务实例
- 配置开发环境
- 部署Spring Boot后端
- 部署Vue.js前端
- 实现前后端联调
2. 环境准备与账号配置
2.1 sealos账号注册与认证
首先访问sealos官网(https://bja.sealos.run/)完成注册流程。新用户注册后会获得少量免费额度,足够用于小型项目的开发和测试。
注册时需要注意:
- 必须完成实名认证才能使用全部功能
- 建议绑定手机号和邮箱,便于接收服务状态通知
- 免费额度有限,部署前先规划好资源使用
提示:虽然sealos提供免费额度,但生产环境建议根据实际需求购买合适的套餐,避免因资源不足导致服务中断。
2.2 服务实例创建
登录后进入控制台,我们需要创建两个服务实例:
- 后端服务:运行Spring Boot应用
- 前端服务:运行Vue.js应用
创建步骤:
- 点击"新建服务"
- 选择适合的实例规格(初学者可选择最低配置)
- 为服务命名(如backend、frontend)
- 选择操作系统(推荐Ubuntu LTS版本)
- 配置网络和安全组(默认设置通常足够)
创建完成后,系统会分配公网IP和登录凭证,务必妥善保存这些信息。
3. 开发环境配置
3.1 连接开发环境
sealos提供了Web终端和SSH两种连接方式。对于Java项目开发,推荐使用专业的IDE如IntelliJ IDEA或VS Code配合Remote SSH插件。
连接步骤:
- 获取实例的SSH连接信息(IP、端口、用户名、密码)
- 在本地IDE中配置Remote SSH连接
- 连接成功后,在远程环境中安装必要工具:
- JDK 8/11(根据项目需求)
- Maven/Gradle
- Node.js(前端需要)
- Git(代码版本控制)
3.2 项目代码准备
以若依框架为例,我们需要准备前后端代码:
- 克隆或下载若依项目源码:
git clone https://gitee.com/y_project/RuoYi-Vue.git- 代码结构说明:
ruoyi-admin:Spring Boot后端模块ruoyi-ui:Vue.js前端模块sql:数据库初始化脚本
- 将代码分别上传到对应的服务实例:
- 后端代码上传到backend实例
- 前端代码上传到frontend实例
4. 后端服务部署
4.1 环境配置
在backend实例上需要配置:
- Java环境:
sudo apt update sudo apt install openjdk-11-jdk- Maven安装与配置:
sudo apt install maven mvn -v # 验证安装- 数据库准备(MySQL为例):
sudo apt install mysql-server sudo mysql_secure_installation创建数据库并导入初始化脚本:
CREATE DATABASE ruoyi DEFAULT CHARACTER SET utf8mb4; USE ruoyi; source /path/to/ruoyi.sql;4.2 项目构建与运行
- 进入后端项目目录:
cd RuoYi-Vue/ruoyi-admin- 修改配置文件
application.yml:
- 更新数据库连接信息
- 配置服务器端口(默认8080)
- 根据需求调整其他参数
- 构建项目:
mvn clean package- 运行项目:
java -jar target/ruoyi-admin.jar注意:生产环境建议使用nohup或systemd保持服务常驻:
nohup java -jar target/ruoyi-admin.jar > app.log 2>&1 &4.3 服务测试与验证
- 检查服务是否正常运行:
curl http://localhost:8080- 验证API接口:
curl http://localhost:8080/api/test- 如果需要外部访问,确保:
- 安全组开放了8080端口
- 防火墙规则允许入站连接
5. 前端服务部署
5.1 环境配置
在frontend实例上需要配置:
- Node.js环境:
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash - sudo apt install nodejs- 安装npm/yarn:
sudo npm install -g yarn5.2 项目构建
- 进入前端项目目录:
cd RuoYi-Vue/ruoyi-ui- 安装依赖:
yarn install- 修改配置文件
.env.production:
- 将后端API地址改为backend服务的公网IP和端口
- 配置前端访问路径等参数
- 构建生产版本:
yarn build:prod构建完成后,静态文件会生成在dist目录。
5.3 服务部署
有多种方式部署前端静态资源:
方案1:使用Nginx
- 安装Nginx:
sudo apt install nginx- 配置Nginx:
server { listen 80; server_name your_domain_or_ip; location / { root /path/to/ruoyi-ui/dist; try_files $uri $uri/ /index.html; } }- 启动Nginx:
sudo systemctl start nginx方案2:使用Node.js静态服务器
- 安装serve:
sudo npm install -g serve- 启动服务:
serve -s dist -l 80提示:生产环境推荐使用Nginx,性能更好且更稳定。
6. 前后端联调与问题排查
6.1 跨域问题解决
前后端分离部署最常见的跨域问题解决方案:
- 后端配置CORS(推荐): 在Spring Boot的配置类中添加:
@Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("*") .allowedHeaders("*"); } }; }- Nginx反向代理(替代方案): 配置Nginx将/api路径代理到后端服务:
location /api { proxy_pass http://backend_ip:8080; }6.2 常见问题排查
- 前端无法访问后端API:
- 检查后端服务是否正常运行
- 确认前端配置的API地址正确
- 验证网络连通性(ping/telnet)
- 静态资源加载404:
- 确认Nginx配置的root路径正确
- 检查文件权限
- 清除浏览器缓存
- 数据库连接失败:
- 检查数据库服务状态
- 验证连接字符串参数
- 确认数据库用户权限
- 内存不足:
- 使用
free -h查看内存使用 - 调整JVM参数(-Xmx)
- 升级实例规格
7. 生产环境优化建议
7.1 后端优化
- JVM参数调优:
java -Xms512m -Xmx1024m -jar ruoyi-admin.jar- 使用外部Tomcat部署:
- 打包为war文件
- 部署到Tomcat容器
- 配置连接池等参数
- 启用HTTPS:
- 申请SSL证书
- 配置Spring Boot支持HTTPS
- 或使用Nginx终止SSL
7.2 前端优化
- 启用Gzip压缩: 在Nginx配置中添加:
gzip on; gzip_types text/plain text/css application/json application/javascript text/xml;- 配置缓存策略:
location /static { expires 1y; add_header Cache-Control "public"; }- CDN加速:
- 将静态资源上传到CDN
- 修改资源引用路径
7.3 监控与维护
- 日志管理:
- 配置日志轮转
- 集中收集和分析
- 性能监控:
- 使用Prometheus + Grafana
- 监控JVM指标
- 跟踪API响应时间
- 备份策略:
- 定期备份数据库
- 备份应用配置
- 制定灾难恢复计划
8. 个人实战经验分享
在实际部署过程中,我总结了以下几点经验:
- 资源规划很重要:
- 一开始低估了内存需求,导致服务频繁崩溃
- 建议至少分配1GB内存给Java应用
- 前端服务相对轻量,512MB通常足够
- 环境隔离:
- 开发、测试、生产环境严格分离
- 使用不同配置文件管理环境差异
- 避免直接在生产环境修改代码
- 自动化部署:
- 编写部署脚本减少人为错误
- 考虑使用CI/CD流水线
- 实现一键回滚机制
- 成本控制:
- 合理利用免费额度
- 设置预算告警
- 非必要不保留开发实例
- 安全实践:
- 定期更新系统和软件
- 限制SSH访问IP
- 使用强密码和密钥认证
这个部署方案已经成功应用于多个中小型项目,稳定性表现良好。对于刚开始接触云部署的开发者,建议先从简单的单机部署开始,逐步过渡到更复杂的集群架构。