文章目录

  • 手把手教你Docker部署若依项目(整合)
  • 一、整体思路
  • 二、准备工作
  • 三、开始干活
  • 之前的docker-compose.yml文件
  • 配置ruoyiweb的服务
  • 最终docker-compose.yml文件
  • 四、启动测试
  • 五、结语
  • 相关链接


手把手教你Docker部署若依项目(整合)

当我们将若依项目的前端和后端都制作成镜像后,我们就开始整合。实现真正的一键部署。文末有相关连接

一、整体思路

  1. 这里我们采用的是前后分离的ruoyi-vue项目,所以我们要分别制作后端Docker镜像前端Docker镜像
  2. 后端服务,该项目主要是SpringBoot项目,其中依赖了Mysql和Redis两个服务,也就是我们需要启动Redis和Mysql两个镜像,然后将SpringBoot项目制作成镜像,连接到Mysq和Redis即可。
  3. 前端项目,我们手动将ruoyi-ui这个项目打包成dist文件,然后基于nginx镜像做一个镜像,将该dist文件添加到镜像里面,再配置下端口转发即可。
  4. 最终通过docker-compose.yml将所有的服务进行整合实现真正的一键部署

二、准备工作


我们先简单汇总下我们现在有什么东西。

  1. ruoyiweb镜像(基于nginx的,ruoyi-ui的dist文件)
  2. ruoyiapp镜像(基于ruoyi-admin.jar包)
  3. ruoyimysql镜像(基于mysql,初始化建表语句)
  4. docker-compose.yml文件(定义了后端服务的启动逻辑)

三、开始干活

我们使用docker-compose up可以完整启动我们的后端服务,现在问题就是我们的前端服务怎么加进来?我们在docker-compose.yml中添加即可,但是我们在nginx配置转发ip是127.0.0.1,现在又要怎么才能访问我们的接口呢?我们一点一点来。

之前的docker-compose.yml文件
version: "3.8"
services:
  # mysql服务
  mysql:
    image: ruoyimysql
    volumes:
      - ./mysql:/var/lib/mysql
    restart: always
    container_name: ruoyi-mysql
    ports:
      - 3306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=songweiwei
      - MYSQL_DATABASE=ry-vue
      - MYSQL_USER=ruoyi
      - MYSQL_PASSWORD=ruoyi
  # redis服务
  redis:
    image: library/redis:alpine
    container_name: ruoyi-redis
    ports:
      - 6379:6379
    # 给redis设置密码
    command: redis-server --requirepass songweiwei --appendonly yes
    volumes:
      - ./redis/data:/data
  # 构建若依后端
  ruoyiapp:
    # 镜像来源 自己构建的
    image: ruoyiapp
    container_name: ruoyi-app
    # 对外暴露端口 8080
    ports:
      - 8080:8080
    # 后端项目需要的配置,可修改
    environment:
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_DATABASE=0
      - REDIS_PASSWORD=songweiwei
      - MYSQL_HOST=mysql
      - MYSQL_PORT=3306
      - MYSQL_DATABASE=ry-vue
      - MYSQL_USERNAME=ruoyi
      - MYSQL_PASSWORD=ruoyi
    depends_on:
      - redis
      - mysql
    links:
      - redis
      - mysql
配置ruoyiweb的服务
version: "3.8"
services:
	ruoyi-web:
		image: ruoyiweb
		ports:
			- 8088:80
		 depends_on:
      - ruoyiapp

这样启动的话,默认会读取我们在ruoyiweb这个镜像里面的nginx配置文件(制作镜像时候copy进去的),那时候转发的ip是127.0.0.1,我们需要修改当时的nginx配置。

我们在ruoyiapp项目连接mysql时候,我们直接写的mysql服务的服务名字(yml文件中services的下一层),nginx也是同理,我们有两种做法:

  • 我们可以在编写yml文件中进行目录挂载,我们需要提前准备好个nginx的配置文件,然后配置下目录挂载,
  • 我们重新构建ruoyiweb这个镜像,里面的转发ip直接写 我们 ruoyiapp的服务名称

这两种做法各有利弊,第一种比较灵活,我们还可以单独配置若依后端服务的端口,第二种的话不用返工了,更加符合一键部署,但是如果后端服务端口变化了,只能使用第一种了。

这里我就采用第一种方式,直接目录挂载,修改nginx配置,覆盖ruoyiweb镜像的nginx配置,我们在/ruoyi/nginx目录创建defalut.conf文件,内容为如下:

server {
    listen       80;
    server_name  localhost;

    location / {
            root   /data/dist;
            index  index.html index.htm;
                 try_files $uri $uri/ /index.html;
    }

   location /prod-api/ {
      proxy_pass  http://ruoyiapp:8080/; # 转发规则 ip写后端服务名称
      proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
最终docker-compose.yml文件
version: "3.8"
services:
  # mysql服务
  mysql:
    image: ruoyimysql
    volumes:
      - ./mysql:/var/lib/mysql
    restart: always
    container_name: ruoyi-mysql
    ports:
      - 3306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=songweiwei
      - MYSQL_DATABASE=ry-vue
      - MYSQL_USER=ruoyi
      - MYSQL_PASSWORD=ruoyi
  # redis服务
  redis:
    image: library/redis:alpine
    container_name: ruoyi-redis
    ports:
      - 6379:6379
    # 给redis设置密码
    command: redis-server --requirepass songweiwei --appendonly yes
    volumes:
      - ./redis/data:/data
  # 构建若依后端
  ruoyiapp:
    # 镜像来源 自己构建的
    image: ruoyiapp
    # build值为 . 表示从当前目录找Dockerfile进行构建
    build: .
    container_name: ruoyi-app
    # 对外暴露端口 8080
    ports:
      - 8080:8080
    # 后端项目需要的配置,可修改
    environment:
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_DATABASE=0
      - REDIS_PASSWORD=songweiwei
      - MYSQL_HOST=mysql
      - MYSQL_PORT=3306
      - MYSQL_DATABASE=ry-vue
      - MYSQL_USERNAME=ruoyi
      - MYSQL_PASSWORD=ruoyi
    depends_on:
      - redis
      - mysql
    links:
      - redis
      - mysql

  # 构建若依前端
  ruoyiweb:
    image: ruoyiweb
    container_name: ruoyi-web
    ports:
      - 8088:80
    volumes:
      - /ruoyi/nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - ruoyiapp
    links:
      - ruoyiapp

四、启动测试

当前目录结构

├── docker-compose.yml
└── nginx
    └── default.conf

使用docker-compose up -d启动

浏览器访问 (出现验证码图片就表示成功,验证码是后端返回的)

docker部署若依cloud版验证码显示不出来 若依 docker部署_docker

五、结语

关于上面的一些配置都是最最基础的,大家可以按需所取,希望能帮助到大家,一起努力,一起进步,有任何疑问和建议,欢迎评论留言!!!