作为资深Java后端,我给你一套可直接复制、生产可用 的Docker部署方案,用 Docker Compose 一键部署前后端+MySQL+Redis,全程无坑。
一、环境准备(服务器端)
1. 安装 Docker & Docker Compose(CentOS 7+)
bash
# 1. 安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
# 2. 添加 Docker 源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 3. 安装 Docker
yum install -y docker-ce docker-ce-cli containerd.io
# 4. 启动并开机自启
systemctl start docker
systemctl enable docker
# 5. 安装 Docker Compose(v2+)
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# 验证
docker -v
docker-compose -v
2. 项目结构(服务器目录)
/opt/ruoyi-docker/
├── docker-compose.yml # 核心编排文件
├── mysql/
│ ├── init/ # 初始化SQL(若依脚本)
│ │ └── ry_2025xxxx.sql
│ └── data/ # 数据挂载(自动生成)
├── redis/
│ └── data/ # 数据挂载(自动生成)
├── ruoyi-admin/ # 后端
│ ├── Dockerfile
│ └── ruoyi-admin.jar # 打包好的jar
└── ruoyi-ui/ # 前端
├── Dockerfile
├── nginx.conf
└── dist/ # npm run build 产物
二、后端(ruoyi-admin)配置
1. 后端 Dockerfile(/opt/ruoyi-docker/ruoyi-admin/Dockerfile)
dockerfile
FROM openjdk:8-jre-slim
MAINTAINER ruoyi
# 时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 端口
EXPOSE 8080
# 工作目录
WORKDIR /app
# 复制jar
COPY ruoyi-admin.jar app.jar
# 启动
ENTRYPOINT ["java", "-jar", "app.jar", "--spring.profiles.active=prod"]
2. 后端配置修改(application-prod.yml)
关键:数据库/Redis 地址用 Docker 服务名
yaml
spring:
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://ruoyi-mysql:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
username: root
password: root123456 # 与docker-compose一致
redis:
host: ruoyi-redis
port: 6379
password: # 无密码
三、前端(ruoyi-ui)配置
1. 前端 Dockerfile(/opt/ruoyi-docker/ruoyi-ui/Dockerfile)
dockerfile
FROM nginx:1.23-alpine
MAINTAINER ruoyi
# 时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 复制nginx配置
COPY nginx.conf /etc/nginx/conf.d/default.conf
# 复制前端dist
COPY dist /usr/share/nginx/html
# 端口
EXPOSE 80
# 启动
CMD ["nginx", "-g", "daemon off;"]
2. Nginx 配置(/opt/ruoyi-docker/ruoyi-ui/nginx.conf)
nginx
server {
listen 80;
server_name localhost;
# 前端静态资源
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
# 后端代理(关键:服务名 ruoyi-admin)
location /prod-api/ {
proxy_pass http://ruoyi-admin: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;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
四、核心:docker-compose.yml(一键启动)
yaml
version: '3.8'
services:
# 1. MySQL
ruoyi-mysql:
image: mysql:8.0.33
container_name: ruoyi-mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root123456
MYSQL_DATABASE: ry-vue
TZ: Asia/Shanghai
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/init:/docker-entrypoint-initdb.d # 初始化SQL
restart: always
networks:
- ruoyi-net
# 2. Redis
ruoyi-redis:
image: redis:7.0-alpine
container_name: ruoyi-redis
ports:
- "6379:6379"
volumes:
- ./redis/data:/data
restart: always
networks:
- ruoyi-net
# 3. 后端
ruoyi-admin:
build: ./ruoyi-admin
container_name: ruoyi-admin
ports:
- "8080:8080"
depends_on:
- ruoyi-mysql
- ruoyi-redis
restart: always
networks:
- ruoyi-net
# 4. 前端(Nginx)
ruoyi-ui:
build: ./ruoyi-ui
container_name: ruoyi-ui
ports:
- "80:80"
depends_on:
- ruoyi-admin
restart: always
networks:
- ruoyi-net
# 自定义网络(容器间互通)
networks:
ruoyi-net:
driver: bridge
五、部署执行步骤(服务器)
1. 准备文件
- 把若依SQL脚本放入
mysql/init/ - 后端打包
ruoyi-admin.jar放入ruoyi-admin/ - 前端
npm run build生成dist放入ruoyi-ui/
2. 一键构建+启动
bash
cd /opt/ruoyi-docker
# 构建镜像
docker-compose build
# 后台启动所有服务
docker-compose up -d
3. 验证
bash
# 查看容器状态
docker-compose ps
# 查看日志(排查问题)
docker-compose logs -f ruoyi-admin
docker-compose logs -f ruoyi-ui
# 访问
http://服务器IP
六、常用运维命令
bash
# 停止所有
docker-compose down
# 重启单个服务
docker-compose restart ruoyi-admin
# 查看所有日志
docker-compose logs -f
# 进入MySQL容器
docker exec -it ruoyi-mysql mysql -uroot -proot123456
七、生产环境优化(必做)
- MySQL :添加
command: --default-authentication-plugin=mysql_native_password兼容旧驱动 - Redis:添加密码、开启持久化
- Nginx:配置 HTTPS、gzip、缓存
- 数据安全:关闭端口映射(仅内部网络访问)
- 日志:配置 ELK 或文件挂载
八、常见问题
- 后端连不上MySQL :检查
application-prod.yml中地址是ruoyi-mysql,不是 localhost - 前端访问 404 :检查 Nginx 配置中
proxy_pass指向ruoyi-admin:8080 - MySQL 初始化失败 :清空
mysql/data目录,重新启动