Hướng Dẫn Thiết Lập CI/CD cho Node.js trên Hosting Chia Sẻ (cPanel)
Giới thiệu
Hosting chia sẻ thường được thiết kế chủ yếu cho các trang web PHP, nhưng bạn hoàn toàn có thể chạy và triển khai ứng dụng Node.js với sự cấu hình đúng đắn. Hướng dẫn này sẽ giúp bạn bảo mật hosting, cài đặt Node.js, và tạo pipeline CI/CD với GitHub Actions.
🔒 Bước 1: Bảo Mật Hosting của Bạn
Nếu subdomain của bạn hiện ra danh sách thư mục ("Index of /") hoặc cho phép tải xuống tệp, hãy thêm một tệp .htaccess để chặn truy cập vào danh sách thư mục và bảo vệ các tệp nhạy cảm.
Tạo tệp .htaccess bên trong /home/username/qiz-api.example.com/:
# Vô hiệu hóa danh sách thư mục
Options -Indexes
# Chặn truy cập vào các tệp môi trường và cấu hình
<FilesMatch "^(\.env|.*\.json|.*\.lock|.*\.md)$">
Order allow,deny
Deny from all
</FilesMatch>
🔧 Bước 2: Cài Đặt Node.js trên cPanel
-
Đăng nhập vào cPanel.
-
Tìm kiếm Setup Node.js App.
-
Nhấp vào Create Application và chọn:
- Node.js Version: Chọn Node 18/20/22 (tùy thuộc vào sự hỗ trợ của máy chủ).
- Application Root:
/home/username/qiz-api.example.com - Application Startup File:
index.js
- Nhấp vào Create.
- Khởi động ứng dụng của bạn từ cPanel.
⚙️ Bước 3: Chuẩn Bị Dự Án của Bạn cho Triển Khai
Đảm bảo rằng tệp .env không được commit vào Git và lệnh npm install --production hoạt động bình thường.
Cấu trúc thư mục của bạn có thể trông như sau:
├── auth_files/
├── node_modules/
├── uploads/
├── whatsapp_instances/
├── .env
├── index.js
├── package.json
├── package-lock.json
🚀 Bước 4: Cấu Hình CI/CD với GitHub Actions
Tại thư mục gốc của dự án, tạo tệp .github/workflows/deploy.yml:
name: Deploy Node.js API to cPanel
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '22' # Thay đổi thành 18 hoặc 20 nếu máy chủ của bạn không hỗ trợ 22
- name: Install dependencies
run: npm install --production
- name: Build (if needed)
run: npm run build || echo "No build script"
- name: Deploy to cPanel via SSH
uses: appleboy/scp-action@master
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USERNAME }}
password: ${{ secrets.SSH_PASSWORD }}
port: ${{ secrets.SSH_PORT }}
source: "."
target: "/home/username/qiz-api.example.com"
- name: Restart Node.js App
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USERNAME }}
password: ${{ secrets.SSH_PASSWORD }}
port: ${{ secrets.SSH_PORT }}
script: |
cd /home/username/qiz-api.example.com
npm install --production
touch tmp/restart.txt || echo "Restart signal sent"
- name: ✅ Deployment Success
run: echo "🎉 Deployment to cPanel was successful!"
🔑 Bước 5: Thêm Bí Mật GitHub
Trong cài đặt kho lưu trữ GitHub của bạn, thêm các bí mật sau:
SSH_HOST: Địa chỉ IP hoặc tên máy chủ cPanel của bạn.SSH_USERNAME: Tên người dùng cPanel của bạn.SSH_PASSWORD: Mật khẩu cPanel của bạn.SSH_PORT: Thường là22.
🔥 Cách Hoạt Động
- Đẩy mã lên nhánh
maincủa bạn. - GitHub Actions sẽ kiểm tra mã của bạn, cài đặt các phụ thuộc và tải tệp lên hosting của bạn.
- Ứng dụng Node.js của bạn sẽ tự động được khởi động lại.
✅ Thực Hành Tốt Nhất
- Sử dụng
.htaccessđể chặn danh sách thư mục và các tệp nhạy cảm. - Loại trừ
.envvà các bí mật khỏi kiểm soát phiên bản. - Giữ
node_modulesra khỏi Git; để việc triển khai xử lý việc cài đặt. - Sử dụng các phiên bản Node.js được máy chủ hỗ trợ (18/20/22).
⚠️ Những Cạm Bẫy Thường Gặp
- Không bảo mật các tệp cấu hình có chứa thông tin nhạy cảm.
- Quên kiểm tra các phiên bản Node.js trước khi triển khai.
🛠️ Mẹo Tối Ưu Hiệu Suất
- Sử dụng phiên bản Node.js ổn định và được hỗ trợ.
- Tối ưu hóa tệp
.envđể giảm thiểu dung lượng tải.
🤔 Câu Hỏi Thường Gặp
- Tôi có thể sử dụng Node.js phiên bản nào?
- Bạn nên sử dụng các phiên bản Node.js 18/20/22 tùy thuộc vào sự hỗ trợ của máy chủ.
- Tại sao tôi cần bảo mật tệp
.env?- Tệp
.envchứa thông tin nhạy cảm và không nên bị lộ ra ngoài.
- Tệp
Kết luận
Việc thiết lập CI/CD cho ứng dụng Node.js trên hosting chia sẻ không quá phức tạp nếu bạn làm theo các bước trên. Hãy đảm bảo bảo mật và tối ưu hóa dự án của bạn để có hiệu suất tốt nhất. Nếu bạn gặp khó khăn, hãy tham khảo tài liệu chính thức của Node.js và GitHub Actions để được hỗ trợ thêm.