Quay lại danh sách
Tin tức công nghệ

Hướng dẫn chi tiết: Host nhiều website trên 1 VPS với Docker và Nginx Proxy Manager

17 tháng 5, 2026

Giới thiệu về mô hình hosting nhiều website trên một VPS

Trong môi trường kinh doanh hiện đại, việc quản lý nhiều website trên cùng một máy chủ là nhu cầu phổ biến của các doanh nghiệp vừa và nhỏ. Tuy nhiên, phương pháp truyền thống thường phức tạp, tốn kém và khó bảo trì. Bài viết này sẽ giới thiệu một giải pháp tối ưu: sử dụng Docker kết hợp với Nginx Proxy Manager để tạo ra một hệ thống hosting linh hoạt, bảo mật và dễ quản lý.

Tại sao nên sử dụng Docker và Nginx Proxy Manager?

Docker cung cấp môi trường container hóa, cho phép chạy nhiều ứng dụng độc lập trên cùng một hệ điều hành. Mỗi website sẽ được đóng gói trong một container riêng biệt, đảm bảo tính cô lập về môi trường và tài nguyên. Nginx Proxy Manager đóng vai trò như một reverse proxy thông minh, giúp định tuyến lưu lượng truy cập đến đúng container dựa trên tên miền.

Lợi ích chính của giải pháp này

  • Tối ưu chi phí: Chỉ cần một VPS để host nhiều website, giảm đáng kể chi phí thuê máy chủ
  • Dễ dàng quản lý: Giao diện web trực quan của Nginx Proxy Manager giúp cấu hình SSL, proxy và các rule định tuyến một cách đơn giản
  • Tính bảo mật cao: Mỗi website chạy trong container riêng, hạn chế rủi ro lây nhiễm chéo
  • Khả năng mở rộng: Dễ dàng thêm website mới mà không ảnh hưởng đến các website hiện có
  • Tự động hóa SSL: Hỗ trợ cấp và gia hạn chứng chỉ SSL tự động với Let's Encrypt

Chuẩn bị môi trường VPS

Trước khi bắt đầu triển khai, bạn cần chuẩn bị một VPS với các thông số kỹ thuật phù hợp. Dưới đây là các yêu cầu tối thiểu:

  • Hệ điều hành: Ubuntu 20.04 LTS trở lên hoặc CentOS 8
  • RAM: Tối thiểu 2GB (khuyến nghị 4GB cho nhiều website)
  • CPU: 2 vCPU trở lên
  • Ổ cứng: 20GB trống
  • Quyền root hoặc user có sudo privilege

Cài đặt Docker và Docker Compose

Đầu tiên, cập nhật hệ thống và cài đặt các gói cần thiết:

sudo apt update
sudo apt upgrade -y
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y

Thêm repository Docker chính thức:

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"

Cài đặt Docker và Docker Compose:

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io -y
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Triển khai Nginx Proxy Manager

Nginx Proxy Manager là một công cụ quản lý proxy với giao diện web trực quan. Chúng ta sẽ triển khai nó thông qua Docker Compose.

Tạo cấu trúc thư mục và file docker-compose.yml

Tạo thư mục cho dự án:

mkdir ~/nginx-proxy-manager
cd ~/nginx-proxy-manager

Tạo file docker-compose.yml với nội dung sau:

version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    environment:
      DB_SQLITE_FILE: "/data/database.sqlite"
      DISABLE_IPV6: 'true'

Khởi động Nginx Proxy Manager

Chạy lệnh sau để khởi động container:

docker-compose up -d

Kiểm tra trạng thái container:

docker-compose ps

Truy cập giao diện quản lý tại http://your-server-ip:81 với thông tin đăng nhập mặc định:

Cấu hình Nginx Proxy Manager

Sau khi đăng nhập, bạn cần thay đổi mật khẩu mặc định và cấu hình các thiết lập cơ bản.

Thiết lập SSL Certificate

Nginx Proxy Manager hỗ trợ cấp chứng chỉ SSL tự động thông qua Let's Encrypt:

  1. Vào mục "SSL Certificates"
  2. Chọn "Add SSL Certificate"
  3. Chọn "Let's Encrypt"
  4. Nhập tên miền cần cấp chứng chỉ
  5. Nhập email để nhận thông báo gia hạn
  6. Chọn "Use a DNS Challenge" nếu cần
  7. Lưu cấu hình

Cấu hình Proxy Host

Để thêm một website mới, thực hiện các bước sau:

  1. Vào mục "Proxy Hosts"
  2. Chọn "Add Proxy Host"
  3. Nhập thông tin domain name
  4. Nhập IP và port của container chứa website
  5. Bật SSL và chọn chứng chỉ đã tạo
  6. Lưu cấu hình

Triển khai website với Docker

Giả sử bạn muốn host một website WordPress và một ứng dụng Node.js trên cùng VPS.

Triển khai WordPress với Docker Compose

Tạo thư mục cho WordPress:

mkdir ~/wordpress-site
cd ~/wordpress-site

Tạo file docker-compose.yml:

version: '3.8'
services:
  db:
    image: mysql:8.0
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: your_root_password
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress_password
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - "8080:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress_password
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wp_data:/var/www/html
volumes:
  db_data:
  wp_data:

Khởi động WordPress:

docker-compose up -d

Triển khai ứng dụng Node.js

Tạo thư mục cho ứng dụng Node.js:

mkdir ~/nodejs-app
cd ~/nodejs-app

Tạo file Dockerfile:

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

Tạo file docker-compose.yml:

version: '3.8'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    restart: always

Kết nối website với Nginx Proxy Manager

Sau khi các container website đã chạy, bạn cần cấu hình Nginx Proxy Manager để định tuyến lưu lượng truy cập.

Cấu hình cho WordPress

  1. Trong Nginx Proxy Manager, thêm Proxy Host mới
  2. Domain Names: wordpress.yourdomain.com
  3. Forward Hostname/IP: IP của VPS
  4. Forward Port: 8080
  5. Bật SSL và chọn chứng chỉ phù hợp

Cấu hình cho Node.js App

  1. Thêm Proxy Host mới
  2. Domain Names: app.yourdomain.com
  3. Forward Hostname/IP: IP của VPS
  4. Forward Port: 3000
  5. Bật SSL và chọn chứng chỉ

Quản lý và bảo trì hệ thống

Để đảm bảo hệ thống hoạt động ổn định, cần thực hiện các công việc bảo trì định kỳ.

Monitoring và logging

Sử dụng các công cụ sau để giám sát hệ thống:

  • Docker logs: docker-compose logs -f
  • Resource monitoring: docker stats
  • Portainer: Giao diện quản lý Docker trực quan
  • Prometheus + Grafana: Giám sát chuyên sâu

Backup và recovery

Tạo script backup tự động:

#!/bin/bash
BACKUP_DIR="/backup/docker"
DATE=$(date +%Y%m%d_%H%M%S)

# Backup Nginx Proxy Manager data
docker run --rm --volumes-from nginx-proxy-manager_app_1 -v $BACKUP_DIR:/backup ubuntu tar cvf /backup/npm_$DATE.tar /data /etc/letsencrypt

# Backup WordPress data
docker run --rm --volumes-from wordpress-site_wordpress_1 -v $BACKUP_DIR:/backup ubuntu tar cvf /backup/wp_$DATE.tar /var/www/html

# Backup databases
docker exec wordpress-site_db_1 mysqldump -u root -p'your_root_password' --all-databases > $BACKUP_DIR/db_$DATE.sql

Security best practices

  • Sử dụng mật khẩu mạnh cho tất cả tài khoản
  • Cập nhật Docker images thường xuyên
  • Giới hạn resource cho mỗi container
  • Sử dụng network isolation
  • Thiết lập firewall (UFW hoặc iptables)

Tối ưu hiệu năng

Để đảm bảo hiệu năng tốt nhất cho nhiều website, cần tối ưu các yếu tố sau:

Tối ưu Nginx configuration

Thêm các directive tối ưu trong Nginx Proxy Manager:

# Thêm vào Advanced tab của Proxy Host
client_max_body_size 100M;
proxy_buffering off;
proxy_buffer_size 16k;
proxy_busy_buffers_size 24k;
proxy_buffers 64 4k;

Tối ưu Docker resource

Giới hạn resource cho container trong docker-compose.yml:

services:
  wordpress:
    deploy:
      resources:
        limits:
          cpus: '1'
          memory: 1G
        reservations:
          cpus: '0.5'
          memory: 512M

Xử lý sự cố thường gặp

Website không truy cập được

  • Kiểm tra trạng thái container: docker-compose ps
  • Kiểm tra logs: docker-compose logs
  • Kiểm tra cấu hình Nginx Proxy Manager
  • Kiểm tra DNS records

SSL certificate errors

  • Kiểm tra tính hợp lệ của domain
  • Đảm bảo port 80 và 443 mở
  • Kiểm tra rate limit của Let's Encrypt
  • Renew chứng chỉ thủ công nếu cần

Kết luận

Việc sử dụng Docker kết hợp với Nginx Proxy Manager để host nhiều website trên một VPS mang lại nhiều lợi ích thiết thực cho doanh nghiệp. Giải pháp này không chỉ tiết kiệm chi phí mà còn đơn giản hóa quy trình quản lý, nâng cao bảo mật và dễ dàng mở rộng. Với hướng dẫn chi tiết trong bài viết, bạn có thể tự tin triển khai hệ thống hosting chuyên nghiệp cho doanh nghiệp của mình.

Hãy bắt đầu với một website đơn giản, làm quen với quy trình, sau đó mở rộng dần dần. Quan trọng nhất là luôn thực hiện backup định kỳ và theo dõi hiệu năng hệ thống để đảm bảo trải nghiệm tốt nhất cho người dùng.