Chào mừng quay trở lại! 👋

Ở bài trước, chúng ta đã thống nhất với nhau rằng Nginx Proxy Manager (NPM) là công cụ "chân ái" để quản lý Reverse Proxy. Hôm nay, mình sẽ giúp bạn cài đặt nó lên server.

Đừng lo lắng nếu bạn không phải là dân IT chuyên nghiệp. Phương châm của mình là: "Copy, Paste và Run".


1. Những thứ cần chuẩn bị

Trước khi bắt đầu, hãy đảm bảo bạn đã có:

  1. Một chiếc VPS (máy chủ ảo): Cấu hình thấp thôi cũng được (1 Core, 1GB RAM là dư sức chạy). Ubuntu hay Debian đều ổn.
  2. Đã mở port (Mở cổng mạng): Hãy chắc chắn tường lửa (Firewall) của VPS đã mở 3 cổng sau:
    • 80 (Cho HTTP)
    • 443 (Cho HTTPS)
    • 81 (Cho trang quản trị Admin của NPM)

Đã cài đặt Docker & Docker Compose: Đây là nền móng bắt buộc.

Mẹo nhỏ: Nếu chưa cài Docker, bạn chỉ cần chạy đúng một dòng lệnh thần thánh này trên Ubuntu:
curl -fsSL https://get.docker.com | sh

2. Tạo file cấu hình Docker Compose

Chúng ta sẽ không chạy những dòng lệnh dài ngoằng khó nhớ. Thay vào đó, chúng ta dùng một file docker-compose.yml để định nghĩa mọi thứ.

Ở đây, mình sẽ hướng dẫn bạn cài bản dùng Database riêng (MariaDB) thay vì dùng SQLite mặc định.
Tại sao? Vì SQLite dùng lâu dài dễ bị lỗi lock file nếu traffic cao, còn MariaDB thì "trâu bò" hơn nhiều. Setup một lần dùng cả đời.

Bước 1: Tạo thư mục chứa

Gõ lệnh này vào terminal để tạo thư mục gọn gàng:

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

Bước 2: Tạo file docker-compose.yml

Tạo file mới bằng trình chỉnh sửa nano:

nano docker-compose.yml

Sau đó, Copy toàn bộ nội dung bên dưới và Paste vào:

version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      # Port công khai cho web (HTTP/HTTPS)
      - '80:80'
      - '443:443'
      # Port để vào trang quản trị (Admin Dashboard)
      - '81:81'
    environment:
      # Cấu hình kết nối Database
      DB_MYSQL_HOST: "db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: "npm_password" # Bạn có thể đổi pass này nếu thích
      DB_MYSQL_NAME: "npm"
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    depends_on:
      - db

  db:
    image: 'jc21/mariadb-aria:latest'
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: 'npm_root_password' # Đổi pass root nếu cần
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: 'npm_password' # Phải trùng với pass ở trên
    volumes:
      - ./mysql:/var/lib/mysql
Lưu ý: Để lưu file trong nano, bạn bấm Ctrl + O -> Enter -> Ctrl + X.

3. Kích hoạt động cơ

Giờ là giây phút của sự thật. Hãy chạy lệnh sau để Docker tải về và khởi động mọi thứ:

Bash

docker-compose up -d

Giải thích một chút: -d có nghĩa là "Detached" (chạy ngầm). Bạn cứ để nó chạy, tắt terminal đi cũng không sao.

Đợi khoảng 1-2 phút cho nó tải và cài đặt Database. Bạn có thể kiểm tra xem nó sống hay chết bằng lệnh: docker-compose ps. Nếu thấy trạng thái Up màu xanh là ngon rồi! ✅


4. Đăng nhập lần đầu tiên

Mọi thứ đã sẵn sàng. Giờ bạn hãy mở trình duyệt web lên và truy cập vào địa chỉ:

http://<IP-VPS-CUA-BAN>:81

Bạn sẽ thấy màn hình đăng nhập hiện ra. Hãy dùng tài khoản mặc định này:

Sau khi đăng nhập thành công, NPM sẽ bắt bạn đổi ngay thông tin admin (Email và Password mới). Làm ơn đổi ngay và luôn nhé, đừng lười, hacker thích mấy ông để pass mặc định lắm đấy. 💀


5. Kết luận

Chúc mừng! 🎉 Bạn đã sở hữu một hệ thống Reverse Proxy mạnh mẽ với giao diện quản trị trực quan.

Từ giờ, cổng 80443 trên server đã thuộc quyền kiểm soát của Nginx Proxy Manager. Bất cứ request nào đi vào server sẽ do "anh đại" này điều phối.

Nhưng khoan, cài xong rồi để đó ngắm à? Tất nhiên là không. Ở bài tiếp theo, chúng ta sẽ đi vào phần thú vị nhất: Trỏ tên miền thực tế và lấy chứng chỉ SSL (ổ khóa xanh) tự động.

👉 Bài tập về nhà: Hãy đảm bảo bạn truy cập được vào trang Admin (port 81) và đổi mật khẩu thành công. Hẹn gặp bạn ở Phần 3!