Node.js: 使用 GitHub Actions 部署

了解如何使用 GitHub Actions 部署您的 Node.js 代码

👋 欢迎使用 Stackhero 文档!

Stackhero 提供现成的 Node.js 云 解决方案,具有众多优势,包括:

  • 通过简单的 git push 在几秒钟内 部署您的应用程序。
  • 使用您自己的域名,并享受 HTTPS 证书的自动配置以增强安全性。
  • 享受自动备份一键更新以及简单、透明和可预测的定价带来的安心。
  • 通过专用私有 VM获得最佳的性能和强大的安全性

节省时间简化您的生活:只需 5 分钟即可试用 Stackhero 的 Node.js 云托管 解决方案!

GitHub Actions 让自动化任务变得简单,例如将您的 Node.js 代码部署到生产服务器。在本指南中,我们将逐步介绍如何通过 GitHub Actions,将您的 Node.js 应用安全、可靠地部署到预发布(staging)和生产(production)环境。

我们建议您维护两个分支:stagingproduction。当您向这两个分支中的任意一个推送代码时,您的更改会自动部署到对应的 Stackhero 服务。

拥有 staging 实例是可选的。 您也可以仅使用生产实例来完成本指南。为了让部署流程更顺畅,并在正式上线前增强信心,我们强烈建议同时维护 staging 和 production 环境。 这种做法在业界被广泛采用,有助于避免常见的部署问题。

在开始之前,请确保您拥有一个 GitHub 账号,并且已经有一个托管您 Node.js 代码的仓库。

首先,登录您的 Stackhero 控制台,创建两个 Stackhero 服务:一个用于 staging,一个用于 production。为了便于区分,您可以将这两个服务分别命名为“Staging”和“Production”。

如果您还没有 Stackhero 账号, 只需两分钟即可免费注册,并通过几次点击即可配置您的 Node.js 云服务

Node.js 服务示例Node.js 服务示例

SSH 密钥允许 GitHub Actions 在部署代码时安全地连接到您的 Node.js 服务。这是保护您的 Stackhero 服务的重要步骤。

在您的电脑上,可以通过以下命令生成新的 SSH 密钥:

ssh-keygen -C "" -f /tmp/ssh_key -N ""

要查看刚刚生成的公钥,请运行:

cat /tmp/ssh_key.pub

接下来,在 Stackhero 控制台中,选择您的生产 Node.js 服务,点击 Configure 按钮。

获取服务设置获取服务设置

继续以下步骤:

  1. SSH public keys 部分,点击 Add a public key
  2. Description 中输入 GitHub Action
  3. Key 字段粘贴您刚才复制的公钥。

获取服务设置获取服务设置

现在,切换到 GitHub,打开您的项目仓库。点击 Settings,然后选择 Environments,点击 New environment

配置 GitHub 环境配置 GitHub 环境

Name 字段输入 "production" 并确认。

设置环境设置环境

点击 No restriction 按钮,然后选择 Selected branches and tags

设置环境限制设置环境限制

接着点击 Add deployment branch or tag rule,在 Name pattern 字段输入 "production",然后点击 Add rule

设置环境分支设置环境分支

设置环境分支设置环境分支

Environment secrets 部分,点击 Add secret

添加密钥添加密钥

要获取您生成的私钥,请运行:

cat /tmp/ssh_key

在 GitHub 中,将 Name 设置为 STACKHERO_SSH_PRIVATE_KEY,并将您的私钥粘贴到 Value 字段。

设置 SSH 私钥密钥设置 SSH 私钥密钥

然后,在 Environment variables 部分,点击 Add variable

设置变量设置变量

Name 设置为 STACKHERO_ENDPOINT,并将您的 Node.js 服务 endpoint 粘贴到 Value 字段。您可以在 Stackhero 控制台中找到该 endpoint。

设置 endpoint 变量设置 endpoint 变量

如果您为服务设置了自定义域名,请使用您的自定义域名替换 <XXXXXX>.stackhero-network.com。

出于安全考虑,建议在将 SSH 密钥添加到 Stackhero 和 GitHub 后,从您的电脑中删除这些密钥:

rm /tmp/ssh_key /tmp/ssh_key.pub

在您的 Git 仓库中,如果还没有 .github/workflows 目录,请创建一个。然后添加名为 deploy-to-stackhero.yml 的文件:

# File: .github/workflows/deploy-to-stackhero.yml

name: Deploy to Stackhero
run-name: Deploy branch "${{ github.ref_name }}" to Stackhero

on:
  push:
    # 列出触发部署操作的分支。请确保 GitHub(在 "Settings" > "Environments")中为每个分支都创建了环境。
    # 然后在该环境中添加对应的密钥 STACKHERO_SSH_PRIVATE_KEY 和变量 STACKHERO_ENDPOINT。
    branches: [ "production", "staging" ]

jobs:
  Deploy:
    environment: ${{ github.ref_name }}
    runs-on: ubuntu-latest
    steps:
    - uses: stackhero-io/github-actions-deploy-to-stackhero@v1
      with:
        # STACKHERO_SSH_PRIVATE_KEY 和 STACKHERO_ENDPOINT 应在对应的 GitHub 环境中设置。
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

创建好工作流文件后,您可以这样提交更改:

git add -A .
git commit -m "Add GitHub Actions to deploy to Stackhero"

要创建 production 分支,请运行:

git checkout -b production

然后将更改推送到 GitHub:

git push --set-upstream origin production

此操作会将您的代码推送到 production 分支,并触发 GitHub Actions,将您的代码部署到 Stackhero 服务。要确认部署情况,请在 GitHub 项目中点击 Actions

GitHub Actions 部署到生产环境GitHub Actions 部署到生产环境

就是这样。您的代码现在已通过 GitHub Actions 实现自动部署到生产环境。

staging 环境的配置与生产环境几乎相同。只需重复上述步骤,将 production 替换为 staging 即可。

首先创建 staging 分支:

git checkout -b staging

然后将 staging 分支推送到 GitHub:

git push --set-upstream origin staging

GitHub Actions 会自动将您的 staging 分支部署到指定的 Node.js 服务。

建议保护 productionstaging 分支,防止直接推送。您可以先向 staging 分支创建 Pull Request,并从开发分支合并更改。在 staging 平台验证无误后,再将 Pull Request 合并到 production 分支。

这种工作流可以确保只有授权的贡献者才能向 staging 和 production 分支推送代码,并在新功能上线前增加一道测试环节。