paint-brush
Cách tạo quy trình CI/CD bằng GitHub và AWS EC2từ tác giả@wesleybaxterhuber
1,320 lượt đọc
1,320 lượt đọc

Cách tạo quy trình CI/CD bằng GitHub và AWS EC2

từ tác giả Wes Huber6m2024/04/30
Read on Terminal Reader

dài quá đọc không nổi

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 lên kho lưu trữ Github của bạn.
featured image - Cách tạo quy trình CI/CD bằng GitHub và AWS EC2
Wes Huber HackerNoon profile picture

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.

Điều đầu tiên Đầu tiên, “Xin chào thế giới”

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! 💪

Tiếp theo, hãy đẩy mã của chúng tôi lên GitHub

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 ⛽️

Hãy truy cập đám mây - Thiết lập máy chủ Ec2

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.


  • Chọn một loại phiên bản (ví dụ: t2.micro nếu bạn ở bậc miễn phí).


  • Định cấu hình chi tiết phiên bản, thêm bộ nhớ và thêm thẻ nếu cần.


  • Định cấu hình nhóm bảo mật để cho phép lưu lượng truy cập vào trên các cổng bạn cần (ít nhất là cổng TCP 22 cho SSH và cổng ứng dụng của bạn, sau đó là 3000 cho lưu lượng truy cập web).


  • Xem lại và khởi chạy phiên bản; đảm bảo rằng bạn lưu cặp khóa được sử dụng để truy cập SSH.


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! 👏

Tuy nhiên, chúng tôi vẫn chưa hoàn thành - Chúng tôi chỉ mới bắt đầu 😏

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 ⭐️

Tích hợp với các hành động GitHub

Đâ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