干巴爹兔的博客 干巴爹兔的博客
首页
  • 前端文章

    • JavaScript
    • HTML
    • Vue
  • 学习笔记

    • JavaScript教程
    • React学习笔记
    • Electron学习笔记
  • 开源项目

    • cloud-app-admin
    • 下班了吗Vscode插件
    • Subversion变更单插件
  • Server

    • Django
  • 学习笔记

    • MySQL学习笔记
  • 运维

    • 服务器部署
    • Linux
  • 日常学习

    • 学习方法
关于
收藏
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

干巴爹兔

卑微的前端打工人
首页
  • 前端文章

    • JavaScript
    • HTML
    • Vue
  • 学习笔记

    • JavaScript教程
    • React学习笔记
    • Electron学习笔记
  • 开源项目

    • cloud-app-admin
    • 下班了吗Vscode插件
    • Subversion变更单插件
  • Server

    • Django
  • 学习笔记

    • MySQL学习笔记
  • 运维

    • 服务器部署
    • Linux
  • 日常学习

    • 学习方法
关于
收藏
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 服务器部署

    • Ubuntu搭建ftp服务
    • Ubuntu18.04部署django3.x
    • 部署网站到GitHub或者码云
    • 部署node服务到阿里云
    • Jenkins构建若依前后端分离容器镜像
    • 阿里云Ubuntu20.04部署Docker环境若依框架(Vue前后端分离版)
      • 解决django3.X登录不进admin的问题
    • Linux

    • 学习方法

    • 技术
    • 服务器部署
    干巴爹兔
    2021-02-24
    目录

    阿里云Ubuntu20.04部署Docker环境若依框架(Vue前后端分离版)

    # 开头

    因为要做毕设了就想先把前后端部署起来,在网上找了许多资料花了一晚上部署完成,将自己收集的资料整合一下方便大家观看。参考资料来源,前端部分根据我自己需要与参考链接有所不同:

    Docker技术笔记:Ubuntu安装Docker CE (opens new window)

    若依前后端分离项目 Docker 部署 (opens new window)

    # 一:安装Docker

    # 步骤一:安装必要的系统工具

    sudo apt-get update
    sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
    
    1
    2

    # 步骤二:安装GPG证书

    curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
    
    1

    # 步骤三:写入软件源信息

    sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
    
    1

    # 步骤四:更新并安装Docker-CE

    sudo apt-get -y update
    sudo apt-get -y install docker-ce
    
    1
    2

    附:安装指定版本的Docker-CE (一般用最新版的就行)

    # Step 1: 查找Docker-CE的版本:
    $ apt-cache madison docker-ce
      docker-ce | 17.03.1~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
      docker-ce | 17.03.0~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
    
    # Step 2: 安装指定版本的Docker-CE: (VERSION 如上 17.03.1~ce-0~ubuntu-xenial)
    $ sudo apt-get -y install docker-ce=[VERSION]
    
    1
    2
    3
    4
    5
    6
    7

    # 步骤五:配置阿里云镜像加速

    修改daemon配置文件/etc/docker/daemon.json来使用加速器

    # 如果没有daemon.json就自己用vim建一个
    $ sudo mkdir -p /etc/docker
    $ sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://irnlfwui.mirror.aliyuncs.com"]
    }
    EOF
    
    $ sudo systemctl daemon-reload
    $ sudo systemctl restart docker
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    # 步骤六:测试Docker版本(验证安装是否成功)

    命令:docker –version && docker version && docker info

    $ sudo docker --version
    Docker version 17.12.1-ce, build 7390fc6
    
    $ sudo docker version
    Client:
     Version:   17.12.1-ce
     API version:   1.35
     Go version:    go1.9.4
     Git commit:    7390fc6
     Built: Tue Feb 27 22:17:40 2018
     OS/Arch:   linux/amd64
    Server:
     Engine:
      Version:  17.12.1-ce
      API version:  1.35 (minimum version 1.12)
      Go version:   go1.9.4
      Git commit:   7390fc6
      Built:    Tue Feb 27 22:16:13 2018
      OS/Arch:  linux/amd64
      Experimental: false
    
    $ sudo docker info
    Containers: 3
     Running: 0
     Paused: 0
     Stopped: 3
    Images: 6
    ...
    
    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

    # 步骤七:测试Docker安装

    可以通过运行简单的Docker Image来进行安装测试:

    $ sudo docker run hello-world
    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    ca4f61b1923c: Pull complete 
    Digest: sha256:083de497cff944f969d8499ab94f07134c50bcf5e6b9559b27182d3fa80ce3f7
    Status: Downloaded newer image for hello-world:latest
    
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    ...
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    列出所有的镜像image和容器container:

    $ sudo docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    hello-world         latest              f2a91732366c        3 months ago        1.85kB
    
    $ sudo docker container ls -all
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
    c621f40a070c        hello-world         "/hello"            15 minutes ago      Exited (0) 15 minutes ago                       friendly_edison
    
    1
    2
    3
    4
    5
    6
    7

    # 二:安装MySQL镜像

    # 步骤一: 下载docker镜像并运行

    MySQL我用的是8.0.x的版本,在部署过程中出现了一些问题,在这里跟大家分享一下

    docker run \
    -p 3306:3306 \
    --name mysql \
    --privileged=true \
    --restart unless-stopped \
    -v /home/mysql8.0.20/mysql:/etc/mysql \
    -v /home/mysql8.0.20/logs:/logs \
    -v /home/mysql8.0.20/data:/var/lib/mysql \
    -v /home/mysql8.0.20/mysql-files:/var/lib/mysql-files \
    -v /etc/localtime:/etc/localtime \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -d mysql:8.0.20 \
    --lower_case_table_names=1
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    命令解释:

    -p 端口映射
    --privileged=true  挂载文件权限设置
    --restart unless-stopped  设置 开机后自动重启容器
    -v /home/mysql8.0.20/mysql:/etc/mysql    挂载配置文件
    -v /home/mysql8.0.20/logs:/logs \      挂载日志
    -v /home/mysql8.0.20/data:/var/lib/mysql \  挂载数据文件 持久化到主机
    -v /home/mysql8.0.20/mysql-files:/var/lib/mysql-files	MySQL8之后需要同步这个文件夹
    -v /etc/localtime:/etc/localtime    容器时间与宿主机同步
    -e MYSQL_ROOT_PASSWORD=123456    设置密码
    -d  mysql:8.0.20   后台启动,mysql
    --lower_case_table_names=1	  让MySQL不区分大小写(0:大小写敏感;1:大小写不敏感)
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    在没有配置 --lower_case_table_names=1 前出现 Table XX.QRTZ_LOCKS doesn‘t exist 的问题

    百度一番后发现 MySQL 5.x 和 8.x 的这个配置还有些不同

    具体错误忘记截图了,可以参考 https://blog.csdn.net/zhengliangs/article/details/105998941

    解决问题

    做好备份,删除原来的 MySQL 容器,重新运行 MySQL,在命令结尾加入 --lower_case_table_names=1,

    因为 MySQL 8 之后,这一步需要在初始化的时候设置,记得开放阿里云安全组端口

    # 三:安装Redis镜像

    # 步骤一: 下载docker镜像并运行

    docker run -p 6379:6379 --name redis -v /home/redis/data/:/data -d redis:3.2 redis-server --appendonly yes
    
    1

    命令解释

    -v /home/redis/data/:/data		挂载数据目录
    --appendonly yes	开启redis 持久化
    
    1
    2

    连接:(Windows)

    redis-cli.exe -h 你的服务器IP -p 6379
    ping
    
    1
    2

    # 四:打包项目

    # 步骤一:前端

    • 修改vue.config.js 中 devServer节点映射端口,与后端端口一致

    运行以下命令:

    npm run build:prod
    
    1

    会在本地生成 dist 目录

    # 步骤二:后端

    • 修改 application.yml 端口、文件上传路径
    • 修改logback.xml 日志生成路径log.path
    • 修改 MySQL、Redis地址

    运行若依后端bin目录中的clean.bat和package.bat,你需要提前安装maven工具并在环境变量中添加maven的bin目录地址,或者运行以下命令:

    mvn clean
    mvn package
    
    1
    2

    在 ruoyi-admin的 target下生成了一个 jar 包,那就是我们需要的

    # 五:部署

    # 步骤一:前端部署

    编写Dockerfile文件和nginx需要的配置文件default.conf,在Linux上新建一个文件夹,把前端打包好的dist文件和Dockerfile与default.conf放在一起,大概是这样

    root@iZbp1dnrmefohxoq2vrh7aZ:/# cd /home/fronted/
    root@iZbp1dnrmefohxoq2vrh7aZ:/home/fronted# ls -a
    .  ..  default.conf  dist  Dockerfile #这三个文件
    root@iZbp1dnrmefohxoq2vrh7aZ:/home/fronted# 
    
    1
    2
    3
    4

    Dockerfile:

    FROM nginx
    USER root
    ADD default.conf /etc/nginx/conf.d
    ADD dist /usr/share/nginx/html/
    RUN chmod 775 -R /usr/share/nginx/html
    expose 80
    
    1
    2
    3
    4
    5
    6

    大致意思就是使用官方nginx的镜像,将default.conf和前端dist文件里面的内容拷贝到容器内的对应目录中,暴露80端口

    default.conf:

    server {
            listen       80;
            server_name  localhost;		# 可以用服务器ip代替
    
            location / {
                root   /usr/share/nginx/html/;
                index  index.html index.htm index login;
                try_files $uri $uri/ /index.html last;
            }
            location /prod-api/ {
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header REMOTE-HOST $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_pass http://IP:PORT/;		# 可以用服务器ip代替
            }
         }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17

    在我部署完成后发现不是在根目录下 刷新 就会出现 404 Not Found,找到以下解决方案:

    在配置 location 的时候加上try_files $uri $uri/ /index.html last;

    # 步骤二:后端部署

    我使用的是 Dockerfile + jar 打包成镜像的部署方式

    Dockerfile

    FROM java:8
    
    VOLUME /jiang
    
    ADD ruoyi-admin.jar app.jar
    
    EXPOSE 8080
    
    ENTRYPOINT ["java","-jar","app.jar"]
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

    在服务器里创建一个文件夹,放入 Dockerfile 和 jar包,运行如下命令生成镜像

    docker build -t ruoyi-vue .
    
    1

    注意:最后还有一个 .

    此时,我们只需运行生成的镜像即可

    docker run -d -p 8080:8080 --name ruoyi-vue ruoyi-vue 
    
    1

    如果出现容器打开不久自动关闭的,可以使用docker run -it -p 8080:8080 --name ruoyi-vue ruoyi-vue查看运行状况,大部分是配置文件地址问题,不能使用localhost,要改成你的服务器IP

    至此,我们就完成了前后端分离 使用Docker部署若依项目,后续还可以进一步使用Jenkins来进行CI/CD操作

    编辑 (opens new window)
    #Linux
    上次更新: 2022/08/26, 15:52:02
    Jenkins构建若依前后端分离容器镜像
    解决django3.X登录不进admin的问题

    ← Jenkins构建若依前后端分离容器镜像 解决django3.X登录不进admin的问题→

    最近更新
    01
    使用Vscode开发一个小插件
    10-21
    02
    Vscode插件配置项监听
    10-18
    03
    使用has属性构造必填效果
    10-14
    更多文章>
    Theme by Vdoing | Copyright © 2020-2023 互联网ICP备案: 闽ICP备18027236号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式