• eladmin容器部署超详细过程


    eladmin容器部署超详细过程

    📔 笔记介绍

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

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

    1️⃣Liunx环境准备

    下文使用到的内容:

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

    ①远程服务器

    1. 使用 FinalShell 连接Liunx:新建–> SSH连接

      image-20220803135603432

    2. 填写服务器信息

    image-20220803135719350

    ②配置yum

    CentOS环境

    CentOS 7- 配置阿里镜像源

    Ubuntu环境

    1. 输入以下命令备份一下你的Ubuntu默认的源地址。

      sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
      
      • 1
    2. 如何寻找镜像源:清华大学开源软件镜像站,找到Ubuntu,点击它旁边的问号

      image-20220803143716631

    3. 修改Ubuntu的版本,选择你自己的版本。

      image-20220803143814780

    4. 这里在提供一些源的地址

      阿里源:

      #添加阿里源
      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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

      中科大源:

      #中科大源
      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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

      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
      • 2
      • 3
      • 4
      • 5
      • 6
    5. 安装vim

      sudo apt install vim
      
      • 1
    6. 打开你的默认的源的文件

      sudo vim /etc/apt/sources.list
      
      • 1
    7. 把这个内容全删了

      # 删除命令在命令模式下,输入
      :.,$d
      
      • 1
      • 2

      image-20220803145449525

    8. 在清华找到的源地址复制粘贴到这里(或者是上面发的其他源地址拿过来)。复制完: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
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
    9. 更新一下

      sudo apt-get update
      sudo apt update
      # 更新好久
      sudo apt upgrade
      
      • 1
      • 2
      • 3
      • 4
    10. 输入命令安装yum即可。

      sudo apt-get install yum
      
      • 1

    ③安装Docker

    教程:https://segmentfault.com/a/1190000041265342

    1. 安装Docker命令

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

      sudo apt install curl
      
      • 1

      image-20220803165520751

    3. 查看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
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
    4. 如果你机器是国内的机器,那么需要配置镜像加速,一般使用阿里云镜像加速 阿里云加速官网,选择自己的系统。

      image-20220803170055062

    ④安装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
    
    • 1
    • 2
    • 3

    ⑤安装Redis

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

    文档:

    # 仅供参考,不做配置
    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 ***
    #验证密码
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    ⑥安装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
      • 2
      • 3
      • 4
    2. 使用编辑器编辑: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
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
    3. 然后安装 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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10

    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"]
    
    • 1
    • 2
    • 3
    • 4
    • 5

    构建镜像

    docker build -t eladmin .
    
    • 1

    方法二:不更新镜像或者容器的前提下就可以更新jar包

    1. 创建一个存放jar包的目录。

      sudo mkdir /aService/lncNet/docker
      
      • 1
    2. 上传jar包到新创建的目录。上传的项目名:eladmin-system-2.6.jar

      image-20220803175315659

    3. 创建脚本文件:lncNet.sh,在/aService/lncNet/docker创建

      # 编辑器打开,i 进入插入,esc 退出插入模式,:wq 保存
      vim lncNet.sh
      
      • 1
      • 2
      # 路径是映射到容器里面的,不是宿主机的路径
      java -jar /usr/data/eladmin-system-2.6.jar
      
      • 1
      • 2

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

      image-20220803180117778

      添加sh文件执行去权限

      chmod +x lncNet.sh
      
      • 1
    4. 创建Dockerfile

      /aService/lncNet/docker/ 目录,在该目录创建 Dockerfile 文件,并编写 Dockerfile

      vim /aService/lncNet/docker/Dockerfile
      
      • 1
      FROM java:8
      ENV TZ=Asia/Shanghai
      # 路径是映射到容器里面的,不是宿主机的路径
      CMD ["sh","-c","/usr/data/lncNet.sh"]
      
      • 1
      • 2
      • 3
      • 4
    5. 构建镜像:存储库名称必须为小写

      docker build -t lncnet .
      
      • 1

    ②启动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
      • image-20220803183735807
    • 最后 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    ③更新jar包

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

    # 停止容器
    docker stop 容器名称
    # 开启容器
    docker start 容器名称
    # 重启容器
    docker restart 容器名称
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    ④配置Nginx

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

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

    sudo vim /home/nginx/conf.d/lncnet.conf
    
    • 1
    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;
            }
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63

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

    3️⃣打包上传前端代码

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

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

    imageb0806c848d01318e.jpg

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

    imagedcd151a815c62932.jpg

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

    4、重启 Nginx 容器 docker restart nginx

    4️⃣常用命令

    ①Docker

    停止容器

    docker stop 容器名
    
    • 1

    删除容器

    docker rm 容器ID	# 删除指定的容器,不能删除正在运行的容器,如果要强制删除rm -f
    docker rm -f $(docker ps -aq)	# 删除所有的容器
    docker ps -a -q|xargs  docker rm	# 删除所有的容器
    
    • 1
    • 2
    • 3

    docker rmi删除镜像

    docker rmi -f 镜像ID	#根据ID删除指定镜像
    docker rmi -f 镜像ID 镜像ID 镜像ID	#删除多个镜像
    docker rmi -f $(docker images -aq)	#删除所有镜像
    
    • 1
    • 2
    • 3

    查看所有容器

    docker ps -a	# 查看所有容器
    
    • 1

    进入容器

    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:/#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    ②Liunx命令

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

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

    chown -R 用户名 文件名
    
    • 1

    关机命令

    现在立即关机

    sudo shutdown -h now

  • 相关阅读:
    智能防眩目前照灯系统控制器ADB
    网络原理-IP/数据链路层协议
    JavaScript 生成随机颜色
    基于springboot+mybatisplus+shiro的仓库管理系统源码
    二本菜鸡,颓废两年的自我救赎
    P1160 队列安排题解【STL双向链表】
    力扣100题-07-三数之和
    从C#到Python手把手教你用Python实现内存扫描获取指定字符串
    Spring学习笔记12 面向切面编程AOP
    (附源码)计算机毕业设计SSM基于的影评系统
  • 原文地址:https://blog.csdn.net/IUTStar/article/details/126187458