将项目使用docker分块部署

  • 1. 安装MySQL与Redis
  • 2. 构建与启动Java容器
  • 3. 安装与配置Nginx容器
  • 4. 打包上传代码


1. 安装MySQL与Redis

这里使用的是 mariadb 镜像,并且将 mariadb 数据库文件挂载到宿主机的 /home/mysql/ 目录下,

-p 3310:3306的含义是将docker容器的端口3306映射到主机的端口3310 上
MYSQL_ROOT_PASSWORD=123456是指创建数据库时候的密码
–name EladminMysql是指创建数据库的名字

docker run -v /home/mysql/:/var/lib/mysql \
-p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 \
--privileged=true --restart=always --name EladminMysql -d mariadb

创建好数据Mysql之后,进入到EladminMysql容器中,使用直接将文件拖拽进xshell命令

apt-get update && apt-get install lrzsz

安装好这个命令后将已经写好的eladmin.sql文件拖拽进EladminMysql容器中,然后创建数据库eladmin

mysql -u root -p
create database eladmin;
use eladmin;
//执行eladmin.sql文件
mysql> source /eladmin.sql
//查看结果
show tables;

安装Redis

docker run -itd --name redis --restart=always -p 6379:6379 redis

2. 构建与启动Java容器

Docker 部署使用到了环境变量参数,对于非 V2.6 版本的,需要修改 application.yml、application-prod.yml 等配置

部署docker iptv 部署docker 对服务器划分raid几_部署docker iptv

部署docker iptv 部署docker 对服务器划分raid几_docker_02


部署docker iptv 部署docker 对服务器划分raid几_部署docker iptv_03

修改完成后,打包项目将打包好地Jar上传到服务器的 /home/eladmin 目录,在该目录创建 Dockerfile 文件,并编写 Dockerfile

FROM java:8
ARG JAR_FILE=./*.jar
COPY ${JAR_FILE} app.jar
ENV TZ=Asia/Shanghai
ENTRYPOINT ["java","-jar","/app.jar"]

构建镜像,注意构建镜像的时候后面有一个实心的小圆点

docker build -t eladmin .

启动Java容器

将容器中的 /home/eladmin/ 挂载到宿主机的 /home/data/ 目录并且设置数据库地址与密码等环境变量参数
-p 8011:8000
-e DB_HOST=10.129.49.174 因为数据库是在docker中创建的,将端口8000映射到了主机的8011端口,所以这里填写主机的地址就可以访问到上面创建好的数据库,下面的redis同理

docker run -d \
--name eladmin --restart always \
-p 8011:8000 \
-e "TZ=Asia/Shanghai" \
-e DB_HOST=10.129.49.174 \
-e DB_PWD=mysql_pwd \
-e REDIS_HOST=10.129.49.174 \
-v /home/data/:/home/eladmin/ \
eladmin

3. 安装与配置Nginx容器

安装Nginx

  • /home/nginx/conf.d 用于存放配置文件
  • /home/nginx/cert 用于存放 https 证书
  • /home/nginx/html 用于存放网页文件
  • /home/nginx/logs 用于存放日志
docker run -d \
--name nginx --restart always \
-p 80:80 -p 443:443 \
-e "TZ=Asia/Shanghai" \
-v /home/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx/conf.d:/etc/nginx/conf.d \
-v /home/nginx/logs:/var/log/nginx \
-v /home/nginx/cert:/etc/nginx/cert \
-v /home/nginx/html:/usr/share/nginx/html \
nginx:alpine

创建这个docker的时候可能会报错,原因是这句话 -v /home/nginx/nginx.conf:/etc/nginx/nginx.conf
/home/nginx/nginx.conf 下的 nginx.conf 是一个文件夹,所以删掉nginx.conf,然后按下面的方法做,也就是创建了一个新的nginx docker容器,然后把里面的nginx.conf复制到home/nginx中代替原来的nginx.conf

docker run --name test -d nginx  
docker cp test:/etc/nginx/nginx.conf /home/nginx/

配置Nginx

这里使用 Nginx 反向代理访问后端服务,由于容器内部通信,因此需要使用容器的 IP,也就是 172.17.0.1
在 /home/nginx/conf.d 创建一个 eladmin.conf 的配置文件,文件内容如下

server
    {
        listen 80;
        server_name 10.129.49.174;
        index index.html;
        root  /usr/share/nginx/html/eladmin/dist;  #dist上传的路径

        # 避免访问出现 404 错误
        location / {
          try_files $uri $uri/ @router;
          index  index.html;
        }

        location @router {
          rewrite ^.*$ /index.html last;
        }

        # 接口
        location /api {
          proxy_pass http://172.17.0.1:8000;
          proxy_set_header X-Forwarded-Proto $scheme;
          proxy_set_header X-Forwarded-Port $server_port;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "upgrade";
        }

        # 授权接口
        location /auth {
          proxy_pass http://172.17.0.1:8000;
          proxy_set_header X-Forwarded-Proto $scheme;
          proxy_set_header X-Forwarded-Port $server_port;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "upgrade";
        }

        # WebSocket 服务
        location /webSocket {
          proxy_pass http://172.17.0.1:8000;
          proxy_set_header X-Forwarded-Proto $scheme;
          proxy_set_header X-Forwarded-Port $server_port;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "upgrade";
        }

        # 头像
        location /avatar {
          proxy_pass http://172.17.0.1:8000;
        }

        # 文件
        location /file {
          proxy_pass http://172.17.0.1:8000;
        }
    }

注意:容器中 /usr/share/nginx/html/eladmin/dist 对应宿主机的 /home/nginx/html/eladmin/dist 目录,因此文件上传到宿主机的目录即可

4. 打包上传代码

由于Nginx使用的是反向代理后端接口,因此 非 V2.6 版本需要做如下修改

  1. 将 .env.production 中的接口地址改为 ‘/’
  2. 修改 api.js 中的 baseUrl = process.env.VUE_APP_BASE_API === ‘/’ ? ‘’ : process.env.VUE_APP_BASE_API
  3. 打包项目并且上传到 /home/nginx/html/eladmin 目录下
  4. 重启 Nginx 容器 docker restart nginx
  5. 在浏览器输入服务器的地址即可访问