阿里云与GitHub结合实现Node项目的自动化部署
- 648字
- 3分钟
- 2024-06-18
在这篇文章中,我将介绍如何将GitHub上的Node.js项目自动化部署到阿里云服务器。我们将使用GitHub Actions来实现CI/CD(持续集成和持续部署),并结合阿里云服务器来完成部署。
前提条件
在开始之前,请确保你已经具备以下条件:
- 一个GitHub账户和一个Node.js项目存储库。
- 一个阿里云ECS实例,安装了Alibaba Cloud Linux操作系统。
- 在ECS实例上安装了Node.js和PM2(用于Node.js应用的进程管理)。
步骤概述
- 配置阿里云服务器。
- 在GitHub上配置GitHub Actions。
- 编写部署脚本。
配置阿里云服务器
首先,登录你的阿里云ECS实例,并确保安装了必要的软件。
安装Node.js
1# 安装 nvm (Node Version Manager)2curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash3
4# 安装Node5nvm install 206
7node -v # 打印 `v20.15.1`8
9npm -v # 打印 `10.7.0`
安装PM2
1# 使用npm安装PM22sudo npm install -g pm23
4# 验证安装5pm2 -v
配置GitHub Actions
在你的GitHub存储库中,创建一个.github/workflows
目录,并在其中创建一个新的工作流文件,例如deploy.yml
。
1name: Node.js CI/CD2
3on:4 push:5 branches:6 - main7
8jobs:9 build:10 runs-on: ubuntu-latest11
12 steps:13 - name: Checkout code14 uses: actions/checkout@v215
16 - name: Setup Node.js17 uses: actions/setup-node@v218 with:19 node-version: "14"20
21 - name: Install dependencies22 run: npm install23
24 - name: Run tests25 run: npm test26
27 - name: Deploy to Alibaba Cloud28 env:29 HOST: ${{ secrets.ALICLOUD_HOST }}30 USERNAME: ${{ secrets.ALICLOUD_USERNAME }}31 KEY: ${{ secrets.ALICLOUD_SSH_KEY }}32 run: |33 echo "$KEY" > alicloud_key34 chmod 600 alicloud_key35 rsync -avz -e "ssh -i alicloud_key" --exclude 'node_modules' ./ $USERNAME@$HOST:/path/to/your/project36 ssh -i alicloud_key $USERNAME@$HOST << 'EOF'37 cd /path/to/your/project38 npm install --production39 pm2 restart all40 EOF
部署脚本解释
- Checkout code:使用
actions/checkout
从GitHub检出代码。 - Setup Node.js:使用
actions/setup-node
安装指定版本的Node.js。 - Install dependencies:运行
npm install
安装项目依赖。 - Run tests:运行项目的测试套件,确保代码无误。
- 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应用的进程管理。这种自动化部署不仅提高了效率,还减少了手动部署的错误。


