Docker กับ Plesk ใช้ร่วมกันได้อย่างไร?

Docker ใน Plesk คืออะไร?

Plesk รองรับ Docker ผ่าน Docker Manager Extension ช่วยให้ผู้ดูแลระบบสามารถจัดการ Docker Container ผ่านหน้าเว็บได้โดยไม่ต้องสั่ง command ใน Terminal

ติดตั้ง Docker บน Server ที่ใช้ Plesk

# ติดตั้ง Docker Engine
curl -fsSL https://get.docker.com | sh

# เพิ่ม user plesk เข้า docker group
usermod -aG docker plesk

จากนั้นไปติดตั้ง Docker Manager Extension ผ่าน Plesk Marketplace (เมนู Extensions)

3 วิธีใช้ Docker ร่วมกับ Plesk

1. Docker Container หัน Port ผ่าน Nginx Reverse Proxy ของ Plesk

Plesk มี Nginx Reverse Proxy อยู่แล้ว สามารถให้ส่ง Traffic มายัง Container ได้โดยต๋างหาก Docker Container:

docker run -d \
  --name myapp \
  -p 3000:3000 \
  --restart unless-stopped \
  myapp:latest

จากนั้นตั้งค่า Plesk Nginx Additional Directives ใน Domain Settings:

location / {
    proxy_pass http://localhost:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

2. Docker Container สำหรับ Service ส่วนตัว (Internal)

เหมาะสำหรับ Redis, Elasticsearch, RabbitMQ ที่เว็บไซต์ใช้ภายใน:

docker run -d \
  --name redis \
  --network host \
  redis:7-alpine redis-server --requirepass yourpassword

3. ใช้ Docker สำหรับ Dev/Test Environment

รันตัวอย่างเป็น Staging Environment บน Port อื่นด้วย Docker Compose

Plesk Docker Manager Extension

หลังติดตั้ง Extension แล้ว ใช้งานได้ดังนี้:

  • Pull Image จาก Docker Hub ผ่าน GUI
  • Start/Stop/Remove Container
  • ดู Logs ของ Container
  • Map Port และ Volume
  • ตั้งค่า Environment Variables

SSL สำหรับ Docker Container ผ่าน Plesk

Plesk จัดการ SSL Certificate ให้อัตโนมัติผ่าน Let’s Encrypt ดังนั้นเพียงตั้งค่า Reverse Proxy ใน Plesk ไปยัง Container พอ:

  1. เพิ่ม Domain ใน Plesk
  2. ติดตั้ง SSL Let’s Encrypt (ฟรี)
  3. ตั้ง Nginx Additional Directives ให้ชี้เข้า Container Port

ตัวอย่าง: Node.js App บน Docker + Plesk

# Start Node.js App Container
docker run -d \
  --name nodejs_app \
  --restart unless-stopped \
  -p 4000:4000 \
  -e NODE_ENV=production \
  mynodejs:latest

# Nginx Config ใน Plesk (Additional Nginx Directives)
location / {
    proxy_pass http://127.0.0.1:4000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

Docker Compose ร่วมกับ Plesk

version: '3.8'
services:
  app:
    image: myapp:latest
    restart: unless-stopped
    ports:
      - "127.0.0.1:3000:3000"  # เปิดเฉพาะ localhost
    environment:
      APP_ENV: production

  worker:
    image: myapp:latest
    command: php artisan queue:work
    restart: unless-stopped

แนะนำให้ผูก Port เป็น 127.0.0.1:port เพื่อไม่ให้เข้าถึงจากภายนอกโดยตรง

Best Practices

  • ผูก Container Ports ไว้กับ 127.0.0.1 ไม่ใช่ 0.0.0.0
  • ให้ Plesk Nginx จัดการ SSL แทนการติดตั้ง SSL ใน Container
  • ไม่รัน Nginx/Apache ใน Container ถ้า Plesk จัดการ Web Server อยู่แล้ว
  • ใช้ Firewall ปิด Port ที่ไม่จำเป็น