Triển khai một ứng dụng Node.js với Express từ GitLab CI/CD lên một server Ubuntu
Để triển khai một ứng dụng Node.js với Express từ GitLab CI/CD lên một server Ubuntu, bạn cần các bước sau:
- Chuẩn bị server Ubuntu: Cài đặt Docker và Docker Compose.
- Tạo và cấu hình dự án Node.js với Express: Bao gồm Dockerfile và .gitlab-ci.yml.
- Cấu hình GitLab CI/CD: Để tự động xây dựng và triển khai ứng dụng lên server.
Dưới đây là hướng dẫn chi tiết cho từng bước.
Chuẩn bị Server Ubuntu
-
Cập nhật hệ thống:
Copy code
sudo apt update sudo apt upgrade -y
-
Cài đặt Docker:
Copy code
sudo apt install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt update sudo apt install docker-ce -y sudo systemctl enable docker sudo systemctl start docker
-
Cài đặt Docker Compose (tùy chọn nếu bạn cần sử dụng):
Copy code
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose docker-compose --version
Tạo và cấu hình dự án Node.js với Express
-
Tạo dự án Node.js:
Copy code
mkdir my-node-app cd my-node-app npm init -y
-
Cài đặt Express:
Copy code
npm install express
-
Tạo các tệp cần thiết:
package.json
:
Copy code
{ "name": "my-node-app", "version": "1.0.0", "description": "A simple Node.js app with Express", "main": "server.js", "scripts": { "start": "node server.js", "build": "echo 'No build step defined'", "test": "echo 'No test specified' && exit 0" }, "author": "", "license": "ISC", "dependencies": { "express": "^4.17.1" } }
server.js
:
Copy code
const express = require('express'); const app = express(); const port = 3000; app.get('/', (req, res) => { res.send('Hello, World!'); }); app.listen(port, () => { console.log(`Server is running on http://localhost:${port}`); });
Dockerfile
:
Copy code
# Sử dụng image node chính thức từ Docker Hub FROM node:14 # Đặt thư mục làm việc trong container WORKDIR /usr/src/app # Sao chép package.json và package-lock.json vào container COPY package*.json ./ # Cài đặt dependencies RUN npm install # Sao chép toàn bộ mã nguồn vào container COPY . . # Expose port mà ứng dụng của bạn chạy EXPOSE 3000 # Định nghĩa lệnh mặc định khi container chạy CMD ["npm", "start"]
Cấu hình GitLab CI/CD
Tạo tệp .gitlab-ci.yml
để định nghĩa pipeline CI/CD:
yaml
Copy code
stages: - build - deploy build: stage: build image: docker:latest services: - docker:dind script: - docker build -t my-node-app . - docker save my-node-app > my-node-app.tar artifacts: paths: - my-node-app.tar deploy: stage: deploy image: node:14 script: - apt-get update && apt-get install -y sshpass - sshpass -p "$SSH_PASSWORD" scp -o StrictHostKeyChecking=no my-node-app.tar $SSH_USER@$SSH_HOST:/home/$SSH_USER/ - sshpass -p "$SSH_PASSWORD" ssh -o StrictHostKeyChecking=no $SSH_USER@$SSH_HOST "docker load < /home/$SSH_USER/my-node-app.tar && docker stop my-node-app || true && docker rm my-node-app || true && docker run -d -p 3000:3000 --name my-node-app my-node-app" only: - master variables: SSH_USER: "your_ssh_user" SSH_PASSWORD: "your_ssh_password" SSH_HOST: "your_server_ip"
Cấu hình GitLab CI/CD Environment Variables
Trong GitLab CI/CD settings của dự án của bạn, bạn cần thêm các biến môi trường:
SSH_USER
: Tên người dùng SSH của bạn trên server Ubuntu.SSH_PASSWORD
: Mật khẩu SSH của bạn.SSH_HOST
: Địa chỉ IP của server Ubuntu của bạn.
Triển khai ứng dụng
Khi bạn đã đẩy mã nguồn lên repository GitLab, pipeline sẽ tự động chạy và triển khai ứng dụng của bạn lên server Ubuntu.
Kiểm tra triển khai
Truy cập http://your_server_ip:3000
trên trình duyệt để kiểm tra xem ứng dụng đã chạy thành công hay chưa.
Với các bước trên, bạn đã có thể triển khai một ứng dụng Node.js sử dụng Express từ GitLab CI/CD lên một server Ubuntu