0


Docker部署若依系统

花了三天的时间终于研究出来如何通过docker容器把若依这个开源项目(前后端分离版)部署到服务器上(本地虚拟机上跑的一个linux系统),刚开始使用war包的形式部署,发现后端怎么也访问不到,后来又改成jar包形式部署。

用到了mysql容器,redis容器,nginx容器,若依后端打包成的容器,暂时没有用到docker-compose把所有的东西集成一个镜像,直接一键部署,到后面再学习。

首先整体看一下整个目录结构

没有展开前

展开后

废话不多说,直接开整!!!!

第一步:首先在服务器上搭建整个文件结构

我是在服务器上的root目录下新建一个ruoyi文件夹,然后进入ruoyi文件夹再新建如下的文件夹

具体每个文件夹里面新建的文件夹如下

第二步:开始拉取镜像并把相关的文件挂载到上面新建的各个目录下

1,首先是mysql

1.1,先新建一个my.cnf文件,把它放到服务器root/ruoyi/mysql/conf里面,这个是数据库的配置文件,内容如下

[client]
default-character-set = utf8

[mysql]
default-character-set = utf8

[mysqld]
init_connect = 'SET NAMES utf8'
init_connect = 'SET collation_connection = utf8_unicode_ci'
character-set-server = utf8
collation-server = utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv = /var/lib/mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links = 0

# Custom config should go here
!includedir /etc/mysql/conf.d/

1.2,然后拉取mysql的镜像并创建成容器

docker run -p 3306:3306 --name mysql01 \
-v /root/ruoyi/mysql/log:/var/log/mysql \
-v /root/ruoyi/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /root/ruoyi/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

查数据库容器是否跑起来

上面要配置你数据库的密码,我指定的mysql版本为5.7,挂载的目录就是上面新建的目录

拉取镜像并创建容器成功后,在笔记本上用navicate连接一下这个数据库看下是否成功

应该是没啥问题,然后在这个数据里面新建一个数据库命名为ry-vue,然后把若依系统运行必须的数据导入进去,将那两个SQL文件内容复制到navicate直接执行就可以了

2,然后是redis

2.1,新建一个redis.conf配置文件,然后放到root/ruoyi/redis/conf文件路径下

内容如下,它主要用来数据持久化的

appendonly yes

2.2,拉取redis镜像并创建成容器

docker run -p 6379:6379 --name redis01 \
-v /root/ruoyi/redis/data:/data \
-v /root/ruoyi/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf

上面指定了redis的端口,密码没有设置,然后用可视化软件redis-desktop-manager连接一下,看看是否有问题

连接redis成功,就没啥问题了

3,其次是nginx

由于nginx的配置文件内容比较多,不再通过新建配置文件,自己往里面写配置内容的方式了,改成先把redis镜像拉取下来跑起来容器以后把容器里面redis的配置文件拷贝到对应的挂载目录里,然后再对其内容进行修改,再把nginx容器停止并删除,再把其镜像删除,重新再拉取

3.1,先拉取nginx镜像

docker run --name nginx01 -p 80:80 -d nginx

容器跑起来后,把里面的配置文件复制出来,这一步要回退到服务器的root目录下执行

docker cp 1bc5078f9e87:/etc/nginx/nginx.conf /root/ruoyi/nginx/conf

执行上面的命令

确定对应目录里面多出一个新的nginx.conf配置文件,然后把刚刚的nginx容器停掉并删除,其对应的镜像也要删除掉。

重新拉取nginx镜像并挂载对应目录

docker run --name nginx01 -p 80:80 \
-v /root/ruoyi/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /root/ruoyi/nginx/html:/usr/share/nginx/html \
-v /root/ruoyi/nginx/logs:/var/log/nginx \
-d nginx

第三步:制作后端镜像

1,首先把若依系统的代码修改一下,具体要修改的文件如下

配置你自己的数据库地址和redis地址以及打包的形式为jar包形式,然后直接打包成jar包放到服务器上root/ruoyi路径下

2,编写dockerFile文件,大致就是后端使用的Java版本,以及后端暴露的端口号

FROM java:8
MAINTAINER bingo
ADD ruoyi-admin.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]

并把这个文件放到和jar包同一路径下,具体如下

3,开始构建后端镜像,进入到root/ruoyi路径下,执行下面的命令,大致意思就是把当前文件夹下的Dockerfile文件和jar包构建成ruoyi-admin镜像版本为1.0

docker build -t ruoyi-admin:1.0 .

然后开始启动后端容器,启动之前一定要确保redis和mysql运行成功,并把系统运行必须的数据导入到数据库了

docker run -it -d --name ruoyi-admin -p 8080:8080 ruoyi-admin:1.0

到此后端算是部署完成了

第四步:部署前端页面

1,把系统前端页面打包,然后放到服务器root/ruoyi/nginx/html路径下,其中dist文件夹就是前端打包生成的,这个就不介绍了,自行打包就可以了

然后修改nginx的配置文件,让我们能够访问到这个前端页面,打开nginx的配置文件,在#gzip on后面添加如下内容

server{
      listen  80;
      server_name 172.28.27.110;
      
      #charset koi8-r;
      #access_log logs/host.access.log main;
      
      location / {
           root /usr/share/nginx/html/dist;
        index index.html index.htm;
           }

      }

保存以后,重启nginx容器,并访问172.28.27.110:80,出现系统页面表示前端部署成功

2,前后端打通,在nginx的配置文件里面添加如下内容,然后再重启nginx就可以了

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;
        proxy_pass http://172.28.27.110:8080/;
     }

整个nginx的配置文件内容如下

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    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;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
    server{
      listen  80;
      server_name 172.28.27.110;
      
      #charset koi8-r;
      #access_log logs/host.access.log main;
      
      location / {
           root /usr/share/nginx/html/dist;
        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;
           proxy_pass http://172.28.27.110:8080/;
           }
      
    }

    include /etc/nginx/conf.d/*.conf;
}

最后访问172.28.27.110:80

标签: docker 容器 运维

本文转载自: https://blog.csdn.net/Richard_wg/article/details/126340760
版权归原作者 Richard_wg 所有, 如有侵权,请联系我们删除。

“Docker部署若依系统”的评论:

还没有评论