eladmin容器部署超详细过程

📔 笔记介绍

大家好,这里是千寻简笔记,我是作者星辰,笔记内容整理并发布,内容有误请指出,笔记源码已开源,前往Gitee搜索《chihiro-notes》感谢您的观看。

作者各大平台直链: GitHub | Gitee 

1️⃣Liunx环境准备

下文使用到的内容:

  • 系统:Ubuntu(跟CentOS配置yum不同,其他都相同)
  • 远程服务器:FinalShell
  • 容器部署:Docker
  • 关系数据库:MySQL
  • NoSQL存储:Redis
  • 反向代理:Nginx
  • 部署项目:eladmin

①远程服务器

  1. 使用 FinalShell 连接Liunx:新建–> SSH连接
  2. 填写服务器信息


eladmin容器部署超详细过程_服务器

②配置yum

CentOS环境

CentOS 7- 配置阿里镜像源

Ubuntu环境
  1. 输入以下命令备份一下你的Ubuntu默认的源地址。
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
  1. 如何寻找镜像源:清华大学开源软件镜像站,找到Ubuntu,点击它旁边的问号
  2. 修改Ubuntu的版本,选择你自己的版本。
  3. 这里在提供一些源的地址
    阿里源:
#添加阿里源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

中科大源:

#中科大源
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

163源:

#163源
deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe mul
  1. 安装vim
sudo apt install vim
  1. 打开你的默认的源的文件
sudo vim /etc/apt/sources.list
  1. 把这个内容全删了
# 删除命令在命令模式下,输入
:.,$d

eladmin容器部署超详细过程_负载均衡_02

  1. 在清华找到的源地址复制粘贴到这里(或者是上面发的其他源地址拿过来)。复制完:ESC–>:wq 保存关闭。
# 清华镜像
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse

# 阿里云镜像
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
  1. 更新一下
sudo apt-get update
sudo apt update
# 更新好久
sudo apt upgrade
  1. 输入命令安装yum即可。
sudo apt-get install yum

③安装Docker

教程:

  1. 安装Docker命令
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun && systemctl start docker && systemctl enable docker
  1. 由于我的ubuntu是最小安装,所以需要安装curl,安装完成之后在执行一次步骤一。
sudo apt install curl

eladmin容器部署超详细过程_负载均衡_03

  1. 查看docker版本
root@Chihiro:/etc/docker# docker version
Client: Docker Engine - Community
 Version:           20.10.17
 API version:       1.41
 Go version:        go1.17.11
 Git commit:        100c701
 Built:             Mon Jun  6 23:02:57 2022
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.17
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.17.11
  Git commit:       a89b842
  Built:            Mon Jun  6 23:01:03 2022
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.6
  GitCommit:        10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1
 runc:
  Version:          1.1.2
  GitCommit:        v1.1.2-0-ga916309
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
  1. 如果你机器是国内的机器,那么需要配置镜像加速,一般使用阿里云镜像加速 阿里云加速官网,选择自己的系统。

④安装MySQL

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

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

⑤安装Redis

docker run -itd --name redis --restart=always -p 6379:6379 redis
文档:
# 仅供参考,不做配置
docker run --name myredis -p 6379:6379 -d redis redis-server --appendonly yes
docker run表示运行的意思
#--name myredis 表示起个名字叫myredis
# -p 6379:6379表示把服务器的6379映射到docker的6379端口,这样就可以通过服务器的端口访问docker的端口
# -d 表示以后台服务形式运行redis
# redis redis-server --appendonly yes表示开启持久化缓存模式,可以存到硬盘

#进入redis容器
docker exec -it redis的id /bin/bash
redis-cli
#设置密码
config set requirepass ***
#验证密码

⑥安装Nginx

提示

  • /home/nginx/conf.d 用于存放配置文件
  • /home/nginx/cert 用于存放 https 证书
  • /home/nginx/html 用于存放网页文件
  • /home/nginx/logs 用于存放日志
  1. 首先在 /home/nginx 目录创建 nginx.conf 文件,不然安装 Nginx 会报错。
# 先新建文件夹,在新建文件
sudo mkdir /home/nginx/
cd /home/nginx/
sudo touch nginx.conf
  1. 使用编辑器编辑:vim /home/nginx/nginx.conf,按 i 进入插入。复制完按esc,输入 :wq保存退出。
user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
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;

    include /etc/nginx/conf.d/*.conf;
}
  1. 然后安装 Nginx
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

2️⃣镜像容器篇

①构建镜像

有两种方法构建镜像

方法一:每次更新jar包都需要重新制作镜像,从新制作容器。

缺点:springboot的发布不易

提示

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 .
方法二:不更新镜像或者容器的前提下就可以更新jar包
  1. 创建一个存放jar包的目录。
sudo mkdir /aService/lncNet/docker
  1. 上传jar包到新创建的目录。上传的项目名:eladmin-system-2.6.jar
  2. 创建脚本文件:lncNet.sh,在/aService/lncNet/docker创建
# 编辑器打开,i 进入插入,esc 退出插入模式,:wq 保存
vim lncNet.sh
# 路径是映射到容器里面的,不是宿主机的路径
java -jar /usr/data/eladmin-system-2.6.jar

路径:上传jar包的路径/home/aServices/lncNet/eladmin-system-2.6.jar

eladmin容器部署超详细过程_java_04

添加sh文件执行去权限

chmod +x lncNet.sh
  1. 创建Dockerfile
    /aService/lncNet/docker/ 目录,在该目录创建 Dockerfile 文件,并编写 Dockerfile
vim /aService/lncNet/docker/Dockerfile
FROM java:8
ENV TZ=Asia/Shanghai
# 路径是映射到容器里面的,不是宿主机的路径
CMD ["sh","-c","/usr/data/lncNet.sh"]
  1. 构建镜像:存储库名称必须为小写
docker build -t lncnet .

②启动Java容器

方法一跟官方文档一样,就不写了。

方法二启动:

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

Star(作者):

  • -d `参数时,容器启动后会进入后台。
  • -i 参数时,由于没有分配伪终端,界面没有我们熟悉的 Linux 命令提示符,但命令执行结果仍然可以返回。
  • -i -t 参数一起使用时,则可以看到我们熟悉的 Linux 命令提示符。
  • --name lncnet 镜像名称
  • -p 8111:8111端口号
  • 新建一个目录保存数据:mkdir /home/aServices/lncNet/data/
  • /aService/lncNet/data宿主机目录
  • /home/lncnet/ 容器目录
  • 172.17.0.1docker 0 的ip,liunx查看ip ifconfig
  • 最后 lncnet镜像名称
# spring.profiles.active=prod 指定生产环境
docker run -dit \
--name lncnet --restart always \
-p 8111:8111 \
-e "TZ=Asia/Shanghai" \
-e spring.profiles.active=prod \
-e DB_HOST=172.17.0.1 \
-e DB_PORT=3306 \
-e DB_USER=root \
-e DB_PWD=123456 \
-e REDIS_HOST=172.17.0.1 \
-e REDIS_PORT=6379 \
-v /aService/lncNet/docker/:/usr/data/ \
-v /aService/lncNet/data/:/home/lncnet/ \
lncnet

③更新jar包

/aService/lncNet/docker替换改目录jar包,重启容器

# 停止容器
docker stop 容器名称
# 开启容器
docker start 容器名称
# 重启容器
docker restart 容器名称

④配置Nginx

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

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

sudo vim /home/nginx/conf.d/lncnet.conf
server
    {
        listen 80;
        server_name 192.168.3.198;	#域名/外网IP
        index index.html;
        root  /usr/share/nginx/html/lncNet/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:8111; # 后端端口地址,需要自行修改
          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:8111;
          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_redirect off;
          proxy_pass http://172.17.0.1:8111/webSocket;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "upgrade";
          proxy_set_header Host $http_host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_connect_timeout 60s;
          proxy_read_timeout 86400s;
          proxy_send_timeout 60s;
        }

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

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

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

3️⃣打包上传前端代码

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

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

eladmin容器部署超详细过程_负载均衡_05

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

eladmin容器部署超详细过程_spring boot_06

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

4、重启 Nginx 容器 docker restart nginx

4️⃣常用命令

①Docker

停止容器
docker stop 容器名
删除容器
docker rm 容器ID	# 删除指定的容器,不能删除正在运行的容器,如果要强制删除rm -f
docker rm -f $(docker ps -aq)	# 删除所有的容器
docker ps -a -q|xargs  docker rm	# 删除所有的容器
docker rmi删除镜像
docker rmi -f 镜像ID	#根据ID删除指定镜像
docker rmi -f 镜像ID 镜像ID 镜像ID	#删除多个镜像
docker rmi -f $(docker images -aq)	#删除所有镜像
查看所有容器
docker ps -a	# 查看所有容器
进入容器

exec 命令

-i -t 参数

docker exec 后边可以跟多个参数,这里主要说明 -i -t 参数。

只用 -i 参数时,由于没有分配伪终端,界面没有我们熟悉的 Linux 命令提示符,但命令执行结果仍然可以返回。

-i -t 参数一起使用时,则可以看到我们熟悉的 Linux 命令提示符。

$ docker run -dit ubuntu
69d137adef7a8a689cbcb059e94da5489d3cddd240ff675c640c8d96e84fe1f6

$ docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
69d137adef7a        ubuntu:latest       "/bin/bash"         18 seconds ago      Up 17 seconds                           zealous_swirles

$ docker exec -i 69d1 bash
ls
bin
boot
dev
...

$ docker exec -it 69d1 bash
root@69d137adef7a:/#

②Liunx命令

chown更改文件或目录的所有者

chown更改文件或目录的所有者,注意:所有者,必须存在于(/etc/passwd)下。

chown -R 用户名 文件名
关机命令

现在立即关机

sudo shutdown -h now