阿里云与GitHub结合实现Node项目的自动化部署

在这篇文章中,我将介绍如何将GitHub上的Node.js项目自动化部署到阿里云服务器。我们将使用GitHub Actions来实现CI/CD(持续集成和持续部署),并结合阿里云服务器来完成部署。

前提条件

在开始之前,请确保你已经具备以下条件:

  1. 一个GitHub账户和一个Node.js项目存储库。
  2. 一个阿里云ECS实例,安装了Alibaba Cloud Linux操作系统。
  3. 在ECS实例上安装了Node.js和PM2(用于Node.js应用的进程管理)。

步骤概述

  1. 配置阿里云服务器。
  2. 在GitHub上配置GitHub Actions。
  3. 编写部署脚本。

配置阿里云服务器

首先,登录你的阿里云ECS实例,并确保安装了必要的软件。

安装Node.js

Terminal window
1
# 安装 nvm (Node Version Manager)
2
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
3
4
# 安装Node
5
nvm install 20
6
7
node -v # 打印 `v20.15.1`
8
9
npm -v # 打印 `10.7.0`

安装PM2

Terminal window
1
# 使用npm安装PM2
2
sudo npm install -g pm2
3
4
# 验证安装
5
pm2 -v

配置GitHub Actions

在你的GitHub存储库中,创建一个.github/workflows目录,并在其中创建一个新的工作流文件,例如deploy.yml

1
name: Node.js CI/CD
2
3
on:
4
push:
5
branches:
6
- main
7
8
jobs:
9
build:
10
runs-on: ubuntu-latest
11
12
steps:
13
- name: Checkout code
14
uses: actions/checkout@v2
15
16
- name: Setup Node.js
17
uses: actions/setup-node@v2
18
with:
19
node-version: "14"
20
21
- name: Install dependencies
22
run: npm install
23
24
- name: Run tests
25
run: npm test
26
27
- name: Deploy to Alibaba Cloud
28
env:
29
HOST: ${{ secrets.ALICLOUD_HOST }}
30
USERNAME: ${{ secrets.ALICLOUD_USERNAME }}
31
KEY: ${{ secrets.ALICLOUD_SSH_KEY }}
32
run: |
33
echo "$KEY" > alicloud_key
34
chmod 600 alicloud_key
35
rsync -avz -e "ssh -i alicloud_key" --exclude 'node_modules' ./ $USERNAME@$HOST:/path/to/your/project
36
ssh -i alicloud_key $USERNAME@$HOST << 'EOF'
37
cd /path/to/your/project
38
npm install --production
39
pm2 restart all
40
EOF

部署脚本解释

  1. Checkout code:使用actions/checkout从GitHub检出代码。
  2. Setup Node.js:使用actions/setup-node安装指定版本的Node.js。
  3. Install dependencies:运行npm install安装项目依赖。
  4. Run tests:运行项目的测试套件,确保代码无误。
  5. Deploy to Alibaba Cloud:使用rsync将项目文件同步到阿里云服务器,并使用SSH连接到服务器,安装生产依赖并重启PM2管理的应用。

配置GitHub Secrets

为了安全地存储和使用敏感信息,我们需要在GitHub存储库中配置Secrets。导航到你的存储库设置,找到Secrets and variables,然后添加以下Secrets:

  • ALICLOUD_HOST:你的阿里云服务器IP地址。
  • ALICLOUD_USERNAME:用于SSH连接的用户名。
  • ALICLOUD_SSH_KEY:你的SSH私钥内容。

总结

通过以上步骤,我们实现了Node.js项目从GitHub到阿里云的自动化部署。GitHub Actions提供了强大的CI/CD功能,而PM2简化了Node.js应用的进程管理。这种自动化部署不仅提高了效率,还减少了手动部署的错误。

美团外卖红包 饿了么红包 支付宝红包