ติดตั้ง Nginx Proxy Manager ด้วย Docker Compose ฉบับสมบูรณ์

Nginx Proxy Manager (NPM) คือ Reverse Proxy ที่นิยมที่สุดสำหรับ Docker เพราะมี Web UI สวยงาม ตั้งค่าได้โดยไม่ต้องเขียน Config ไฟล์ รองรับ Let’s Encrypt SSL อัตโนมัติ และ Proxy แบบ Click-and-Go บทความนี้จะนำคุณติดตั้งและตั้งค่าเริ่มต้นจนพร้อมใช้งาน

ความต้องการเบื้องต้น

  • VPS หรือ Linux Server ที่ติดตั้ง Docker แล้ว
  • Domain Name ที่ชี้ A Record ไปยัง IP ของเซิร์ฟเวอร์แล้ว
  • Port 80 และ 443 เปิดอยู่ใน Firewall
  • ไม่มีเซอร์วิชอื่นใช้ Port 80/443 อยู่

สร้างไฟล์ docker-compose.yml

mkdir npm-stack && cd npm-stack

สร้างไฟล์ docker-compose.yml:

version: '3.8'

services:
  npm:
    image: jc21/nginx-proxy-manager:latest
    container_name: nginx-proxy-manager
    restart: unless-stopped
    ports:
      - "80:80"      # HTTP
      - "443:443"    # HTTPS
      - "81:81"      # NPM Admin UI
    volumes:
      - npm_data:/data
      - npm_letsencrypt:/etc/letsencrypt
    networks:
      - proxy_network

volumes:
  npm_data:
  npm_letsencrypt:

networks:
  proxy_network:
    external: false

รัน Nginx Proxy Manager

docker compose up -d
docker compose ps

หลังรันแล้ว เปิด Browser ไปที่ http://your-server-ip:81 เพื่อเข้าสู่ Admin UI

เข้าสู่ Admin UI ครั้งแรก

รหัส Login เริ่มต้นที่ตั้งค่ามาพร้อม:

ข้อมูล ค่า
Email [email protected]
Password changeme

ระบบจะขอเปลี่ยนชื่อ, อีเมล และรหัสทันทีเมื่อ Login ครั้งแรก ต้องเปลี่ยนทันที

โครงสร้างไฟล์สำหรับ Production

สำหรับ Production แนะนำให้สร้าง .env และใช้ External Network เพื่อเชื่อมต่อกับ Stack อื่น:

# สร้าง External Network ที่ Stack อื่นจะสามารถเชื่อมต่อได้
docker network create proxy_network

แล้วแก้ไข docker-compose.yml ของ NPM:

networks:
  proxy_network:
    external: true   # ← เปลี่ยนเป็น external: true

สั่งให้ Container อื่น (WordPress, Node.js หรือ API) เชื่อมต่อ Network เดียวกัน:

services:
  wordpress:
    image: wordpress:latest
    networks:
      - proxy_network   # เชื่อมต่อ Network เดียวกันกับ NPM

networks:
  proxy_network:
    external: true

หน้าต่างหลักใน Admin UI

เมนู หน้าที่
Proxy Hosts ตั้งค่า Domain เพื่อส่งต่อไปยัง Container
Redirections ตั้งค่า Redirect URL
SSL Certificates จัดการ SSL Certificate
Access Lists กำหนดสิทธิ์การเข้าถึง (IP Whitelist)
Users จัดการ Admin Users

สรุป

สิ่งที่ติดตั้ง รายละเอียด
NPM Container image: jc21/nginx-proxy-manager
Admin UI Port 81 — ผูกกับ Host
HTTP/HTTPS Ports 80 และ 443 — สำหรับ Traffic จริง
Volumes npm_data, npm_letsencrypt — เก็บ Config และ SSL
Network proxy_network — เชื่อมต่อ Container อื่น

บทความถัดไป เราจะเรียนรู้วิธีการตั้งค่า Proxy Host ใน NPM เพื่อเพิ่ม Domain และ HTTPS ให้กับ Container ของคุณด้วย Let’s Encrypt SSL เพียงไม่กี่คลิก