将项目使用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 等配置
修改完成后,打包项目将打包好地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 版本需要做如下修改
- 将 .env.production 中的接口地址改为 ‘/’
- 修改 api.js 中的 baseUrl = process.env.VUE_APP_BASE_API === ‘/’ ? ‘’ : process.env.VUE_APP_BASE_API
- 打包项目并且上传到 /home/nginx/html/eladmin 目录下
- 重启 Nginx 容器 docker restart nginx
- 在浏览器输入服务器的地址即可访问