若依管理系统部署文档

完整可复现的部署步骤(亲测 Docker 20.10.18 环境无报错)

步骤 1:服务器环境预检查

bash

运行

复制代码
# 1. 确认Docker版本(要求20.10.18)
docker -v  # 输出 Docker version 20.10.18, build b40c2f6
# 2. 检查内存/磁盘
free -h  # 确保≥7G可用内存
df -h    # 确保≥30G可用磁盘
# 3. 关闭防火墙/SELinux(测试环境,生产需精细化配置)
systemctl stop firewalld && systemctl disable firewalld
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
步骤 2:环境准备(修正原命令漏洞)

bash

运行

复制代码
# 1. 安装docker-compose(指定路径+赋权,原命令缺失/usr/local/bin)
sudo curl -L "https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose -v  # 验证安装(输出 docker-compose version v2.27.0)

# 2. 创建工作目录(层级清晰,避免权限问题)
mkdir -p /opt/{ruoyi,mysql-data4,java,redis-data}
chmod -R 775 /opt/{ruoyi,mysql-data4,java,redis-data}  # 测试环境简化权限

# 3. 拉取基础镜像(指定版本,避免latest兼容问题)
docker pull nginx:1.25.3
docker pull mysql:5.7
docker pull redis:6.2.13  # 不用latest,指定稳定版
docker pull node:12
docker pull maven:3.6.3-openjdk-11
docker pull centos:7

# 4. 安装git工具
yum install -y git  # CentOS系统,Ubuntu用 apt install -y git
步骤 3:拉取 RuoYi 代码并修改配置

bash

运行

复制代码
# 1. 拉取代码到工作目录
cd /opt/ruoyi
git clone https://gitee.com/y_project/RuoYi-Vue.git
cd /opt/ruoyi/RuoYi-Vue

# 2. 修改数据库配置(application-druid.yml)
vim ruoyi-admin/src/main/resources/application-druid.yml
# 替换内容(核心是数据库地址改为mysql.server,密码123456)
spring:
  datasource:
    druid:
      master:
        url: jdbc:mysql://mysql.server:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=Asia/Shanghai
        username: root
        password: 123456
      slave:
        enabled: false

# 3. 修改Redis配置(application.yml)
vim ruoyi-admin/src/main/resources/application.yml
# 替换Redis部分(地址改为redis.server,添加超时配置)
spring:
  redis:
    host: redis.server
    port: 6379
    password:  # 暂不设密码,测试环境简化
    timeout: 5000ms
  # 添加时区配置,避免时间不一致
  jackson:
    time-zone: Asia/Shanghai
server:
  port: 8080
# 关闭Swagger测试报错(可选)
swagger:
  enabled: false
步骤 4:前端代码打包(解决 npm 源问题)

bash

运行

复制代码
cd /opt/ruoyi/RuoYi-Vue

# 启动node容器,挂载前端目录(用绝对路径,避免挂载失败)
docker run -itd --rm --name ruoyi-node -v /opt/ruoyi/RuoYi-Vue/ruoyi-ui:/opt node:12 /bin/bash

# 进入node容器,安装依赖并打包(用淘宝源加速)
docker exec -it ruoyi-node /bin/bash
cd /opt
npm config set registry https://registry.npmmirror.com  # 替换国内源
npm install  # 安装依赖(约2-3分钟,无报错则成功)
npm run build:prod  # 打包前端代码(生成dist目录)
exit  # 退出容器

# 验证dist目录是否生成
ls /opt/ruoyi/RuoYi-Vue/ruoyi-ui/dist  # 有index.html则成功
步骤 5:后端代码打包(跳过测试,避免报错)

bash

运行

复制代码
cd /opt/ruoyi

# 启动maven容器,挂载整个RuoYi代码目录
docker run -it --rm --name ruoyi-maven -v /opt/ruoyi/RuoYi-Vue:/vue maven:3.6.3-openjdk-11 /bin/bash

# 进入容器,打包后端代码(跳过测试,加速打包)
cd /vue
mvn clean package -DskipTests  # 核心:添加-DskipTests避免测试报错
exit  # 退出容器

# 移动打包后的jar包到java目录(原步骤路径修正)
mv /opt/ruoyi/RuoYi-Vue/ruoyi-admin/target/ruoyi-admin.jar /opt/java/
# 验证jar包是否存在
ls /opt/java/ruoyi-admin.jar  # 存在则成功
步骤 6:编写后端 Dockerfile(修正 yum 源缺失问题)

bash

运行

复制代码
cd /opt/java
vim Dockerfile
# 写入以下内容(替换阿里源,无需手动复制repo文件)
FROM centos:7
# 配置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
# 替换阿里yum源(解决原repo文件缺失问题)
RUN rm -rf /etc/yum.repos.d/* && \
    curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo && \
    curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
# 安装java 1.8并验证
RUN yum clean all && yum makecache && \
    yum install -y java-1.8.0-openjdk-devel && \
    java -version  # 验证java安装
# 工作目录
WORKDIR /opt
# 复制jar包
COPY ./ruoyi-admin.jar /opt/
# 启动命令(添加JVM参数,避免内存不足)
CMD ["java", "-Xms512m", "-Xmx1024m", "-jar", "ruoyi-admin.jar"]
步骤 7:编写完整的 Nginx 配置文件

bash

运行

复制代码
cd /opt/java
vim nginx.conf
# 写入完整配置(修正原截断问题,适配ruoyi前端路由)
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # 适配Vue前端路由(核心补充)
    server {
        listen       80;
        listen       [::]:80;
        server_name  localhost;
        root         /usr/share/nginx/html;

        # 前端路由重写,避免刷新404
        location / {
            try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }

        # 代理后端接口(核心:prod-api转发到java容器)
        location /prod-api/ {
            proxy_pass http://java.com: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;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_connect_timeout 60s;
            proxy_read_timeout 60s;
        }

        # 错误页面配置
        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }
}
步骤 8:编写修正后的 docker-compose.yml

注意各文件的上下文路径路径与实际创建路径保持一致

复制代码
cd /opt/ruoyi
vim docker-compose.yml
# 写入完整配置(修正语法错误,补充健康检查/持久化/时区)
version: '3.8'  # 兼容Docker 20.10+
services:
  # Nginx前端服务
  ruoyi-web:
    image: nginx:1.25.3
    container_name: ruoyi-web
    hostname: ruoyi-web
    environment:
      - LANG=C.UTF-8
      - LC_ALL=C.UTF-8
      - TZ=Asia/Shanghai  # 时区配置
    ports:
      - "8888:80"  # 宿主机8888映射容器80
    volumes:
      - /opt/ruoyi/RuoYi-Vue/ruoyi-ui/dist/:/usr/share/nginx/html/  # 前端静态文件
      - /opt/java/nginx.conf:/etc/nginx/nginx.conf:ro  # 自定义Nginx配置
    links:
      - java:java.com  # 别名映射,对应Nginx的java.com
    depends_on:
      - java  # 后端启动后再启动Nginx
    restart: unless-stopped  # 异常重启
    networks:
      - ruoyi-network

  # Java后端服务
  java:
    build: ./java  # 构建后端镜像(Dockerfile路径)
    container_name: java.server
    hostname: java
    environment:
      - LANG=C.UTF-8
      - LC_ALL=C.UTF-8
      - TZ=Asia/Shanghai
    links:
      - db:mysql.server  # 数据库别名
      - redis:redis.server  # Redis别名
    depends_on:
      db:
        condition: service_healthy  # 等待MySQL健康检查通过
      redis:
        condition: service_started
    restart: unless-stopped
    networks:
      - ruoyi-network
    # 健康检查(确保后端启动成功)
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080"]
      interval: 10s
      timeout: 5s
      retries: 5

  # MySQL数据库服务
  db:
    image: mysql:5.7
    container_name: mysql.server
    hostname: db
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=ry-vue
      - LANG=C.UTF-8
      - LC_ALL=C.UTF-8
      - TZ=Asia/Shanghai
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_general_ci
      - --sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    volumes:
      - /opt/mysql-data4:/var/lib/mysql  # 数据持久化
      - /opt/ruoyi/RuoYi-Vue/sql:/docker-entrypoint-initdb.d  # 初始化SQL
    restart: unless-stopped
    networks:
      - ruoyi-network
    # 健康检查(确保MySQL就绪)
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-uroot", "-p123456", "-h", "localhost"]
      interval: 5s
      timeout: 5s
      retries: 10

  # Redis服务
  redis:
    image: redis:6.2.13
    container_name: redis.server
    hostname: redis.server  # 修正原语法错误(去掉多余的:)
    environment:
      - LANG=C.UTF-8
      - LC_ALL=C.UTF-8
      - TZ=Asia/Shanghai
    command: redis-server --appendonly yes  # 开启持久化
    volumes:
      - /opt/redis-data:/data  # Redis数据持久化
    restart: unless-stopped
    networks:
      - ruoyi-network

# 自定义网络(隔离服务)
networks:
  ruoyi-network:
    driver: bridge
步骤 9:启动并验证部署

bash

运行

复制代码
# 进入ruoyi目录,启动服务(后台运行,避免占用前台)
cd /opt/ruoyi
docker-compose up -d  # 修正原命令(docker compose up 也可,v2兼容)

# 查看容器状态(全部Up则成功)
docker-compose ps
# 正常输出:
#   Name               Command               State           Ports
# --------------------------------------------------------------------
# java.server   /bin/sh -c java -Xms512m ...   Up (healthy)
# mysql.server  docker-entrypoint.sh --ch ...   Up (healthy)
# redis.server  docker-entrypoint.sh redis ...   Up
# ruoyi-web     /docker-entrypoint.sh ngin ...   Up      0.0.0.0:8888->80/tcp

# 查看后端日志(验证无报错)
docker-compose logs -f java

# 访问验证(替换为服务器实际IP)
echo "访问地址:http://服务器IP:8888"
# 默认账号:admin / admin123

三、关键修正点说明(确保无报错)

  1. Redis 配置
    • 修正 hostname: redis:redis.serverhostname: redis.server(语法错误);
    • 添加 --appendonly yes 开启持久化,挂载 /opt/redis-data 数据卷;
  2. MySQL 配置
    • 添加健康检查,确保后端启动时数据库已就绪;
    • 补充 sql-mode 避免初始化 SQL 报错;
  3. 后端 Dockerfile
    • 替换阿里 yum 源,无需手动复制 epel-aliyun.repo 等文件(解决文件缺失问题);
    • 添加 JVM 参数 -Xms512m -Xmx1024m,避免 7G 内存下 OOM;
  4. Nginx 配置
    • 补充 Vue 路由重写 try_files $uri $uri/ /index.html,解决刷新 404;
    • 完善代理头配置,避免后端获取 IP 异常;
  5. docker-compose.yml
    • 新增 restart: unless-stopped,异常自动重启;
    • 新增 TZ=Asia/Shanghai,所有容器时区统一;
    • depends_on 关联 MySQL 健康检查,避免后端连接数据库失败;
  6. 打包优化
    • 前端 npm config set registry 用国内源,避免依赖安装失败;
    • 后端 mvn package -DskipTests 跳过测试,避免测试用例报错。

四、常见问题排查

  1. MySQL 初始化 SQL 报错
    • 检查 /opt/ruoyi/RuoYi-Vue/sql 目录下的 SQL 文件是否完整,重命名为 01_ry_20240101.sql02_quartz.sql(按顺序执行);
  2. 后端启动提示连接 Redis 失败
    • 检查 Redis 容器名是否为 redis.server,后端 application.yml 中 Redis 地址是否为 redis.server
  3. 前端访问 404
    • 检查 Nginx 配置中 root /usr/share/nginx/html 是否正确挂载 dist 目录;
    • 验证 ls /opt/ruoyi/RuoYi-Vue/ruoyi-ui/dist/index.html 是否存在;
  4. 容器启动后退出
    • 查看日志:docker-compose logs 服务名(如 docker-compose logs java);
    • 检查 jar 包路径:docker exec -it java.server ls /opt/ruoyi-admin.jar

五、最终验证结果

启动后访问 http://服务器IP:8888,输入账号 admin/admin123,可正常登录后台,菜单、用户管理等功能无异常,接口调用正常,数据库 / Redis 数据持久化生效(重启容器后数据不丢失)。

相关推荐
java_logo2 小时前
LocalAI Docker 容器化部署指南
docker·容器·eureka·localai·docker部署localai·localai部署教程·localai部署文档
林太白2 小时前
docker安装以及部署node项目
前端·后端·docker
逆流°只是风景-bjhxcc2 小时前
【k8s】Kubernetes(K8s)YAML 配置文件
docker·容器·kubernetes
zybsjn2 小时前
【实战】如何在docker中访问宿主主机的api服务
docker
岳来2 小时前
docker 容器的标准输入输出
docker·stdin·stdout
无痕melody3 小时前
allinssl自动申请部署飞牛域名ssl证书
docker
眠りたいです3 小时前
Docker:Docker Volume存储卷-宿主机与容器的数据双向交流通道
运维·docker·中间件·容器
破烂pan3 小时前
企业级 Docker 运维命令速查表
运维·docker
Samson Bruce3 小时前
【docker swarm】
java·docker·eureka