news 2026/11/5 6:03:26

使用sealos部署Java前后端分离项目实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用sealos部署Java前后端分离项目实战

1. 项目概述

最近在尝试使用sealos云平台部署一个完整的Java前后端分离项目(以若依框架为例),整个过程踩了不少坑,也积累了一些实战经验。sealos作为新兴的云服务平台,提供了从开发到部署的一站式解决方案,特别适合个人开发者和小型团队快速搭建项目环境。

选择若依框架作为示例,是因为它是一个基于Spring Boot和Vue.js的权限管理系统,包含了前后端分离架构的典型组件,非常适合用来演示完整的部署流程。通过这个案例,你将学会如何在sealos上:

  • 创建前后端服务实例
  • 配置开发环境
  • 部署Spring Boot后端
  • 部署Vue.js前端
  • 实现前后端联调

2. 环境准备与账号配置

2.1 sealos账号注册与认证

首先访问sealos官网(https://bja.sealos.run/)完成注册流程。新用户注册后会获得少量免费额度,足够用于小型项目的开发和测试。

注册时需要注意:

  1. 必须完成实名认证才能使用全部功能
  2. 建议绑定手机号和邮箱,便于接收服务状态通知
  3. 免费额度有限,部署前先规划好资源使用

提示:虽然sealos提供免费额度,但生产环境建议根据实际需求购买合适的套餐,避免因资源不足导致服务中断。

2.2 服务实例创建

登录后进入控制台,我们需要创建两个服务实例:

  1. 后端服务:运行Spring Boot应用
  2. 前端服务:运行Vue.js应用

创建步骤:

  1. 点击"新建服务"
  2. 选择适合的实例规格(初学者可选择最低配置)
  3. 为服务命名(如backend、frontend)
  4. 选择操作系统(推荐Ubuntu LTS版本)
  5. 配置网络和安全组(默认设置通常足够)

创建完成后,系统会分配公网IP和登录凭证,务必妥善保存这些信息。

3. 开发环境配置

3.1 连接开发环境

sealos提供了Web终端和SSH两种连接方式。对于Java项目开发,推荐使用专业的IDE如IntelliJ IDEA或VS Code配合Remote SSH插件。

连接步骤:

  1. 获取实例的SSH连接信息(IP、端口、用户名、密码)
  2. 在本地IDE中配置Remote SSH连接
  3. 连接成功后,在远程环境中安装必要工具:
    • JDK 8/11(根据项目需求)
    • Maven/Gradle
    • Node.js(前端需要)
    • Git(代码版本控制)

3.2 项目代码准备

以若依框架为例,我们需要准备前后端代码:

  1. 克隆或下载若依项目源码:
git clone https://gitee.com/y_project/RuoYi-Vue.git
  1. 代码结构说明:
  • ruoyi-admin:Spring Boot后端模块
  • ruoyi-ui:Vue.js前端模块
  • sql:数据库初始化脚本
  1. 将代码分别上传到对应的服务实例:
  • 后端代码上传到backend实例
  • 前端代码上传到frontend实例

4. 后端服务部署

4.1 环境配置

在backend实例上需要配置:

  1. Java环境:
sudo apt update sudo apt install openjdk-11-jdk
  1. Maven安装与配置:
sudo apt install maven mvn -v # 验证安装
  1. 数据库准备(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 项目构建与运行

  1. 进入后端项目目录:
cd RuoYi-Vue/ruoyi-admin
  1. 修改配置文件application.yml:
  • 更新数据库连接信息
  • 配置服务器端口(默认8080)
  • 根据需求调整其他参数
  1. 构建项目:
mvn clean package
  1. 运行项目:
java -jar target/ruoyi-admin.jar

注意:生产环境建议使用nohup或systemd保持服务常驻:

nohup java -jar target/ruoyi-admin.jar > app.log 2>&1 &

4.3 服务测试与验证

  1. 检查服务是否正常运行:
curl http://localhost:8080
  1. 验证API接口:
curl http://localhost:8080/api/test
  1. 如果需要外部访问,确保:
  • 安全组开放了8080端口
  • 防火墙规则允许入站连接

5. 前端服务部署

5.1 环境配置

在frontend实例上需要配置:

  1. Node.js环境:
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash - sudo apt install nodejs
  1. 安装npm/yarn:
sudo npm install -g yarn

5.2 项目构建

  1. 进入前端项目目录:
cd RuoYi-Vue/ruoyi-ui
  1. 安装依赖:
yarn install
  1. 修改配置文件.env.production:
  • 将后端API地址改为backend服务的公网IP和端口
  • 配置前端访问路径等参数
  1. 构建生产版本:
yarn build:prod

构建完成后,静态文件会生成在dist目录。

5.3 服务部署

有多种方式部署前端静态资源:

方案1:使用Nginx

  1. 安装Nginx:
sudo apt install nginx
  1. 配置Nginx:
server { listen 80; server_name your_domain_or_ip; location / { root /path/to/ruoyi-ui/dist; try_files $uri $uri/ /index.html; } }
  1. 启动Nginx:
sudo systemctl start nginx

方案2:使用Node.js静态服务器

  1. 安装serve:
sudo npm install -g serve
  1. 启动服务:
serve -s dist -l 80

提示:生产环境推荐使用Nginx,性能更好且更稳定。

6. 前后端联调与问题排查

6.1 跨域问题解决

前后端分离部署最常见的跨域问题解决方案:

  1. 后端配置CORS(推荐): 在Spring Boot的配置类中添加:
@Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("*") .allowedHeaders("*"); } }; }
  1. Nginx反向代理(替代方案): 配置Nginx将/api路径代理到后端服务:
location /api { proxy_pass http://backend_ip:8080; }

6.2 常见问题排查

  1. 前端无法访问后端API:
  • 检查后端服务是否正常运行
  • 确认前端配置的API地址正确
  • 验证网络连通性(ping/telnet)
  1. 静态资源加载404:
  • 确认Nginx配置的root路径正确
  • 检查文件权限
  • 清除浏览器缓存
  1. 数据库连接失败:
  • 检查数据库服务状态
  • 验证连接字符串参数
  • 确认数据库用户权限
  1. 内存不足:
  • 使用free -h查看内存使用
  • 调整JVM参数(-Xmx)
  • 升级实例规格

7. 生产环境优化建议

7.1 后端优化

  1. JVM参数调优:
java -Xms512m -Xmx1024m -jar ruoyi-admin.jar
  1. 使用外部Tomcat部署:
  • 打包为war文件
  • 部署到Tomcat容器
  • 配置连接池等参数
  1. 启用HTTPS:
  • 申请SSL证书
  • 配置Spring Boot支持HTTPS
  • 或使用Nginx终止SSL

7.2 前端优化

  1. 启用Gzip压缩: 在Nginx配置中添加:
gzip on; gzip_types text/plain text/css application/json application/javascript text/xml;
  1. 配置缓存策略:
location /static { expires 1y; add_header Cache-Control "public"; }
  1. CDN加速:
  • 将静态资源上传到CDN
  • 修改资源引用路径

7.3 监控与维护

  1. 日志管理:
  • 配置日志轮转
  • 集中收集和分析
  1. 性能监控:
  • 使用Prometheus + Grafana
  • 监控JVM指标
  • 跟踪API响应时间
  1. 备份策略:
  • 定期备份数据库
  • 备份应用配置
  • 制定灾难恢复计划

8. 个人实战经验分享

在实际部署过程中,我总结了以下几点经验:

  1. 资源规划很重要:
  • 一开始低估了内存需求,导致服务频繁崩溃
  • 建议至少分配1GB内存给Java应用
  • 前端服务相对轻量,512MB通常足够
  1. 环境隔离:
  • 开发、测试、生产环境严格分离
  • 使用不同配置文件管理环境差异
  • 避免直接在生产环境修改代码
  1. 自动化部署:
  • 编写部署脚本减少人为错误
  • 考虑使用CI/CD流水线
  • 实现一键回滚机制
  1. 成本控制:
  • 合理利用免费额度
  • 设置预算告警
  • 非必要不保留开发实例
  1. 安全实践:
  • 定期更新系统和软件
  • 限制SSH访问IP
  • 使用强密码和密钥认证

这个部署方案已经成功应用于多个中小型项目,稳定性表现良好。对于刚开始接触云部署的开发者,建议先从简单的单机部署开始,逐步过渡到更复杂的集群架构。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/5 6:03:10

SSH连接Git的全面指南:从密钥生成到高级应用

1. 为什么选择SSH连接Git?作为开发者,我们每天都要与Git打交道数十次。每次推送代码都要输入用户名密码?这简直是对生产力的谋杀!SSH(Secure Shell)协议就像给你的Git操作装上了自动门禁系统,只…

作者头像 李华
网站建设 2026/11/5 6:02:52

帝国CMS接入微信JS-SDK实现分享缩略图与简介

简介:这份源码面向使用帝国CMS 7.5 UTF8版搭建内容站点的站长与开发者,用于解决微信内分享文章时朋友圈和转发好友不显示缩略图、简介缺失的问题。压缩包共6个文件,以php脚本、txt安装说明、js前端脚本和jpg示意图为主,整体约31KB…

作者头像 李华
网站建设 2026/11/5 6:02:52

分布式搜索扩容后QPS不涨:分片、段合并与查询链路排查

集群从三个节点扩到六个,机器加了一倍,QPS 却没跟着涨,p99 反而在凌晨两点抖到两秒多——这是我在一个日志检索场景里真实遇到过的情况。当时第一反应是"扩容没生效",查完_cat/nodes才发现节点都在,副本也分…

作者头像 李华
网站建设 2026/11/5 6:02:00

Outlook 登录 QQ 邮箱总失败?一文讲透授权码与 IMAP 配置

很多人第一次在 Outlook 里添加 QQ 邮箱账号时,都会卡在同一个地方:账号密码明明没错,网页端也能正常登录,但 Outlook 就是反复弹窗要求重新输入凭据,或者干脆报一个 0x800CCC0E 之类的连接错误。这个问题的根源不在 O…

作者头像 李华
网站建设 2026/11/5 6:01:18

文本引导图像生成:从提示词结构化到迭代收敛的完整指南

1. 先搞清楚文本引导图像生成到底在做什么很多人第一次接触这类工具时,脑子里想的都是“我打一句话,它给我画一张图”,这个理解不算错,但太粗了。真正上手之后你会发现,文本引导的图像生成本质上是一场你和模型之间的“…

作者头像 李华
网站建设 2026/11/5 6:00:45

请求头改写失效:搜索区域判定的多信号一致性校验与工程化替代

1. 先把现象拆开:一次"改请求头失效"到底发生了什么做爬虫、做搜索聚合、做浏览器扩展的同行,最近应该都碰到过同一类反馈:原本靠自定义Accept-Language、User-Agent、Referer这几项请求头就能把搜索服务的返回结果切到国际版&…

作者头像 李华