从开发到上线全流程简化方案
结合你的技术栈(SSM/MyBatis-Plus+Restful+MySQL + 前端 HTML )、业务规模(40W 数据)、技术规划(Redis/RabbitMQ)和运维能力(Docker),我给你一套开箱即用、可直接落地、无缝衔接云上部署 的完整打通方案,覆盖开发环境 → 测试环境 → 生产部署 → 云上运维全链路。
核心目标:本地怎么写代码,服务器就怎么跑,零配置差异、一键部署、可水平扩展。
一、明确架构
你的项目最终标准架构:
plaintext
前端(HTML/静态资源) → Nginx(反向代理+静态资源托管)
后端(SSM+MyBatis-Plus) → API接口(Restful)
数据存储:MySQL(主) + Redis(缓存)
消息队列:RabbitMQ(异步处理:视频转码、通知、日志)
容器化:全部服务 Docker + Docker Compose
开发与部署完全同构,本地用 Docker 跑依赖,服务器也用 Docker 跑服务,无环境差异。
二、项目改造
这是打通开发部署的核心前提,你只需要做 3 个小改造:
1. 配置文件外置 + 环境变量驱动(关键!)
不要把 MySQL/Redis 地址写死在代码里,改用环境变量注入。
示例(application.yml):
yaml
spring:
# MySQL
datasource:
url: jdbc:mysql://${MYSQL_HOST:localhost}:${MYSQL_PORT:3306}/video_platform?useUnicode=true
username: ${MYSQL_USER:root}
password: ${MYSQL_PWD:root}
# Redis
redis:
host: ${REDIS_HOST:localhost}
port: ${REDIS_PORT:6379}
# RabbitMQ
rabbitmq:
host: ${RABBIT_HOST:localhost}
好处:一套代码,本地 / 测试 / 生产通用,不用改配置直接打包。
2. 后端项目打包成 Docker 镜像
给后端项目添加
Dockerfile(直接复制用):
dockerfile
FROM openjdk:8-jre-slim
WORKDIR /app
COPY target/*.jar app.jar
# 环境变量默认值,部署时可覆盖
ENV MYSQL_HOST=mysql MYSQL_PORT=3306
ENV REDIS_HOST=redis
ENV RABBIT_HOST=rabbitmq
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]
3. 前端静态资源直接由 Nginx 托管
前端 HTML/CSS/JS 不需要打包进 Java 项目,单独目录,用 Nginx 运行。
三、本地容器化
你本地不再手动装 MySQL/Redis/RabbitMQ,全部用 Docker 跑。
使用
docker-compose.yml一键启动所有依赖:
yaml
version: '3.8'
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: video_platform
volumes:
- ./mysql/data:/var/lib/mysql
ports:
- "3306:3306"
redis:
image: redis:7
ports:
- "6379:6379"
rabbitmq:
image: rabbitmq:3-management
ports:
- "5672:5672"
- "15672:15672"
命令 :docker-compose up -d
✅ 优势:
- 本地环境和服务器环境完全一致
- 新人入职、换电脑,一键启动,无配置噩梦
- 为后续服务器部署打下完全相同的基础
四、生产部署
这是真正上线 的环节,使用 Docker + Docker Compose 一键部署整套平台。
生产环境 docker-compose.yml
yaml
version: '3.8'
services:
# 数据库
mysql:
image: mysql:8.0
restart: always
environment:
MYSQL_ROOT_PASSWORD: xxx
MYSQL_DATABASE: video_platform
volumes:
- mysql-data:/var/lib/mysql
networks:
- app-network
# 缓存
redis:
image: redis:7
restart: always
volumes:
- redis-data:/data
networks:
- app-network
# 消息队列
rabbitmq:
image: rabbitmq:3-management
restart: always
networks:
- app-network
# 后端API
backend:
build: ./backend
restart: always
depends_on:
- mysql
- redis
- rabbitmq
environment:
MYSQL_HOST: mysql
REDIS_HOST: redis
RABBIT_HOST: rabbitmq
networks:
- app-network
# 前端 + 反向代理
nginx:
image: nginx:stable
restart: always
ports:
- "80:80"
volumes:
- ./frontend:/usr/share/nginx/html
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- backend
networks:
- app-network
networks:
app-network:
volumes:
mysql-data:
redis-data:
Nginx 配置(前后端分离 + Restful 接口转发)
nginx
server {
listen 80;
server_name localhost;
# 前端静态资源
location / {
root /usr/share/nginx/html;
index index.html;
try_files $uri $uri/ /index.html;
}
# 后端API转发 /api/* → Java服务
location /api/ {
proxy_pass http://backend:8080/api/;
proxy_set_header Host $host;
}
}
部署命令
bash
# 构建+启动所有服务
docker-compose up -d --build
# 查看日志
docker-compose logs -f backend
✅ 至此:开发与部署彻底打通
- 本地写代码 → 提交 → 服务器拉取 → 一键部署
- 无环境差异、无配置冲突、无依赖问题
五、高可用
你的视频平台有40W 数据,我给你轻量高效的优化方案:
1. MySQL 优化(Docker 内也能配置)
- 配置 my.cnf 开启慢查询、连接数、缓冲区
- 给视频表、用户表、播放记录表建索引
- MyBatis-Plus 开启分页、避免全表扫描
2. Redis 缓存预热(解决高并发)
- 视频详情、首页推荐、用户信息放入 Redis
- 接口层加缓存,大幅降低 MySQL 压力
- 支撑 40W 数据毫无压力
3. RabbitMQ 异步化(视频平台核心)
- 视频上传 → 丢队列 → 异步转码
- 评论、点赞、日志异步处理
- 不阻塞主线程,接口响应更快
六、云上部署
你现在的 Docker 方案可以直接上云,不需要重构。
云上部署路径(零改造迁移)
- 买一台云服务器(2 核 4G 起步)
- 安装 Docker / Docker Compose
- 上传你的代码 + docker-compose.yml
- 执行
docker-compose up -d - 配置域名 + SSL + 安全组
✅ 完全通用,本地怎么跑,云上就怎么跑。
云上进阶(为未来规模化做铺垫)
- 服务拆分:前端 / 后端 / 数据库独立容器
- 数据备份:Docker 卷自动备份 MySQL
- 监控:使用 Prometheus + Grafana 监控接口、CPU、内存
- 弹性扩展:未来流量大,直接上 Kubernetes(兼容你现有 Docker 镜像)
七、标准化流程
plaintext
1. 本地开发(Docker运行MySQL/Redis/RabbitMQ)
2. 代码完成 → 提交Git
3. 服务器拉取代码
4. 执行 docker-compose up -d --build 一键部署
5. Nginx 对外提供服务
6. 云上运维、监控、扩容
这就是企业级标准的 DevOps 开发部署模式,也是你后续进阶运维、架构师的基础。
八、总结
- 核心打通方式:Docker + Docker Compose 统一开发 / 部署环境,一套配置跑全流程
- 前后端分离:Nginx 托管前端,转发 API,标准 Restful 接口无缝对接
- 业务适配:完美支持 40W 数据 + MySQL/Redis/RabbitMQ 扩展
- 云上兼容:现有 Docker 镜像可直接上云,无需改造
- 运维能力:你掌握的 Docker Nginx/MySQL 部署,正好是这套方案的基石