paint-brush
如何使用 GitHub 和 AWS EC2 创建 CI/CD 管道经过@wesleybaxterhuber
774 讀數
774 讀數

如何使用 GitHub 和 AWS EC2 创建 CI/CD 管道

经过 Wes Huber6m2024/04/30
Read on Terminal Reader

太長; 讀書

这种技术本质上使您的 EC2 服务器能够响应推送到您的 Github 存储库的更改。
featured image - 如何使用 GitHub 和 AWS EC2 创建 CI/CD 管道
Wes Huber HackerNoon profile picture

大家好,今天我想做一个教程,介绍我最喜欢的一种使用 NodeJS/Express 将快速 REST API 部署到 Amazon EC2 服务器的方法。此技术本质上使您的 EC2 服务器能够响应推送到 GitHub 存储库的更改。

首先,“Hello World”

在你的机器上创建一个新目录,用于安装 NodeJS/Express 应用。我将其命名为rekognition


打开终端,并运行此命令来初始化 package.json npm init -y


安装 express.js npm i express


在默认路由上创建一个带有“hello world”的基本快速服务器

const express = require('express'); const app = express(); const port = 3000; app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(port, () => { console.log(`Example app listening at http://localhost:${port}`); });

测试以确保您在http://localhost:3000/上看到“Hello World!”


干得好,第一步完成了!💪

接下来,我们将代码推送到 GitHub

在您的目录中初始化 Git 仓库,并进行第一次提交 -

 git init git add . git commit -m "First commit"


在你的 GitHub 帐户上创建远程存储库

添加新的 repo 作为原点,并推送您的分支。

 git remote add origin <REMOTE_REPOSITORY_URL> git push -u origin master


<REMOTE_REPOSITORY_URL>替换为您刚刚创建的远程存储库的链接。


您可能需要更改存储库设置以使用“master”而不是“main”作为默认分支。

完成此操作后,您可以删除“主”分支。


第 2 步:完成!我们用煤气做饭⛽️

让我们进入云 — 设置 Ec2 服务器

以下是启动 EC2 实例的步骤:



  • 导航到 EC2 仪表板并启动一个新实例。

  • 选择合适的 AMI(Amazon Machine Image);我使用的是 Amazon Linux 2。


  • 选择一个实例类型(例如,如果您处于免费套餐下,则选择 t2.micro)。


  • 配置实例详细信息,添加存储,并根据需要添加标签。


  • 配置一个安全组以允许您所需端口上的入站流量(对于 SSH 和应用程序的端口至少为 TCP 端口 22,对于 Web 流量至少为 3000)。


  • 检查并启动实例;确保保存用于 SSH 访问的密钥对。


现在,让我们在终端上测试通过 SSH 登录您的服务器:

ssh ec2-user@<YOUR_SERVER_IP> -i <YOUR_PRIVATE_KEY>.pem


将那里的变量替换为您为 EC2 实例定义的值。

如果你看到这个,说明你已经连接到你的服务器了,恭喜你!👏

但我们还没完——我们才刚刚开始😏

让我们在服务器上安装 NodeJS:
sudo yum install -y nodejs


通过 npm 在我们的服务器上全局安装pm2

sudo npm i -g pm2


在服务器上安装 git,并配置您的凭据:

sudo yum install git -y

 git config --global user.name "Your Name" git config --global user.email "[email protected]"


好的,如果var/www/文件夹不存在,我们现在要创建一个:

sudo mkdir -p /var/www


然后将所有权添加到我们的 ec2-user:

sudo chown -R ec2-user:ec2-user /var/www


从服务器的根目录导航到目录 — — 而不是 /home 文件夹 👌 cd ~/var/www


现在,从这里,我们将克隆我们的 git 存储库: git clone https://github.com/USERNAME/REPO_NAME.git YOUR_PROJECT_DIRECTORY

用您自己的值替换 [USERNAME] [REPO_NAME] 和 [YOUR_PROJECT_DIRECTORY]。


接下来,我们将目录更改为我们的存储库,因此cd YOUR_PROJECT_DIRECTORY可以为我们的 pm2 设置创建ecosystem.config.js文件:

nano ecosystem.config.js


它看起来像这样:

 module.exports = { apps : [{ name: "my-app", // A name for your application script: "app.js", // The script file to launch the app instances: "max", // This can be set to the number of CPU cores to use, or "max" to use all available autorestart: true, // Automatically restart app if it crashes watch: false, // Enable/disable watching file changes for automatic restart max_memory_restart: '1G', // Optional: Restart app if it reaches a memory limit env: { NODE_ENV: "development", }, env_production: { NODE_ENV: "production", } }] };

很酷,好的 - 一旦创建并保存,让我们使用 pm2 启动应用程序:

pm2 start ecosystem.config.js


现在,我们可以检查服务器在端口 3000 上是否有“Hello World!”:

为了使 pm2 在服务器重启时自动启动,我们运行:

 pm2 save pm2 startup

要检查服务器是否正在运行,你可以执行pm2 status ;你可以在此处阅读有关 pm2的文档


如果你已经做到了这一点,你就是一个超级明星⭐️

与 GitHub Actions 集成

这是我们流程的最后一步。我们将创建一个.yml文件,用于 Github 操作,以便在将更改推送到主分支时更新我们的服务器

在您的存储库中,转到“操作”选项卡并创建一个新的自定义工作流。我将其命名为nodejs.yml


这是用于更新 repo 和重新启动 pm2 的 .yml 文件:

 name: Node.js CI/CD on Amazon Linux on: push: branches: [ master ] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install dependencies run: npm install - name: Deploy to AWS EC2 uses: appleboy/scp-action@master with: host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} source: "./" # This now correctly points to the current directory target: "/var/www/your_project_directory" - name: Restart PM2 application uses: appleboy/ssh-action@master with: host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} script: | cd /var/www/your_project_directory pm2 reload all # This command restarts your application

确保更新“your_project_directory”


最后,您需要添加这些环境密钥。REMOTE_HOST 这是您的服务器的 IP 地址; REMOTE_HOST这是 Amazon Linux 2 AMI 的ec2-user REMOTE_USER然后将 .pem 文件的内容粘贴为SSH_PRIVATE_KEY


您可以在存储库设置中完成所有这些操作:

就这样!我们完成了耶 😁


你可以通过更改“Hello World”消息并将该更改推送到主分支来测试这一切;然后你应该在http://your.ip.address:3000上看到更新


设置过程有点复杂,但在开发过程中,拥有一个简单的 CI/CD 管道自动将更改部署到 REST API 服务器确实很棒。这样,您就可以快速实时部署更改并在 Web/移动应用程序的前端查看它们。


请在评论中告诉我这是否有用,谢谢阅读!!


平安,

— 韦斯