Docker

ติดตั้ง 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 เริ่มต้นที่ตั้งค่ามาพร้อม:

ข้อมูลค่า
Emailadmin@example.com
Passwordchangeme

ระบบจะขอเปลี่ยนชื่อ, อีเมล และรหัสทันทีเมื่อ 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 Containerimage: jc21/nginx-proxy-manager
Admin UI Port81 — ผูกกับ Host
HTTP/HTTPS Ports80 และ 443 — สำหรับ Traffic จริง
Volumesnpm_data, npm_letsencrypt — เก็บ Config และ SSL
Networkproxy_network — เชื่อมต่อ Container อื่น

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