Xin chào mọi người, hôm nay tôi muốn hướng dẫn về một trong những cách yêu thích của tôi để triển khai API REST nhanh bằng cách sử dụng NodeJS/Express cho máy chủ Amazon EC2. Kỹ thuật này về cơ bản cho phép máy chủ EC2 của bạn phản hồi với những thay đổi được đẩy tới kho lưu trữ GitHub của bạn.
Tạo một thư mục mới trên máy của bạn để ứng dụng NodeJS/Express hoạt động. Tôi đang gọi rekognition
của mình
Mở một thiết bị đầu cuối và chạy lệnh này để khởi tạo gói.json npm init -y
Cài đặt express.js npm i express
Tạo một máy chủ tốc hành cơ bản với 'hello world' ở tuyến đường mặc định
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}`); });
Kiểm tra để chắc chắn rằng bạn đang nhìn thấy 'Xin chào thế giới!' tại http://localhost:3000/
Làm tốt lắm, bước một đã hoàn thành! 💪
Khởi tạo kho lưu trữ Git trong thư mục của bạn và thực hiện cam kết đầu tiên -
git init git add . git commit -m "First commit"
Tạo kho lưu trữ từ xa trên tài khoản GitHub của bạn
Thêm repo mới làm nguồn gốc và đẩy chi nhánh của bạn.
git remote add origin <REMOTE_REPOSITORY_URL> git push -u origin master
Thay thế <REMOTE_REPOSITORY_URL>
bằng liên kết tới kho lưu trữ từ xa mà bạn vừa tạo.
Bạn có thể cần thay đổi cài đặt kho lưu trữ của mình để sử dụng 'master' làm nhánh mặc định thay vì 'chính'.
Sau khi thực hiện việc này, bạn có thể xóa nhánh 'chính'.
Bước 2: hoàn tất! Chúng tôi đang nấu ăn bằng gas ⛽️
Dưới đây là các bước để khởi chạy Phiên bản EC2 của bạn:
Điều hướng đến bảng điều khiển EC2 và khởi chạy một phiên bản mới.
Chọn một AMI thích hợp (Hình ảnh máy của Amazon); Tôi đang sử dụng Amazon Linux 2.
Bây giờ, hãy kiểm tra việc đăng nhập vào máy chủ của bạn thông qua SSH trên thiết bị đầu cuối:
ssh ec2-user@<YOUR_SERVER_IP> -i <YOUR_PRIVATE_KEY>.pem
Thay thế các biến ở đó bằng các giá trị bạn đã xác định cho phiên bản EC2 của mình.
Nếu bạn thấy điều này thì bạn đã kết nối với máy chủ của mình, xin chúc mừng! 👏
Hãy cài đặt NodeJS trên máy chủ của chúng tôi:
sudo yum install -y nodejs
Cài đặt pm2 trên toàn cầu trên máy chủ của chúng tôi thông qua npm
sudo npm i -g pm2
Cài đặt git trên máy chủ và định cấu hình thông tin đăng nhập của bạn:
sudo yum install git -y
git config --global user.name "Your Name" git config --global user.email "[email protected]"
Được rồi, bây giờ chúng ta sẽ tạo một thư mục var/www/
nếu nó chưa tồn tại:
sudo mkdir -p /var/www
Sau đó thêm quyền sở hữu cho người dùng ec2 của chúng tôi:
sudo chown -R ec2-user:ec2-user /var/www
Điều hướng đến thư mục từ thư mục gốc của máy chủ của bạn - không phải thư mục /home people 👌 cd ~/var/www
Bây giờ, từ đây, chúng tôi sẽ sao chép kho lưu trữ git của mình: git clone https://github.com/USERNAME/REPO_NAME.git YOUR_PROJECT_DIRECTORY
Thay thế [USERNAME] [REPO_NAME] và [YOUR_PROJECT_DIRECTORY] bằng các giá trị của riêng bạn.
Tiếp theo, chúng tôi thay đổi thư mục thành kho lưu trữ của mình, để cd YOUR_PROJECT_DIRECTORY
có thể tạo tệp ecosystem.config.js
để thiết lập pm2 của chúng tôi:
nano ecosystem.config.js
Nó trông như thế này:
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", } }] };
Đậu tuyệt vời, được rồi - sau khi được tạo và lưu, hãy khởi động ứng dụng với pm2:
pm2 start ecosystem.config.js
Bây giờ, chúng ta có thể kiểm tra xem chúng ta có 'Xin chào thế giới!' từ máy chủ của chúng tôi trên cổng 3000:
Để làm cho pm2 tự động khởi động khi máy chủ khởi động lại, hãy chạy:
pm2 save pm2 startup
Để kiểm tra máy chủ của bạn đang chạy, bạn có thể thực hiện pm2 status
; bạn có thể đọc tài liệu trên pm2 tại đây
Nếu bạn đã làm được đến mức này thì bạn là một siêu sao ⭐️
Đây là bước cuối cùng trong quy trình của chúng tôi. Chúng tôi sẽ tạo một tệp .yml
cho các hành động Github để cập nhật máy chủ của chúng tôi bất cứ khi nào có thay đổi được đẩy đến nhánh chính của chúng tôi
Trong kho lưu trữ của bạn, hãy chuyển đến tab 'Hành động' và tạo quy trình làm việc tùy chỉnh mới. Tôi đang gọi nodejs.yml
của tôi
Đây là tệp .yml để cập nhật repo và khởi động lại pm2:
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
Đảm bảo cập nhật 'your_project_directory'
Cuối cùng, bạn sẽ cần thêm các bí mật môi trường này. REMOTE_HOST
đây là địa chỉ IP máy chủ của bạn; REMOTE_USER
đây là ec2-user
dành cho Amazon Linux 2 AMI, sau đó dán nội dung của tệp .pem của bạn dưới dạng SSH_PRIVATE_KEY
Bạn có thể thực hiện tất cả những điều này trong cài đặt kho lưu trữ:
Đó là nó! Chúng ta đã xong rồi đấy 😁
Bạn có thể kiểm tra tất cả điều này bằng cách thay đổi thông báo 'Hello World' và đẩy thay đổi đó sang nhánh chính của bạn; thì bạn sẽ thấy bản cập nhật tại http://your.ip.address:3000
Quá trình thiết lập hơi mất một chút thời gian nhưng khi bạn đang phát triển, thật tuyệt khi có một quy trình CI/CD dễ dàng tự động triển khai các thay đổi cho máy chủ API REST của bạn. Bằng cách đó, bạn có thể nhanh chóng triển khai trực tiếp các thay đổi và xem chúng ở giao diện người dùng của ứng dụng web/di động của mình.
Hãy cho tôi biết nếu điều này hữu ích trong phần bình luận và cảm ơn vì đã đọc!!
Bình yên nhé
— Wes