使用 GitHub Actions 和 Docker 驾驭 CI/CD,让你的 SaaS 前端项目飞上云端!

镇场名画:Web猿之殇

All right!此次的目标是:

  • 使用 GitHub Actions + Docker
  • 让你的 SaaS 前端项目自动化构建和部署,实现CI/CD:持续集成和持续部署

Lets Go!

一、准备工作

首先,你需要有一个 GitHub 仓库,里面有你的 SaaS 前端项目的代码。这个项目应该使用 Node.js 和 Nginx,并且有一个 Dockerfile 和一个 docker-compose.yml 文件。如果你还没有这些文件,不用担心,我会在下面给你提供一个示例。

这是 Dockerfile 文件的内容:

js 复制代码
# 使用 Node.js 官方镜像作为构建环境
FROM node:14 as build

# 设置工作目录
WORKDIR /app

# 复制 package.json 和 package-lock.json 到工作目录
COPY package*.json ./

# 安装依赖
RUN npm install

# 复制其他源代码文件到工作目录
COPY . .

# 构建项目
RUN npm run build

# 使用 Nginx 官方镜像作为运行环境
FROM nginx:stable-alpine as production

# 从构建环境中复制构建结果到 Nginx 的静态文件目录
COPY --from=build /app/dist /usr/share/nginx/html

# 复制 Nginx 配置文件
COPY nginx.conf /etc/nginx/conf.d/default.conf

# 暴露 80 端口
EXPOSE 80

# 启动 Nginx
CMD ["nginx", "-g", "daemon off;"]

这是 docker-compose.yml 文件的内容:

yml 复制代码
version: '3'

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "80:80"

二、设置 GitHub Actions

接下来,我们要在 GitHub 仓库中设置 GitHub Actions。首先,你需要在你的项目根目录下创建一个新的 GitHub Actions 工作流文件 .github/workflows/ci-cd.yml:

yml 复制代码
name: CI/CD

on:
  push:
    branches:
      - master

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    
    steps:
    - name: Checkout code
      uses: actions/checkout@v2  # 使用 GitHub 官方 action 来检出代码
      
    - name: Build Docker Compose
      run: |
        docker-compose build  # 使用 Docker Compose 构建服务

    - name: Save Docker images
      run: |
        docker save my-app_web:latest | gzip > my-app.tar.gz  # 保存 Docker 镜像为 tar.gz 文件

    - name: Deploy
      uses: appleboy/scp-action@master  # 使用社区 action 来通过 SCP 传输文件
      with:
        host: ${{ secrets.DEPLOY_HOST }}
        username: ${{ secrets.DEPLOY_USER }}
        key: ${{ secrets.DEPLOY_KEY }}
        source: "my-app.tar.gz"
        target: "/tmp"

    - name: Load and run Docker image on the server
      uses: appleboy/ssh-action@master  # 使用社区 action 来通过 SSH 连接服务器并执行命令
      with:
        host: ${{ secrets.DEPLOY_HOST }}
        username: ${{ secrets.DEPLOY_USER }}
        key: ${{ secrets.DEPLOY_KEY }}
        script: |
          docker load < /tmp/my-app.tar.gz  # 加载 Docker 镜像
          docker-compose up -d  # 使用 Docker Compose 启动服务

在这个工作流中,我们首先检出代码,然后使用 Docker Compose 构建服务。然后,我们将 Docker 镜像保存为一个 tar.gz 文件,并将这个文件传输到你的服务器。最后,我们在你的服务器上加载 Docker 镜像,并使用 Docker Compose 启动服务。

三、设置 Secrets

最后,你需要在你的 GitHub 仓库的 "Settings" -> "Secrets" 中设置 DEPLOY_HOST、DEPLOY_USER 和 DEPLOY_KEY 这三个 secrets,分别对应你的服务器地址、用户名和 SSH 私钥。

四、启动工作流

现在,你已经完成了所有的设置。每次你向 master 分支推送代码时,GitHub Actions 就会自动启动这个工作流,构建你的项目,创建 Docker 镜像,并将这个镜像部署到你的服务器。


恭喜你,你已经学会了如何使用 GitHub Actions 和 Docker 自动化部署你的 SaaS 前端项目!现在,你可以坐下来,撸一口加菲,看着你的代码自动被部署到服务器。是不是很酷?

P.S. 如果你的项目是私有的,记得查看 GitHub Actions 的定价信息,因为私有仓库使用 GitHub Actions 是需要收费的。但是,对于公开仓库,GitHub Actions 是完全免费的。所以,如果你还没有试过 GitHub Actions,现在就去试试吧!

相关推荐
万少6 小时前
HarmonyOS 开发必会 5 种 Builder 详解
前端·harmonyos
橙序员小站9 小时前
Agent Skill 是什么?一文讲透 Agent Skill 的设计与实现
前端·后端
炫饭第一名11 小时前
速通Canvas指北🦮——基础入门篇
前端·javascript·程序员
王晓枫11 小时前
flutter接入三方库运行报错:Error running pod install
前端·flutter
符方昊11 小时前
React 19 对比 React 16 新特性解析
前端·react.js
ssshooter11 小时前
又被 Safari 差异坑了:textContent 拿到的值居然没换行?
前端
曲折12 小时前
Cesium-气象要素PNG色斑图叠加
前端·cesium
Forever7_12 小时前
Electron 淘汰!新的桌面端框架 更强大、更轻量化
前端·vue.js
Angelial12 小时前
Vue3 嵌套路由 KeepAlive:动态缓存与反向配置方案
前端·vue.js
jiayu12 小时前
Angular学习笔记24:Angular 响应式表单 FormArray 与 FormGroup 相互嵌套
前端