文章目录
- 手把手教你Docker部署若依项目(整合)
- 一、整体思路
- 二、准备工作
- 三、开始干活
- 之前的docker-compose.yml文件
- 配置ruoyiweb的服务
- 最终docker-compose.yml文件
- 四、启动测试
- 五、结语
- 相关链接
手把手教你Docker部署若依项目(整合)
当我们将若依项目的前端和后端都制作成镜像后,我们就开始整合。实现真正的一键部署。文末有相关连接
一、整体思路
- 这里我们采用的是前后分离的ruoyi-vue项目,所以我们要分别制作
后端Docker镜像
和前端Docker镜像
。 - 后端服务,该项目主要是SpringBoot项目,其中依赖了Mysql和Redis两个服务,也就是我们需要启动Redis和Mysql两个镜像,然后将SpringBoot项目制作成镜像,连接到Mysq和Redis即可。
- 前端项目,我们手动将
ruoyi-ui
这个项目打包成dist文件,然后基于nginx镜像做一个镜像,将该dist文件添加到镜像里面,再配置下端口转发即可。 - 最终通过
docker-compose.yml
将所有的服务进行整合实现真正的一键部署
二、准备工作
我们先简单汇总下我们现在有什么东西。
- ruoyiweb镜像(基于nginx的,ruoyi-ui的dist文件)
- ruoyiapp镜像(基于ruoyi-admin.jar包)
- ruoyimysql镜像(基于mysql,初始化建表语句)
- 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
启动
浏览器访问 (出现验证码图片就表示成功,验证码是后端返回的)
五、结语
关于上面的一些配置都是最最基础的,大家可以按需所取,希望能帮助到大家,一起努力,一起进步,有任何疑问和建议,欢迎评论留言!!!