1. 项目环境

centos7 + docker + mysql + redis + ruoyi项目

ruoyi项目链接:https://gitee.com/y_project/RuoYi-Vue.git

2. 进行项目前后端代码打包

后端打包:

修改mysql连接的相关配置文件 RuoYi-Vue/ruoyi-admin/src/main/resources/application-druid.yml

修改redis连接的相关配置文件 RuoYi-Vue/ruoyi-admin/src/main/resources/application.yml

使用maven打包(这里使用容器目录挂载方式进行打包)

cd RuoYi-Vue
docker run -it --rm -v .:/opt/app -v /root/.m2:/root/.m2 -w /opt/app maven:3.8.8-sapmachine-11 mvn package

前端打包:

使用node打包(这里使用容器目录挂载方式进行打包)

cd ruoyi-ui

cd ruoyi-ui
docker run -it --rm -v .:/opt/app -w /opt/app node:18.20.3-alpine3.20 /bin/sh -c "npm install  --registry http://registry.npmmirror.com && npm run build:prod"

3. docker compose来构建服务

目录层级如下

将打包好的jar包放在java目录下用于构建镜像

将打包好的dist前端代码放到nginx中来构建镜像

sql目录用于存放用于导入的sql数据

database进行mysql数据目录的映射

./java/

dockerfile

FROM java:8u111-jdk
COPY . /opt/app
WORKDIR /opt/app
COPY start.sh /
CMD sh /start.sh

java.sh

sleep 10

java -jar ruoyi-admin.jar

等待10秒是因为Java构建镜像需要关联mysql,需等待mysql镜像构建完成

./nginx/

nginx.conf

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
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;
    charset utf-8;
    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;

    server {
        listen       80;
        server_name  localhost;
    
        #charset koi8-r;
        #access_log  /var/log/nginx/host.access.log  main;
    
        location / {
            root   /usr/share/nginx/dist;
            try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }
    
        location /prod-api/{
          proxy_pass http://java.host:8080/; #注意这里的写法
          proxy_set_header Host $http_host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       }
    
    }

}

dockerfile

FROM nginx:1.16.1

COPY ./nginx.conf /etc/nginx/nginx.conf

COPY ./dist /usr/share/nginx/dist

EXPOSE 80

docker-compose.yml文件

# 指定服务
services:
  nginx:
    # nginx镜像需要构建,将代码和配置文件拷贝进去
    build:
      context: ./nginx
    ports:
      - "80:80"
    links:
      - java:java.host
    depends_on:
      - java

  java:
    build:
      context: ./java
    links:
      - redis:redis.host
      - database:mysql.host
    depends_on:
      - database
      - redis

  redis:
    image: redis
    
  database:
    image: mysql:5.7
    container_name: mysql
    volumes:
      # mysql官方镜像的功能,将sql文件挂载到这个目录下,会自动进行导入操作。
      - ./sql:/docker-entrypoint-initdb.d
      - ./database:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=ry-vue
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci

4. 启动docker compose

docker compose up

构建完成后出现下面现象,ruoyi项目就启动成功了,访问本机ip的80端口就行

Logo

快速构建 Web 应用程序

更多推荐