CentOs 环境下使用 Docker 部署 Ruoyi-Vue

CentOs 环境下使用 Docker 部署 Ruoyi-Vue

RuoYi-Vue 项目下载地址

RuoYi-Vue: 🎉 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本 (gitee.com)

Docker 部署 Ruoyi 后端

首先使用 git 拉取整个项目,使用 idea 将项目打包成 jar (ruoyi-adimn.jar),并创建 Dockerfile 文件,与 jar 包同一目录下。

Dockerfile 内容如下:

dockerfile 复制代码
# 基础镜像
FROM  eclipse/centos_jdk8
# author
MAINTAINER lincain

EXPOSE 8080
USER root
RUN mkdir -p /usr/ruoyi
# 指定路径
WORKDIR /usr/ruoyi
# 复制jar文件到路径
COPY ruoyi-admin.jar /usr/ruoyi/ruoyi-admin.jar
# 启动认证服务

使用 Dockerfile 文件构建镜像,并创建容器。

镜像构建命令

dockerfile 复制代码
docker build -t ruoyi:1.0 .

使用创建的镜像启动 Docker 容器,并进入容器拉起 ruoyi 后台服务;

容器启动命令

dockerfile 复制代码
docker run --name ruoyi \
-p 8080:8080 \
-v /usr/local/ruoyi:/usr/ruoyi \
-d ruoyi:1.0

进入容器,拉起服务

dockerfile 复制代码
# 进入容器
docker exec -it ruoyi /bin/bash

# 拉起服务
java -jar ruoyi-admin.jar
Docker 部署 MySql

数据库配置文件

mysql 复制代码
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
max_connections=100

直接使用项目中的 sql 文件可能存在问题,因为其中的 sql 语句没有指定数据库名称和创建数据库使用的字符集,因此在文件开头添加如下语句。

复制代码
CREATE DATABASE IF NOT EXISTS database_name;
USE database_name;
SET NAMES utf8mb4

Dockerfile 内容如下

dockerfile 复制代码
FROM mysql:5.7.42
MAINTAINER lincain

# 将本地的sql文件拷贝到容器的初始化目录下
COPY ./sql/*.sql /docker-entrypoint-initdb.d/
ENV MYSQL_ROOT_PASSWORD=123456
ENV LANG=C.UTF_8
COPY ./conf/my.cnf /etc/mysql/my.cnf

使用 Dockerfile 文件构建镜像,并创建容器。

镜像构建命令

dockerfile 复制代码
docker build -t mysql:1.0 .

容器启动命令

dockerfile 复制代码
docker run -p 3306:3306 --name mysql \
-v /usr/local/mysql/log:/var/log/mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf:/etc/mysql/conf.d \
-d mysql:1.0
Docker 部署 Redis

Redis 使用已有的镜像,直接从仓库拉取。

镜像拉取命令

复制代码
docker pull redis:5.0.14

Redis 配置文件

json 复制代码
bind 0.0.0.0
protected-mode no
daemonize no
requirepass 123456
appendonly yes

容器启动命令

dockerfile 复制代码
docker run -p 6379:6379 --name redis \
-v /usr/local/redis/redis.conf:/etc/redis/redis.conf \
-v /usr/local/redis/data:/data \
-d redis:5.0.14 redis-server /etc/redis/redis.conf
Docker 部署 Nginx

Redis 使用已有的镜像,直接从仓库拉取;

镜像拉取命令

dockerfile 复制代码
docker pull nginx:1.22.1

配置 nginx.conf

nginx 复制代码
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

      location / {
            root   /home/nginx/www/dist/ruoyi-ui;
            try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }

      location /prod-api/{
         proxy_set_header Host $http_host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header REMOTE-HOST $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         #自己服务器地址:没改的话就是默认8080
         proxy_pass http://172.17.0.4:8080/
      }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

打包前端项目,并把打包好的dist目录拷贝到宿主机的指定目录下

dockerfile 复制代码
# 使用npm打包vue前端
npm run build:prod

容器启动命令

dockerfile 复制代码
docker run -p 80:80 --name nginx \
-v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/nginx/conf.d:/etc/nginx/conf.d \
-v /usr/local/nginx/html/dist:/home/nginx/www/dist/ruoyi-ui \
-d  nginx:1.22.1
注意事项

上面部署的4个组件均部署在同一个宿主机上,网络配置使用的是默认的网桥,因此容器本身的ip是按照启动顺序随机分配;

其中后端项目中调用redis时的ip地址和nginx中配置的ruoyi服务ip地址需要动态的修改;

可通过docker inspect [containerId]来查看容器的ip地址。

dockerfile 复制代码
# 以下是容器网络相关的信息,其中IPAddress为当前容器的IP地址
"Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "643b089d1c1646bb4a0ba9c6fe6535f925e69e5d2b580610ea09deda4919effd",
                    "EndpointID": "78611d8de8f5b62f0a43eb814fdc23291782b35af3dacb567cdde8fd6c54aa2e",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.4",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:04",
                    "DriverOpts": null
                }
            }

因此nginx.conf中的proxy_pass需要改为对应的若依后台服务的ip地址。同时若依后台服务的启动命令也修改进行修改,如下:java -jar ruoyi-admin.jar --spring.redis.host=[ruoyi容器的IP地址]

相关推荐
无羡仙7 小时前
从零构建 Vue 弹窗组件
前端·vue.js
计算机毕设VX:Fegn089510 小时前
计算机毕业设计|基于springboot + vue动物园管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
北辰alk10 小时前
深入理解Vue数据流:单向与双向的哲学博弈
vue.js
北辰alk11 小时前
解决Vue打包后静态资源图片失效的终极指南
vue.js
江湖有缘13 小时前
Jump个人仪表盘Docker化部署教程:从0到 搭建专属导航页
运维·docker·容器
Lam㊣13 小时前
Centos 7 系统docker:更换镜像源
linux·docker·centos
Jing_Rainbow13 小时前
【Vue-2/Lesson62(2025-12-10)】模块化与 Node.js HTTP 服务器开发详解🧩
前端·vue.js·node.js
挖土机_00813 小时前
Kubernetes 1.35 原地扩容(In-Place Pod Resize)完整解析:机制、差异与实战示例
docker·kubernetes
冴羽14 小时前
2026 年 Web 前端开发的 8 个趋势!
前端·javascript·vue.js
左直拳14 小时前
将c++程序部署到docker
开发语言·c++·docker