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)环境。
我们建议您维护两个分支:staging 和 production。当您向这两个分支中的任意一个推送代码时,您的更改会自动部署到对应的 Stackhero 服务。
拥有 staging 实例是可选的。 您也可以仅使用生产实例来完成本指南。为了让部署流程更顺畅,并在正式上线前增强信心,我们强烈建议同时维护 staging 和 production 环境。 这种做法在业界被广泛采用,有助于避免常见的部署问题。
在开始之前,请确保您拥有一个 GitHub 账号,并且已经有一个托管您 Node.js 代码的仓库。
创建 Node.js 服务
首先,登录您的 Stackhero 控制台,创建两个 Stackhero 服务:一个用于 staging,一个用于 production。为了便于区分,您可以将这两个服务分别命名为“Staging”和“Production”。
如果您还没有 Stackhero 账号, 只需两分钟即可免费注册,并通过几次点击即可配置您的 Node.js 云服务。
Node.js 服务示例
配置 SSH 密钥
SSH 密钥允许 GitHub Actions 在部署代码时安全地连接到您的 Node.js 服务。这是保护您的 Stackhero 服务的重要步骤。
在您的电脑上,可以通过以下命令生成新的 SSH 密钥:
ssh-keygen -C "" -f /tmp/ssh_key -N ""
设置公钥
要查看刚刚生成的公钥,请运行:
cat /tmp/ssh_key.pub
接下来,在 Stackhero 控制台中,选择您的生产 Node.js 服务,点击 Configure 按钮。
获取服务设置
继续以下步骤:
- 在 SSH public keys 部分,点击 Add a public key。
- 在 Description 中输入
GitHub Action。 - 在 Key 字段粘贴您刚才复制的公钥。
获取服务设置
设置私钥
现在,切换到 GitHub,打开您的项目仓库。点击 Settings,然后选择 Environments,点击 New environment。
配置 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 私钥密钥
然后,在 Environment variables 部分,点击 Add variable。
设置变量
将 Name 设置为 STACKHERO_ENDPOINT,并将您的 Node.js 服务 endpoint 粘贴到 Value 字段。您可以在 Stackhero 控制台中找到该 endpoint。
设置 endpoint 变量
如果您为服务设置了自定义域名,请使用您的自定义域名替换 <XXXXXX>.stackhero-network.com。
删除生成的密钥
出于安全考虑,建议在将 SSH 密钥添加到 Stackhero 和 GitHub 后,从您的电脑中删除这些密钥:
rm /tmp/ssh_key /tmp/ssh_key.pub
配置 GitHub Actions 工作流
在您的 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 实现自动部署到生产环境。
创建 staging 环境
staging 环境的配置与生产环境几乎相同。只需重复上述步骤,将 production 替换为 staging 即可。
首先创建 staging 分支:
git checkout -b staging
然后将 staging 分支推送到 GitHub:
git push --set-upstream origin staging
GitHub Actions 会自动将您的 staging 分支部署到指定的 Node.js 服务。
深入实践
建议保护 production 和 staging 分支,防止直接推送。您可以先向 staging 分支创建 Pull Request,并从开发分支合并更改。在 staging 平台验证无误后,再将 Pull Request 合并到 production 分支。
这种工作流可以确保只有授权的贡献者才能向 staging 和 production 分支推送代码,并在新功能上线前增加一道测试环节。