RuoYi-Vue-Pro部署避坑指南:从配置文件修改到Docker镜像构建的完整流程

张开发
2026/5/17 17:06:05 15 分钟阅读
RuoYi-Vue-Pro部署避坑指南:从配置文件修改到Docker镜像构建的完整流程
RuoYi-Vue-Pro部署实战从零构建到生产环境优化的全链路指南1. 环境准备与基础服务搭建在开始RuoYi-Vue-Pro的部署之前我们需要确保基础环境已经就绪。不同于简单的开发环境生产级部署需要考虑更多因素操作系统选择建议推荐使用CentOS 7.9或Ubuntu 20.04 LTS等稳定版本最小化安装后执行系统更新yum update -y或apt update apt upgrade -y配置SSH密钥登录禁用root密码登录提示生产环境务必配置防火墙规则仅开放必要端口。例如# 开放80/443/SSH端口 firewall-cmd --permanent --add-port80/tcp firewall-cmd --permanent --add-port443/tcp firewall-cmd --permanent --add-port22/tcp firewall-cmd --reload1.1 Docker环境配置现代应用部署离不开容器化技术以下是优化后的Docker安装方案# 安装依赖工具 yum install -y yum-utils device-mapper-persistent-data lvm2 # 配置阿里云镜像源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 安装指定版本Docker避免最新版可能的不兼容问题 yum install -y docker-ce-20.10.17 docker-ce-cli-20.10.17 containerd.io # 配置镜像加速 mkdir -p /etc/docker cat /etc/docker/daemon.json EOF { registry-mirrors: [https://your-accelerator.mirror.aliyuncs.com], log-driver: json-file, log-opts: { max-size: 100m, max-file: 3 } } EOF # 启动并设置开机自启 systemctl enable --now docker常见问题排查如果遇到Device or resource busy错误尝试重启服务器使用docker info验证安装是否成功生产环境建议配置cgroupdriversystemd1.2 数据库服务部署MySQL是RuoYi-Vue-Pro的核心依赖我们推荐使用Docker部署MySQL 8.0# 创建数据目录 mkdir -p /data/mysql/{conf,data,logs} # 生成配置文件 cat /data/mysql/conf/my.cnf EOF [mysqld] usermysql character-set-serverutf8mb4 collation-serverutf8mb4_unicode_ci default_authentication_pluginmysql_native_password max_connections1000 innodb_buffer_pool_size1G slow_query_log1 long_query_time1 log-error/var/log/mysql/error.log EOF # 启动容器 docker run -d --name mysql \ -p 3306:3306 \ -v /data/mysql/conf:/etc/mysql/conf.d \ -v /data/mysql/data:/var/lib/mysql \ -v /data/mysql/logs:/var/log/mysql \ -e MYSQL_ROOT_PASSWORDYourStrongPassword \ -e TZAsia/Shanghai \ --restartalways \ mysql:8.0.28 \ --character-set-serverutf8mb4 \ --collation-serverutf8mb4_unicode_ci关键配置说明参数说明推荐值character-set-server字符集编码utf8mb4max_connections最大连接数根据业务调整innodb_buffer_pool_size缓冲池大小物理内存的50-70%注意MySQL 8.0默认使用caching_sha2_password认证插件如果客户端不支持需要在连接字符串中添加allowPublicKeyRetrievaltrue2. 后端服务部署与优化2.1 项目配置调整RuoYi-Vue-Pro的配置文件位于application-dev.yml需要重点关注以下配置项spring: datasource: url: jdbc:mysql://mysql-host:3306/ruoyi?useSSLtrueallowPublicKeyRetrievaltrueuseUnicodetruecharacterEncodingUTF-8serverTimezoneAsia/Shanghai username: root password: YourStrongPassword hikari: maximum-pool-size: 20 minimum-idle: 5 connection-timeout: 30000 idle-timeout: 600000 max-lifetime: 1800000 redis: host: redis-host port: 6379 password: YourRedisPassword database: 0 timeout: 3000 lettuce: pool: max-active: 20 max-idle: 10 min-idle: 5性能调优建议根据服务器配置调整线程池参数生产环境务必启用SSL连接建议配置连接池监控如Druid的stat-view-servlet2.2 Docker镜像构建优化后的Dockerfile示例# 使用多阶段构建减小镜像体积 FROM eclipse-temurin:17-jdk-jammy as builder WORKDIR /app COPY . . RUN ./mvnw clean package -DskipTests # 生产镜像 FROM eclipse-temurin:17-jre-jammy ENV TZAsia/Shanghai \ JAVA_OPTS-Xms1g -Xmx2g -XX:UseG1GC -XX:MaxGCPauseMillis200 # 创建非root用户运行 RUN useradd -m appuser \ mkdir -p /app \ chown appuser:appuser /app USER appuser WORKDIR /app COPY --frombuilder /app/target/*.jar app.jar COPY --frombuilder /app/target/classes/application-prod.yml config/ EXPOSE 8080 ENTRYPOINT [sh, -c, java ${JAVA_OPTS} -jar app.jar --spring.config.locationfile:./config/application-prod.yml]构建命令docker build -t ruoyi-pro:1.0.0 --build-arg APP_VERSION1.0.0 .镜像优化技巧使用.dockerignore排除不必要的文件多阶段构建减少最终镜像大小使用非root用户运行容器配置合理的JVM参数3. 前端部署与Nginx配置3.1 前端项目构建# 安装依赖 npm install --registryhttps://registry.npmmirror.com # 生产环境构建 npm run build:prod # 构建Docker镜像 docker build -t ruoyi-ui:1.0.0 -f Dockerfile .3.2 Nginx最佳实践配置upstream backend { server ruoyi-server:8080; keepalive 32; } server { listen 80; server_name your-domain.com; # 静态资源 location / { root /usr/share/nginx/html; index index.html; try_files $uri $uri/ /index.html; # 缓存配置 expires 7d; add_header Cache-Control public, max-age604800; } # API代理 location /prod-api/ { proxy_pass http://backend; 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_http_version 1.1; proxy_set_header Connection ; proxy_buffering on; proxy_buffer_size 4k; proxy_buffers 8 1M; proxy_busy_buffers_size 2M; proxy_temp_file_write_size 8M; } # 禁止访问敏感文件 location ~* \.(env|git|svn|htaccess) { deny all; } # 开启gzip gzip on; gzip_min_length 1k; gzip_comp_level 6; gzip_types text/plain text/css application/json application/javascript text/xml; gzip_vary on; }性能优化点启用HTTP/2协议配置合理的缓存策略开启Gzip压缩使用keepalive减少连接开销限制上传文件大小4. 监控与维护4.1 健康检查配置在Docker Compose或Kubernetes中配置健康检查healthcheck: test: [CMD-SHELL, curl -f http://localhost:8080/actuator/health || exit 1] interval: 30s timeout: 10s retries: 3 start_period: 60s4.2 日志收集方案推荐使用ELK或LokiPromtailGrafana组合收集日志# 示例使用Loki收集日志 docker run -d --name loki \ -p 3100:3100 \ -v /path/to/loki-config:/etc/loki \ grafana/loki:2.6.1 docker run -d --name promtail \ -v /var/lib/docker/containers:/var/lib/docker/containers \ -v /path/to/promtail-config:/etc/promtail \ grafana/promtail:2.6.14.3 性能监控指标关键监控指标包括JVM内存使用情况数据库连接池状态API响应时间P99系统负载和磁盘IORedis缓存命中率可以使用PrometheusGranfana搭建监控系统# prometheus.yml配置示例 scrape_configs: - job_name: ruoyi metrics_path: /actuator/prometheus static_configs: - targets: [ruoyi-server:8080]5. 安全加固措施5.1 容器安全# 限制容器资源 docker run -d \ --name ruoyi \ --memory2g \ --cpus1 \ --security-opt no-new-privileges \ --read-only \ --tmpfs /tmp:rw,size100M \ ruoyi-pro:1.0.0 # 定期扫描镜像漏洞 docker scan ruoyi-pro:1.0.05.2 应用安全禁用Swagger等开发工具配置合理的CORS策略启用CSRF防护定期更新依赖库版本配置WAF防护5.3 数据安全-- 数据库权限最小化 CREATE USER ruoyi% IDENTIFIED BY ComplexPassword123!; GRANT SELECT, INSERT, UPDATE, DELETE ON ruoyi.* TO ruoyi%; FLUSH PRIVILEGES;6. 持续集成与部署6.1 GitLab CI示例stages: - build - test - deploy variables: DOCKER_HOST: tcp://docker:2375 DOCKER_DRIVER: overlay2 build-backend: stage: build image: maven:3.8.6-openjdk-17 script: - mvn clean package -DskipTests artifacts: paths: - target/*.jar build-frontend: stage: build image: node:16 script: - npm install - npm run build:prod artifacts: paths: - dist/ deploy: stage: deploy image: docker:20.10 services: - docker:20.10-dind script: - docker build -t ruoyi-pro:$CI_COMMIT_SHA . - docker push registry.example.com/ruoyi-pro:$CI_COMMIT_SHA - kubectl set image deployment/ruoyi ruoyiregistry.example.com/ruoyi-pro:$CI_COMMIT_SHA6.2 回滚策略# 快速回滚到上一个版本 kubectl rollout undo deployment/ruoyi # 或者指定特定版本 kubectl set image deployment/ruoyi ruoyiregistry.example.com/ruoyi-pro:1.0.17. 高可用架构设计对于生产环境建议采用以下架构前端CDN 多可用区部署后端Kubernetes集群 HPA自动扩缩数据库主从复制 读写分离缓存Redis哨兵或集群模式消息队列RabbitMQ镜像队列网络拓扑示例用户 → CDN → 负载均衡 → [前端Pod1, 前端Pod2] ↘ [后端Pod1, 后端Pod2] → [MySQL主] → [MySQL从] ↘ [Redis主] → [Redis从]8. 疑难问题排查指南8.1 常见错误与解决方案错误现象可能原因解决方案数据库连接失败网络不通/认证失败检查防火墙、验证连接字符串接口响应慢SQL查询未优化分析慢查询日志、添加索引内存溢出JVM配置不当调整堆内存、分析内存dump文件上传失败Nginx body大小限制调整client_max_body_size8.2 诊断命令速查# 查看容器日志 docker logs -f --tail 100 ruoyi-server # 检查网络连通性 docker exec ruoyi-server curl -I http://mysql:3306 # 分析线程堆栈 jstack pid thread_dump.log # 监控JVM内存 jstat -gcutil pid 1000 109. 版本升级策略备份数据库和配置文件在测试环境验证新版本逐步灰度发布到生产环境监控关键指标变化准备回滚方案# 数据库备份示例 mysqldump -u root -p ruoyi ruoyi_backup_$(date %Y%m%d).sql10. 扩展与定制开发RuoYi-Vue-Pro提供了良好的扩展点自定义starter模块插件机制开发工作流引擎集成多租户支持微服务化改造模块化开发建议src/ ├── main/ │ ├── java/ │ │ └── com/ │ │ └── ruoyi/ │ │ ├── common/ # 公共模块 │ │ ├── system/ # 系统核心 │ │ └── module/ # 业务模块 │ └── resources/ │ ├── static/ # 静态资源 │ └── templates/ # 模板文件 └── test/ # 测试代码

更多文章