容器部署方式

对于熟悉 Docker 的开发者来说,使用 Docker 部署管理更加的简单高效

我一般习惯将 home 目录作为工作目录,因此 Docker 挂载的文件也都会存放在 home 目录中

安装Docker

  1. curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun && systemctl start docker && systemctl enable docker

如果你机器是国内的机器,那么需要配置镜像加速,一般使用阿里云镜像加速 阿里云加速官网

imageb817a495226b07de.png

安装Mysql与Redis

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

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

安装Redis

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

构建与启动Java容器

构建镜像

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

具体参考 :::

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

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

构建镜像

  1. docker build -t eladmin .

启动Java容器

将容器中的 /home/eladmin/ 挂载到宿主机的 /home/data/ 目录并且设置数据库地址与密码等环境变量参数

  1. docker run -d \
  2. --name eladmin --restart always \
  3. -p 8000:8000 \
  4. -e "TZ=Asia/Shanghai" \
  5. -e DB_HOST=172.17.0.1 \
  6. -e DB_PWD=mysql_pwd \
  7. -e REDIS_HOST=172.17.0.1 \
  8. -v /home/data/:/home/eladmin/ \
  9. eladmin

安装与配置Nginx容器

安装Nginx

::: tip

  • /home/nginx/conf.d 用于存放配置文件
  • /home/nginx/cert 用于存放 https 证书
  • /home/nginx/html 用于存放网页文件
  • /home/nginx/logs 用于存放日志 :::

首先在 /home/nginx 目录创建 nginx.conf 文件,不然安装 Nginx 会报错

  1. user nginx;
  2. worker_processes 1;
  3. error_log /var/log/nginx/error.log warn;
  4. pid /var/run/nginx.pid;
  5. events {
  6. worker_connections 1024;
  7. }
  8. http {
  9. include /etc/nginx/mime.types;
  10. default_type application/octet-stream;
  11. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  12. '$status $body_bytes_sent "$http_referer" '
  13. '"$http_user_agent" "$http_x_forwarded_for"';
  14. # access_log /var/log/nginx/access.log main;
  15. sendfile on;
  16. #tcp_nopush on;
  17. keepalive_timeout 65;
  18. include /etc/nginx/conf.d/*.conf;
  19. }

然后安装 Nginx

  1. docker run -d \
  2. --name nginx --restart always \
  3. -p 80:80 -p 443:443 \
  4. -e "TZ=Asia/Shanghai" \
  5. -v /home/nginx/nginx.conf:/etc/nginx/nginx.conf \
  6. -v /home/nginx/conf.d:/etc/nginx/conf.d \
  7. -v /home/nginx/logs:/var/log/nginx \
  8. -v /home/nginx/cert:/etc/nginx/cert \
  9. -v /home/nginx/html:/usr/share/nginx/html \
  10. nginx:alpine

配置Nginx

这里使用 Nginx 反向代理访问后端服务,由于容器内部通信,因此需要使用容器的 IP,也就是 172.17.0.1

/home/nginx/conf.d 创建一个 eladmin.conf 的配置文件,文件内容如下

  1. server
  2. {
  3. listen 80;
  4. server_name 域名/外网IP;
  5. index index.html;
  6. root /usr/share/nginx/html/eladmin/dist; #dist上传的路径
  7. # 避免访问出现 404 错误
  8. location / {
  9. try_files $uri $uri/ @router;
  10. index index.html;
  11. }
  12. location @router {
  13. rewrite ^.*$ /index.html last;
  14. }
  15. # 接口
  16. location /api {
  17. proxy_pass http://172.17.0.1:8000;
  18. proxy_set_header X-Forwarded-Proto $scheme;
  19. proxy_set_header X-Forwarded-Port $server_port;
  20. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  21. proxy_set_header Upgrade $http_upgrade;
  22. proxy_set_header Connection "upgrade";
  23. }
  24. # 授权接口
  25. location /auth {
  26. proxy_pass http://172.17.0.1:8000;
  27. proxy_set_header X-Forwarded-Proto $scheme;
  28. proxy_set_header X-Forwarded-Port $server_port;
  29. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  30. proxy_set_header Upgrade $http_upgrade;
  31. proxy_set_header Connection "upgrade";
  32. }
  33. # WebSocket 服务
  34. location /webSocket {
  35. proxy_pass http://172.17.0.1:8000;
  36. proxy_set_header X-Forwarded-Proto $scheme;
  37. proxy_set_header X-Forwarded-Port $server_port;
  38. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  39. proxy_set_header Upgrade $http_upgrade;
  40. proxy_set_header Connection "upgrade";
  41. }
  42. # 头像
  43. location /avatar {
  44. proxy_pass http://172.17.0.1:8000;
  45. }
  46. # 文件
  47. location /file {
  48. proxy_pass http://172.17.0.1:8000;
  49. }
  50. }

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

打包上传前端代码【重要】

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

1、将 .env.production 中的接口地址改为 '/'

imageb0806c848d01318e.png

2、修改 api.js 中的 baseUrl = process.env.VUE_APP_BASE_API === '/' ? '' : process.env.VUE_APP_BASE_API

imagedcd151a815c62932.png

3、打包项目并且上传到 /home/nginx/html/eladmin 目录下

4、重启 Nginx 容器 docker restart nginx