eladmin容器部署超详细过程

eladmin容器部署超详细过程

笔记介绍

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

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

1️⃣Liunx环境准备

下文使用到的内容:

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

①远程服务器

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

    eladmin容器部署超详细过程_第1张图片

  2. 填写服务器信息

eladmin容器部署超详细过程_第2张图片

②配置yum

CentOS环境

CentOS 7- 配置阿里镜像源

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

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

    eladmin容器部署超详细过程_第3张图片

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

    eladmin容器部署超详细过程_第4张图片

  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
    

    中科大源:

    #中科大源
    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
    
  5. 安装vim

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

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

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

    eladmin容器部署超详细过程_第5张图片

  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
    
    
  9. 更新一下

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

    sudo apt-get install yum
    

③安装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
    
  2. 由于我的ubuntu是最小安装,所以需要安装curl,安装完成之后在执行一次步骤一。

    sudo apt install curl
    

    eladmin容器部署超详细过程_第6张图片

  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
    
    
  4. 如果你机器是国内的机器,那么需要配置镜像加速,一般使用阿里云镜像加速 阿里云加速官网,选择自己的系统。

    eladmin容器部署超详细过程_第7张图片

④安装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
    
  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;
    }
    
  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
    

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
    
  2. 上传jar包到新创建的目录。上传的项目名:eladmin-system-2.6.jar

    eladmin容器部署超详细过程_第8张图片

  3. 创建脚本文件: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容器部署超详细过程_第9张图片

    添加sh文件执行去权限

    chmod +x lncNet.sh
    
  4. 创建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"]
    
  5. 构建镜像:存储库名称必须为小写

    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
    • eladmin容器部署超详细过程_第10张图片
  • 最后 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容器部署超详细过程_第11张图片

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

eladmin容器部署超详细过程_第12张图片

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

你可能感兴趣的:(Java,Docker,服务器,ubuntu,负载均衡,java,spring,boot)