Để triển khai Next.js lên VPS và cấu hình tên miền để website hoạt động với PM2 (ok)

✅ Quy trình chuẩn để cập nhật source bằng git pull và build lại:

# 1. Dừng ứng dụng
pm2 stop my-next-app

# 2. Cập nhật source code
git pull origin main  # Hoặc nhánh khác nếu dùng

# 3. Cài lại các package (nếu cần)
npm install

# 4. Build lại project Next.js
npm run build
# 5. Chạy lại ứng dụng
pm2 start my-next-app

# 6. Kiểm tra lại PM2
pm2 list

Ban đầu Chạy ứng dụng Next.js với PM2

pm2 start npm --name "my-next-app" -- start

pm2 list in vps

Delete id?

When you run pm2 list on your VPS, you'll see a table of your running applications, each with an id. To delete a process by its ID, you use the pm2 delete command.

Here's how to do it:

  1. List your processes to find the ID:

    Bash

    pm2 list

    This will show you something like:

    ┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬───────────┬─────────┬───────────┬──────────┬──────────┬──────────┐
    │ id │ name               │ mode     │ ↺    │ status    │ cpu      │ memory    │ unique  │         │ pid      │ uptime   │
    ├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼───────────┼─────────┼───────────┼──────────┼──────────┼──────────┤
    │ 0  │ my-app             │ fork     │ 0    │ online    │ 0%       │ 25.1MB    │         │ 12345    │ 1h       │
    │ 1  │ another-app        │ cluster  │ 0    │ online    │ 0%       │ 30.5MB    │         │ 67890    │ 2h       │
    └────┴────────────────────┴──────────┴──────┴───────────┴──────────┴───────────┴─────────┴───────────┴──────────┴──────────┴──────────┘

    In this example, my-app has an id of 0 and another-app has an id of 1.

  2. Delete the process by its ID:

    Bash

    pm2 delete <id>

    Replace <id> with the actual ID of the process you want to delete. For example, to delete my-app:

    Bash

    pm2 delete 0
  3. To delete all processes:

    Bash

    pm2 delete all

Important Notes:

  • pm2 delete will both stop the process and remove it from PM2's process list.

  • If you want the changes (deletions) to persist across server reboots, you should run pm2 save after deleting processes:Bash

    pm2 save

    This saves the current PM2 process list so that PM2 will automatically restart only the saved applications when the server reboots.

  • If you're having issues with a deleted process still running after a reboot, you might need to clear PM2's dump file:Bash

    pm2 cleardump

    Then, run pm2 save again.

✅ 1. Chuẩn bị trước khi triển khai

Trên máy cục bộ (local):

  • Bạn đã có dự án Next.js hoàn chỉnh (next build không lỗi).

  • Dự án có thể chạy ở chế độ production (npm run buildnpm start hoặc next start).

Trên VPS:

  • Đã có VPS hoạt động (Ubuntu/CentOS...)

  • quyền root hoặc sudo

  • Đã trỏ tên miền về địa chỉ IP của VPS (qua A record trong DNS).

  • VPS đã cài Node.js, npm/yarn, và PM2 hoặc Docker nếu cần.


✅ 2. Copy mã nguồn lên VPS

Cách phổ biến:

  • Sử dụng scp, rsync hoặc git clone từ repo Git của bạn.

Ví dụ với scp:

scp -r ./my-next-app user@your-vps-ip:/home/user/

✅ 3. Cài đặt môi trường trên VPS

sudo apt update
sudo apt install nodejs npm
npm install -g pm2

Lưu ý: Nếu dùng nvm thì cài Node.js qua nvm install <version>


✅ 4. Cài đặt và build Next.js trên VPS

cd /home/user/my-next-app
npm install
npm run build

✅ 5. Chạy ứng dụng Next.js với PM2

pm2 start npm --name "my-next-app" -- start
pm2 save
pm2 startup

Ứng dụng sẽ chạy trên cổng mặc định 3000 (http://your-vps-ip:3000).


✅ 6. Cấu hình Reverse Proxy với Nginx để trỏ từ tên miền

6.1 Cài đặt Nginx

sudo apt install nginx

6.2 Tạo file cấu hình domain

sudo nano /etc/nginx/sites-available/mydomain.com

Nội dung file:

nginxCopyEditserver {
    listen 80;
    server_name mydomain.com www.mydomain.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

6.3 Kích hoạt cấu hình

sudo ln -s /etc/nginx/sites-available/mydomain.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

✅ 7. (Tuỳ chọn) Cài HTTPS với Let’s Encrypt

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d mydomain.com -d www.mydomain.com

✅ 8. Kiểm tra kết quả

  • Mở trình duyệt và truy cập: http://mydomain.com hoặc https://mydomain.com

  • Nếu bạn thấy ứng dụng Next.js chạy, bạn đã hoàn tất.


Nếu bạn cần hướng dẫn theo từng bước cho cấu hình cụ thể (ví dụ: CentOS, dùng Docker, hay CI/CD), cứ nói nhé!

4o

You said:

Gỡ bỏ docker sạch khỏi vps

ChatGPT said:

Để gỡ bỏ Docker hoàn toàn và sạch sẽ khỏi VPS (Ubuntu/Debian/CentOS), bạn có thể làm theo các bước sau. Hướng dẫn bên dưới áp dụng cho Ubuntu/Debian và có lưu ý cho CentOS.


✅ 1. Gỡ bỏ các gói Docker

Ubuntu/Debian:

sudo apt-get purge -y docker-engine docker docker.io docker-ce docker-ce-cli containerd runc

CentOS/RHEL:

sudo yum remove -y docker-engine docker docker.io docker-ce docker-ce-cli containerd runc

✅ 2. Xóa các file cấu hình, dữ liệu và container

sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

✅ 3. Xóa Docker CLI và thư viện liên quan nếu còn

sudo rm /usr/local/bin/docker
sudo rm /usr/local/bin/docker-compose
sudo rm -rf /etc/docker

✅ 4. Xoá service Docker khỏi hệ thống (nếu còn)

sudo systemctl stop docker
sudo systemctl disable docker
sudo systemctl daemon-reexec

✅ 5. Xóa file service nếu cần

sudo rm /etc/systemd/system/docker.service
sudo rm /etc/systemd/system/docker.socket
sudo systemctl daemon-reload

✅ 6. Xoá user group docker nếu muốn

sudo groupdel docker

✅ 7. Kiểm tra Docker đã bị xoá chưa

which docker
docker --version

Nếu không có output, nghĩa là Docker đã được gỡ bỏ hoàn toàn.


Nếu bạn cũng đang sử dụng Docker Compose, có thể gỡ bỏ bằng:

sudo rm /usr/local/bin/docker-compose

Nếu bạn gặp lỗi khi xóa hoặc Docker không cài từ apt/yum mà qua script, mình có thể hỗ trợ cụ thể hơn nếu bạn chia sẻ thêm cách cài đặt ban đầu.

You said:

dừng chạy PM2 để tôi git pull source và xây dựng lại

ChatGPT said:

Để dừng ứng dụng đang chạy bằng PM2, thực hiện lệnh sau:

pm2 stop <app_name_or_id>

Nếu bạn không nhớ tên app, dùng:

pm2 list

Ví dụ nếu app của bạn tên là my-next-app:

pm2 stop my-next-app

✅ Quy trình chuẩn để cập nhật source bằng git pull và build lại:

# 1. Dừng ứng dụng
pm2 stop my-next-app

# 2. Cập nhật source code
git pull origin main  # Hoặc nhánh khác nếu dùng

# 3. Cài lại các package (nếu cần)
npm install

# 4. Build lại project Next.js
npm run build

# 5. Chạy lại ứng dụng
pm2 start my-next-app

# 6. Kiểm tra lại PM2
pm2 list

Nếu bạn dùng lệnh pm2 start npm --name "my-next-app" -- start, thì bạn phải stop bằng tên "my-next-app" chứ không phải npm.


Gợi ý: Nếu bạn hay cập nhật bằng git pull, có thể dùng script bash hoặc pm2 reload để tự động hoá việc này. Mình có thể giúp viết nếu cần.

4o

Last updated

Was this helpful?