大家好,今天我想做一个教程,介绍我最喜欢的一种使用 NodeJS/Express 将快速 REST API 部署到 Amazon EC2 服务器的方法。此技术本质上使您的 EC2 服务器能够响应推送到 GitHub 存储库的更改。
在你的机器上创建一个新目录,用于安装 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!”
干得好,第一步完成了!💪
在您的目录中初始化 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 仪表板并启动一个新实例。
选择合适的 AMI(Amazon Machine Image);我使用的是 Amazon Linux 2。
现在,让我们在终端上测试通过 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的文档
如果你已经做到了这一点,你就是一个超级明星⭐️
这是我们流程的最后一步。我们将创建一个.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/移动应用程序的前端查看它们。
请在评论中告诉我这是否有用,谢谢阅读!!
平安,
— 韦斯