ติดตั้ง 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 เริ่มต้นที่ตั้งค่ามาพร้อม:
| ข้อมูล | ค่า |
|---|---|
| admin@example.com | |
| 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 เพียงไม่กี่คลิก