Docker+github actions部署前端项目

2023-05-16

Docker+github actions部署前端项目

文章目录

  • Docker+github actions部署前端项目
    • 前言
    • 1.Docker相关文件配置
    • 2.创建自己的dokcer hub仓库
    • 3.yml文件配置

前言

在进行本篇实践前,建议先了解一下:使用linux+Nginx部署,使用docker部署,使用github actions部署.

  • 【vue项目部署】Linux+Nginx实现项目部署及跨域
  • 【github actions】部署前端项目
  • 【Docker】docker+Nginx部署前端项目



实现自动化部署的整体流程应该是:

  • 在 vue 项目中增加 Dockerfile 文件 和 nginx.conf 配置文件
  • 部署时,首先将 dist + Dockerfile + nginx.conf 打成镜像 (docker build 相关明令)
  • 将打包出来的镜像上传至存储应用的服务器或DockerHub(私服仓库)
  • 最后在部署服务器上从存储镜像的那台服务器上拉取镜像,执行 docker run 相关命令进行发布

因为这些步骤在前面的文章中都有相关的更详细的解释,所以这里并不会进行很详细的解释,更多的是将这些分散的步骤进行串联起来。


1.Docker相关文件配置

在根目录下创建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 default.conf /etc/nginx/nginx.conf

在项目根目录创建 .dockerignore 文件

  • 设置 .dockerignore 文件能防止 node_modules 和其他中间构建产物被复制到镜像中导致构建问题。
**/node_modules
**/dist

在项目根目录创建 nginx.conf 文件,名字是什么无所谓,但是要注意与上面的Dokcerfile文件中的名字相对应。

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;
    }
  }
}

我们这里还是使用的容器的80端口。


2.创建自己的dokcer hub仓库

和创建github仓库类似,按照步骤走即可。

并且我们可以体验一下,先使用手动执行命令来pull和push镜像。

一个demo:

  • 首先执行:dokcer build -t [要设置的镜像名] [文件的具体目录],这样就打包好了一个镜像

    比如我的:docker build -t actions:latest .

  • docker run -d -p 5555:80 --name actions mengqiuleo/actions-image:latest ,我们使用该命令将容器运行起来

    actions是我运行的容器名,actions mengqiuleo/actions-image:latest是我的镜像名

  • 然后将该镜像上传到docker hub,使用命令:docker push mengqiuleo/actions-image:latest

    如果不知道要设置的镜像名是什么,可以登录到docker hub 中进行查看,

    在这里插入图片描述

    在这里插入图片描述


其他命令

移除容器与镜像:

docekr rmi 镜像id

docker rm 容器id

docker stop 容器id

docker tag : 标记本地镜像,将其归入某一仓库。

语法

docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]

实例

将镜像ubuntu:15.10标记为 runoob/ubuntu:v3 镜像。

root@runoob:~# docker tag ubuntu:15.10 runoob/ubuntu:v3
root@runoob:~# docker images   runoob/ubuntu:v3
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
runoob/ubuntu       v3                  4e3b13c8a266        3 months ago        136.3 MB

3.yml文件配置

name: CI/CD
# 触发条件为 push
on: [push] # 执行时机
# 任务
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.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
          docker build -t actions:latest  .
          docker tag actions:latest ${{ secrets.DOCKER_REPOSITORY }}
          docker push ${{ secrets.DOCKER_REPOSITORY }}:latest

      - name: 登录服务器, 执行脚本
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SSH_HOST }}   
          username: ${{ secrets.SSH_USERNAME }}
          password: ${{ secrets.SSH_PASSWORD }}
          script: |
            docker stop actions
            docker rm actions
            docker rmi mengqiuleo/actions-image:latest
            docker pull mengqiuleo/actions-image:latest
            docker run -d -p 5555:80 --name actions mengqiuleo/actions-image:latest  

在这里解释一下,上面的一些操作步骤:

首先是:

          docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
          docker build -t actions:latest  .
          docker tag actions:latest ${{ secrets.DOCKER_REPOSITORY }}
          docker push ${{ secrets.DOCKER_REPOSITORY }}:latest
  • 先登录自己的dokcer hub,DOCKER_USERNAMEDOCKER_PASSWORD是私有变量,内容对应的是我们的docker hub账号和密码

  • 然后构建一个镜像,我的镜像名为 actions:latest,要进行构建的文件目录在.目录下

  • 然后给actions:latest打tag,标记名为DOCKER_REPOSITORY

    注意,这里的DOCKER_REPOSITORY是有要求的,内容为自己的区域名再加上仓库名(镜像名)。比如你有一个区域叫aaa,然后你创建了一个仓库希望存放的镜像是bbb,那你的DOCKER_REPOSITORY应该为aaa/bbb,而不是单纯的bbb

  • 因为构建的时候,我们不是很方便的查看哪里报错了,所以最好在执行github actions之前我们可以进行手动构建,保证整个流程是通的,不要出现不存在某个仓库或文件的错误

  • 标记完后就是将这个镜像推送到远程仓库

然后解释,在服务器上拉取镜像并构建容器运行的相关脚本:

            docker stop actions
            docker rm actions
            docker rmi mengqiuleo/actions-image:latest
            docker pull mengqiuleo/actions-image:latest
            docker run -d -p 5555:80 --name actions mengqiuleo/actions-image:latest  

因为我们构建的容器名叫actions,所以先停止容器,移出容器与镜像,再拉取镜像,并运行新的容器


一些小的疑惑?

在执行整个自动化构建的流程之前,我们需要自己手动先运行一次相关命令,为了保证云服务上存在actions的容器和相关镜像。

否则直接执行yml文件的话,在最后的脚本中,我们无法移除容器与镜像,会报错:不存在镜像与容器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker+github actions部署前端项目 的相关文章

  • Git 会删除空文件夹吗? [复制]

    这个问题在这里已经有答案了 我已提交一个项目并将其推送到我的 GitHub 帐户 该项目包含以下部分文件结构 server conf some files java lib java 和 lib 文件夹为空 从 GitHub 下载我的项目时
  • Git Push 远程:致命:包超出允许的最大大小

    我接到了一个大项目 客户想将其添加到github 我是一点一点添加的 然后发生的事情是我太贪心了 一次添加了太多文件 现在 无论我尝试什么 我都会不断收到此错误 我怎样才能解决这个问题 我试图回滚 但也许我做错了 git push Ente
  • 使用 pygithub3 for Python 获取存储库信息

    我正在尝试通过给定 Github 用户名来访问每个存储库中使用的语言 为了做到这一点 到目前为止我的Python代码是 from pygithub3 import Github username raw input Please enter
  • 通过 VPN 容器路由 Docker 容器流量

    我在我的上安装了几个容器洛克Pro64 运行 openmediavault 的 ARMv8 处理器 rev 2 v8 版本 4 1 27 1 Arrakis 一切都运转良好 我使用的容器包括 Transmission Jellyfin Ra
  • 为什么 git 无法识别我的本地存储库?

    我刚刚回到一个我已经使用 Git 大约 6 个月的项目 看到了这个 cd d DEVELOP BlenderAe My repo root git status fatal not a git repository or any of th
  • github Diff 截断错误

    在 github 中发出拉取请求并审查更改时 我们收到了 Diff Truncated 错误 如下所示 任何人都可以帮助解决这个问题 拉取请求可能会触发以下提到的限制之一GitHub 支持 https stackoverflow com a
  • 使用 docker 在 NodeJS 上对 Postgres 进行 ECONNREFUSED

    我正在使用 postgresql 构建一个在 NodeJS 上运行的应用程序 我使用 SequelizeJS 作为 ORM 为了避免使用真正的 postgres 守护进程并在我自己的设备上使用 nodejs 我使用带有 docker com
  • 如何使用 docker 和 monorepo 组织共享库

    我拥有的 我有 2 个 python 应用程序共享一些代码 足以让我尝试将共享部分隔离到模块 包 库中 我故意使术语含糊不清 因为我不确定解决方案是什么 我的所有代码都在单一存储库中 因为我希望克服管理比我们团队成员更多的存储库的一些烦恼
  • Ctrl-p 和 Ctrl-n 在 Docker 下表现异常

    For the life of me I can t seem to figure out why ctrl p and ctrl n don t work like they re supposed to under the Docker
  • 在未安装 docker 的情况下构建 docker 镜像

    是否可以在不安装 docker 的情况下构建镜像 在我的项目的 Maven 构建中 我想生成 docker 映像 但我不想强迫其他人在他们的机器上安装 docker 我可以想到一些安装了 docker 的虚拟框映像 但这是一种繁重的解决方案
  • Docker 容器中的并行代码执行

    我有一个通过 URLslist 抓取数据的脚本 该脚本在 docker 容器中执行 我想在多个实例中运行它 例如 20 个 为此 我想使用docker compose scale worker 20并将 INDEX 传递给每个实例 以便脚本
  • 如何使用 docker exec 运行 2 个命令

    我需要使用 docker exec 运行 2 个命令 我正在从 docker 容器中复制文件 并且不想处理凭据才能使用 ssh 之类的东西 该命令复制一个文件 sudo docker exec boring hawking tar cv v
  • GitHub - 指定时间的存储库状态

    我是使用 git 版本控制工具的初学者 我想在指定时间 例如 2013 年 10 月 5 日 下载存储库状态 文件 我怎样才能做到这一点 截至 2019 年 5 月 不确定何时引入 您可以简单地按以下格式添加日期 HEAD 2019 04
  • 在 mkdir 之后触摸文件时构建 Dockerfile 失败

    我是 Docker 新手 尝试使用简单的 Dockerfile 构建映像 FROM jenkins USER root RUN mkdir pv home a b RUN touch home a b test txt RUN mkdir
  • Docker 网络 - nginx:[emerg] 在上游找不到主机

    我最近开始迁移到 Docker 1 9 和 Docker Compose 1 5 的网络功能来取代使用链接 到目前为止 通过链接 nginx 通过 docker compose 连接到位于一组中不同服务器中的 php5 fpm fastcg
  • 如何使用缓存快速重建dockerfile?

    我想优化我的 Dockerfile 我希望将缓存文件保留在磁盘中 但是 当我跑步的时候我发现docker build 它总是尝试从网络获取每个文件 我希望在构建期间共享我的缓存目录 例如 var cache yum x86 64 6 但是
  • 使用前端 Dockerfile 无法解决

    我对 Docker 还很陌生 正在尝试使用纯 HTML 构建 Docker 映像 但我收到此错误消息 无法使用前端 dockerfile v0 解决 无法读取 dockerfile 打开 var lib docker tmp buildki
  • ASP.NET Core - 在 Visual Studio 2015 中通过 Docker 调试时出现问题

    我在 Visual Studio 中使用 Docker 运行基于 ASP NET Core 构建的应用程序时遇到问题 我的应用程序仅使用dnxcore50框架 我的project json 文件是 version 1 0 0 compila
  • 在 Windows 上构建 Docker 映像:入口点脚本“没有这样的文件或目录”

    我在这上面浪费了两天时间 直到我终于解决了我的问题 所以我想我会分享 我将概述我在这里遇到的问题 然后概述答案中的解决方案 My Dockerfile看起来像这样 FROM php 7 2 fpm COPY custom docker ph
  • 无论我做什么,我都无法推送我的代码并不断收到相同的错误

    我正在尝试将代码推送到远程分支 但不断收到此错误 rejected non fast forward error failed to push some refs to email protected cdn cgi l email pro

随机推荐

  • python架构之Django学习------基础篇二

    学习环境 xff1a ubuntu16 0 4 1 创建项目 django admin startproject studypy studypy为项目名称 注意 xff1a 项目创建完成之后 xff0c 会有一个文件夹和项目名称一样 xff
  • VNC配置端口占用

    问题描述 xff1a 配置VNC环境时 执行systemctl配置端口发现有些端口被占用 systemctl status vncserver span class token operator span user 64 span clas
  • SNMP概述

    目录 SNMP的架构 SNMP的版本 SNMPv1 v2c 报文结构 操作类型 工作原理 SNMPv3 报文结构 SNMPv3体系结构 工作原理 用户组和用户名 SNMP的配置 基本配置 v2c配置 SNMPv3配置 xff08 USM用户
  • (18)ROS学习-TF坐标变换之静态坐标变换

    1 坐标msg消息 xff1a 订阅发布模型中数据载体 msg 是一个重要实现 xff0c 首先需要了解一下 xff0c 在坐标转换实现中常用的 msg geometry msgs TransformStamped和geometry msg
  • CentOS8.4 Samba服务配置

    目录 Samba服务简介 基本操作 Samba服务主配置文件 全局配置参数 局部配置参数 题一 创建共享资源 创建系统用户组和系统用户并查看 对系统用户设置Samba密码 查看已设置Samba密码的用户 建立共享资源目录并分配权限 修改主配
  • X86汇编语言从实模式到保护模式(Linux环境搭建)

    前言 在学完了计算机组成原理和王爽的汇编语言后 xff0c 虽然操作系统的理论知识能看懂了 xff0c 但做起xv6和ucore实验还是有一定难度 xff0c 所以还是得补一补x86汇编的知识 环境搭建 xff1a 因为书中的工具包和环境都
  • 【机器学习】二分类算法实现及算法精度比较

    文章目录 一 数据集选择1 感知机2 K近邻 xff08 knn xff09 3 朴素贝叶斯4 决策树id35 逻辑斯蒂回归总结 一 数据集选择 鸢尾花数据集 iris data Iris数据集是常用的分类实验数据集 xff0c 由Fish
  • OpenStack实战

    开源OpenStack实战 公有云 一个用户就是一个VPC虚拟私有云 在同一个VPC中的不同子网可以互通 不同VPC之间不能互通 一个VPC 就属于regin一个路由器 VPC不可以跨Regin 两个租户是不可以打通的 Regin xff1
  • VScode怎样从gitee上拉取项目?很简单,赶快学起来

    1 xff0c 在你写项目的磁盘里新建文件夹 2 xff0c 登录Gitee 3 xff0c 复制克隆 下载处的地址 4 xff0c 打开VScode xff0c 在新建的文件夹下 xff0c 打开终端 5 xff0c 运行 git clo
  • 《操作系统》-进程的定义组成和特征

    进程的定义组成和特征 进程的定义 程序 xff1a 就是一个指令序列 早期的计算机只支持单道程序 引用多道程序技术 xff1a 为了方便操作系统管理完成各程序并发执行 xff0c 引入了进程和进程实体的概念 进程实体 xff08 进程映像
  • 【完整教程】在win10平台下使用d435i深度相机读取数据并保存到本地,以便进行后续3D点云处理

    1 下载RealSense SDK 2 0 进入网址 xff1a RealSense SDK 2 0 直接拉到网站最下端 xff0c 在Asset下可以看到很多exe可执行软件 xff0c 由于我的电脑是win10 xff0c 所以选择第三
  • python架构之Django学习(管理站点)------基础篇三

    学习环境 xff1a ubuntu16 0 4 1 创建管理员 http 127 0 0 1 8000 admin python manage py createsuperuser 创建用户名密码 注册
  • VMware虚拟机安装Linux教程(超详细)

    一 安装 VMware 官方正版VMware下载 xff08 16 pro xff09 xff1a https www aliyundrive com s wF66w8kW9ac 下载Linux系统镜像 xff08 阿里云盘不限速 xff0
  • WIFI模块——ESP8266

    1 ESP8266简介 ESP8266是一款高性能的WIFI串口模块 xff0c 内部集成MCU能实现单片机之间串口通信 xff0c 是目前使用最广泛的一种WIFI模块之一 可以简单理解为一个WIFI转串口的设备 xff0c 不用知道太多W
  • 姿态传感器——MPU6050

    1 MPU6050介绍 MPU6050是由三个陀螺仪和三个加速度传感器组成的6轴运动处理组件 xff0c 是一款六轴 xff08 三轴加速度 43 三轴角速度 xff08 陀螺仪 xff09 xff09 传感器 内部主要结构 陀螺仪 加速度
  • Arch | Nodejs 配置

    今天在使用 npm 时出现了一些错误 xff0c 之前那个文章内容有点多 xff0c 找起来比较麻烦 xff0c 所以这里单独把一些软件的配置单独拉出来写一个文章 参考 ArchWiki Node js 安装 如果没有多版本需求的话 xff
  • 基于I2C协议利用STM32进行温湿度传感器的数据采集

    目录 一 I2C总线通信协议的介绍1 I2C简介2 I2C总线时序图3 五种速率4 四种信号5 I2C的优缺点6 软件IIC和硬件IIC 二 创建工程1 实验目的2 工具的选择3 相关代码分析 三 线路的连接四 结果实现五 总结参考文献 一
  • 海康嵌入式软件面试经验(已拿offer)

    本科双非 xff0c 计算机类专业学渣 xff0c 0实习经历 xff0c 复习考研的时候学了一遍408 xff0c 强化阶段学的心态崩了就边复习边投简历 xff0c 之前投了好几次体面厂的测试岗都没进面试 xff0c 投开发岗反而进了 7
  • 前端浏览器渲染原理及优化

    文章目录 一 浏览器组成1 对浏览器内核的理解2 浏览器的主要组成部分 二 浏览器渲染原理1 浏览器的渲染过程步骤一 xff1a 步骤二 xff1a 步骤三 xff1a 步骤四 xff1a 步骤五 xff1a 2 相关概念 重排 更新元素的
  • Docker+github actions部署前端项目

    Docker 43 github actions部署前端项目 文章目录 Docker 43 github actions部署前端项目前言1 Docker相关文件配置2 创建自己的dokcer hub仓库3 yml文件配置 前言 在进行本篇实