『前端进阶』🐳 Docker 部署 —> GitHub Active 自动部署

『前端进阶』🐳 Docker 部署 —> GitHub Active 自动部署Docker 介绍 🐳 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 GitHub Active !

Docker 介绍 🐳

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

  • 镜像(Image) :Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container) :镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository) :仓库可看成一个代码控制中心,用来保存镜像。

Docker 命令 🐳

  • docker ps -a 查看所有容器
  • docker images 查看所有镜像
  • docker stop [name/id] 停止容器
  • docker rm [name/id] 删除容器,加 -f 是强制删除
  • docker inspect [name/id] 获取容器/镜像的元数据
  • docker logs e 日志
  • docker exec -it [name/id] /bin/sh
  • docker run -p 81:80 -d --name [name] nginx 启动容器
  • docker run -p 81:80 -d -v /Users/zxl/:/usr/share/nginx/html --name [name] nginx
    • -p 端口映射
    • -V 数据卷,文件映射
    • -d 后台运行
    • --name 定义容器名称
  • docker login -u 用户名 -p 密码 登录仓库

Docker 部署 🐳

原理:本地打包 docker 镜像,然后上传到 docker 镜像服务器,然后在服务器上登录 docker 账号拉取镜像,最后启动容器,完成部署 ✅

  1. 安装 Docker

  2. 在项目根目录创建 Dockerfile 文件

    FROM node:14
    COPY ./ /app
    WORKDIR /app
    RUN yarn install && yarn build
    
    FROM nginx
    RUN mkdir /app
    COPY --from=0 /app/dist /app
    COPY nginx.conf /etc/nginx/nginx.conf
    
  3. 在项目根目录创建 .dockerignore 文件

    • 设置 .dockerignore 文件能防止 node_modules 和其他中间构建产物被复制到镜像中导致构建问题。
    **/node_modules
    **/dist
    
  4. 在项目根目录创建 nginx.conf 文件

    • Nginx 是一个能在 Docker 容器中运行的 HTTP(s) 服务器。它使用配置文件决定如何提供内容、要监听的端口等。参阅 Nginx 设置文档 以了解所有可能的设置选项。
    • 下面是一个简单的 Nginx 设置文件,它会在 80 端口上提供你的 Vue 项目。页面未找到 / 404 错误使用的是 index.html,这让我们可以使用基于 pushState() 的路由。
    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;
      keepalive_timeout  65;
      server {
        listen       80;
        server_name  localhost;
        location / {
          root   /app;
          index  index.html;
          try_files $uri $uri/ /index.html;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
          root   /usr/share/nginx/html;
        }
      }
    }
    
  5. 打包镜像并上传

    • [name] 就是镜像名称
    • [images-name]就是在 Docker Hub 创建的镜像名称
    #deploy.sh
    
    docker build --platform linux/amd64 -t [name]:latest .
    docker tag [name]:latest [images-name]
    docker push [images-name]
    
  6. 服务器操作

    • 执行脚本./deploy.sh
    • 主要操作就是拉取镜像,暂停容器,删除容器,重新运行镜像
    • 最后清除一下没有使用的容器和镜像
    • 后期优化也可以用 docker-compose 来做更新操作
    #deploy.sh
    
    docker pull [images-name]
    docker stop [name]
    docker rm [name]
    docker run --name [name] -d -p 8081:80 [images-name]
    docker image prune -f
    docker container prune -f
    

GitHub Active 自动部署 🐢

原理: 通过监听代码变化,触发定制任务,进行自动打包代码,镜像上传和登录服务器进行脚本执行,完成部署 ✅

  • 在项目根目录创建 yml 文件,用于配置自动化流程任务
  • mkdir .github
  • mkdir .github/workflows
  • vim .github/workflows/deploy.yml image.png

yml 文件介绍 🐢

name: CI/CD
# 触发条件为 push
on:
  push:
    branches:
      - main
    # 修改文件范围, 不在范围内不触发
    paths:
      - '.github/workflows/**'
      - '__test__/**'
      - 'src/**'
# 任务
jobs:
  test:
    # 运行的环境
    runs-on: ubuntu-latest
    # 步骤
    steps:
      - uses: actions/checkout@v2 # git pull
      - name: Use Node.js
        uses: actions/setup-node@v1
        with:
          node-version: 14
      - name: 打包镜像, 上传 Docker Hub
        run: | docker login -u ${{ secrets.REGISTRY_USERNAME }} -p ${{ secrets.REGISTRY_PASSWORD }} docker build --platform linux/amd64 -t [name]:latest . docker tag [name]:latest ${{ secrets.DOCKER_REPOSITORY }} docker push ${{ secrets.DOCKER_REPOSITORY }} 
      - name: 登录服务器, 执行脚本
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.REMOTE_HOST }}
          username: root
          password: ${{ secrets.REMOTE_PASSWORD }}
          # 执行脚本
          script: | ./deploy.sh 
  • ${{ secrets.REMOTE_PASSWORD }} 变量主要存储一些敏感信息,配置位置如下图 image.png

任务执行

  • 成功截图 image.png

  • 失败 n 次截图 image.png

结语

本次部署记录 📝 到此结束,其实整体没有难点,看着文档一点一点尝试,都可以完整的走完这个流程,技术日新月异,偶尔做一些工作职责之外的事,挺有意思 🏂

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13173.html

(0)

相关推荐

  • Spring事务和MySQL事务详解面试「终于解决」

    Spring事务和MySQL事务详解面试「终于解决」文章目录数据库事务事务是什么事务的四大特性MySQL事务隔离级别查看MySQL当前事务隔离级别MySQL默认操作模式为自动提交模式JDBC处理事务Spring事务Spring的事务传播PROPAGATION_REQUIREDPROPAGATION_SUPPORTSPROPAGATION_MANDATORYPROPAGATION_REQUIRES_NEWPROPAGATION_NOT_SUPPORTEDPROPAGATION_NEVERPROPAGATION_NESTEDSpring事务的隔离级别Spring

    2023-04-02
    108
  • Python Default Set:优雅、高效的数据结构实现

    Python Default Set:优雅、高效的数据结构实现Python的Set是一个非常有用且常用的数据结构,它是Python中的一种无序可变容器类型,用于存储不重复的元素。在使用Set时,我们无需关心元素的顺序,而只需要知道元素是否存在。Python的Set的底层数据结构采用的是哈希表实现,可以快速的进行元素的查询、插入和删除等操作。

    2024-01-16
    58
  • Postwomen API测试工具

    Postwomen API测试工具在Web开发中,API测试是非常重要的环节。要保证所开发的API能够正确地接收和响应请求,就需要对它们进行测试。Postwomen API测试工具就是在这样的背景下被开发出来的。它是一款免费的开源工具,可以用来快速、高效地测试RESTful API。

    2024-05-02
    20
  • 关于测试开发之python的信息

    关于测试开发之python的信息软件测试人员能用python做的事情很多,最常见的就是下面四项:1)做自动化测试【web自动化,app自动化,接口自动化】;2)做性能测试;3)开发小工具;4)搭建测试平台。

    2023-10-31
    72
  • mysql5.7启动命令_MySQL代码

    mysql5.7启动命令_MySQL代码1、连接mysql 连接本机 mysql -u root -p 连接远程主机 mysql -h 192.168.1.% -u root -p 退出 exit; 2、修改密码 格式:alter user

    2023-02-01
    107
  • nosql介绍_iaas paas saas举例

    nosql介绍_iaas paas saas举例王奇 顾问软件工程师 目前从事 PaaS 中间件服务(Redis / MongoDB / ELK 等)开发工作,对 NoSQL 数据库有深入的研究以及丰富的二次开发经验,热衷对 NoSQL 数据库领域

    2023-05-03
    126
  • Android中的System.currentTimeMillis()数据保存在Sqlite中后的查询问题

    Android中的System.currentTimeMillis()数据保存在Sqlite中后的查询问题一定要看到最后 在android中System.currentTimeMillis()获取的数据保存在sqlite后按日期查询时如果按以下写法 select id,recordtext,addTime

    2023-03-12
    100
  • CentOS8安装redis[通俗易懂]

    CentOS8安装redis[通俗易懂]一、工具说明 操作系统:CentOS8 Redis: 3.2.8 二、安装redis 下载redis [root@localhost ~]$ wget http://download.redis.i…

    2023-02-16
    105

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注