รัน WordPress ด้วย Docker Compose แบบ Production-Ready

การรัน WordPress ด้วย Docker Compose แบบ Production-Ready บน Cloud VPS ของ de.co.th ช่วยให้คุณจัดการเว็บไซต์ได้อย่างมีประสิทธิภาพ แยก Environment ชัดเจน และสามารถ Scale ได้ง่าย บทความนี้จะแนะนำวิธีติดตั้งทั้งหมดแบบ Step-by-Step

ทำไมต้อง Docker Compose กับ WordPress?

Docker Compose ช่วยให้คุณกำหนดและจัดการ Multi-Container Application ได้ในไฟล์เดียว สำหรับ WordPress หมายว่าการรัน WordPress Container, MySQL Database และ Reverse Proxy พร้อมกันอย่างเป็นระบบ ข้อดีคือสามารถ Replicate Environment ได้ทุกที่ ไม่ว่าจะเป็น Development, Staging หรือ Production

สิ่งที่ต้องเติยม

ก่อนเริ่มต้น คุณต้องมี Cloud VPS ของ de.co.th ที่ติดตั้ง Docker และ Docker Compose แล้ว หากยังไม่ได้ติดตั้ง สามารถใช้คำสั่งต่อไปนี้บน Ubuntu:

sudo apt update
sudo apt install -y docker.io docker-compose
sudo systemctl enable docker
sudo systemctl start docker

สร้างโครงสร้างโครเจกต์

สร้างโฟลเดอร์สำหรับโครเจกต์ WordPress ของคุณ:

mkdir -p /opt/wordpress-production
cd /opt/wordpress-production
mkdir -p nginx/conf.d ssl db_data wp_data

เขียน docker-compose.yml แบบ Production-Ready

สร้างไฟล์ docker-compose.yml ที่ประกอบด้วย WordPress, MariaDB, Nginx Reverse Proxy และ Redis สำหรับ Object Cache:

version: '3.8'

services:
  db:
    image: mariadb:10.11
    container_name: wp_mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wpuser
      MYSQL_PASSWORD: ${DB_PASSWORD}
    volumes:
      - ./db_data:/var/lib/mysql
    networks:
      - wp_network

  wordpress:
    image: wordpress:6-php8.2-fpm
    container_name: wp_app
    restart: always
    depends_on:
      - db
      - redis
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wpuser
      WORDPRESS_DB_PASSWORD: ${DB_PASSWORD}
    volumes:
      - ./wp_data:/var/www/html
    networks:
      - wp_network

  redis:
    image: redis:7-alpine
    container_name: wp_redis
    restart: always
    networks:
      - wp_network

  nginx:
    image: nginx:alpine
    container_name: wp_nginx
    restart: always
    depends_on:
      - wordpress
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./wp_data:/var/www/html
      - ./ssl:/etc/nginx/ssl
    networks:
      - wp_network

networks:
  wp_network:
    driver: bridge

ตั้งค่า Environment Variables

สร้างไฟล์ .env สำหรับเก็บรหัสฎานอย่างปลอดภัย:

cat > .env << 'EOF'
DB_ROOT_PASSWORD=your_strong_root_password_here
DB_PASSWORD=your_strong_db_password_here
EOF
chmod 600 .env

ตั้งค่า Nginx Configuration

สร้างไฟล์ Nginx Configuration สำหรับ WordPress:

cat > nginx/conf.d/wordpress.conf << 'NGINX'
server {
    listen 80;
    server_name yourdomain.com;
    root /var/www/html;
    index index.php;

    client_max_body_size 64M;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_pass wordpress:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
    }
}
NGINX

เริ่มรัน WordPress

เมื่อตั้งค่าทุกอย่างเสร็จแล้ว ให้รัน Docker Compose:

docker-compose up -d

# ตรวจสอบสถานะ Container
docker-compose ps

# ดู Logs
docker-compose logs -f

เพิ่ม SSL Certificate ด้วย Let's Encrypt

สำหรับ Production คุณควรใช้ SSL Certificate จาก Let's Encrypt ติดตั้ง Certbot และขอ SSL Certificate:

sudo apt install -y certbot
sudo certbot certonly --webroot -w /opt/wordpress-production/wp_data -d yourdomain.com

# คัดลอก Certificate ไปยังโฟลเดอร์ SSL
cp /etc/letsencrypt/live/yourdomain.com/fullchain.pem ssl/
cp /etc/letsencrypt/live/yourdomain.com/privkey.pem ssl/

ตั้งค่า Health Check และ Auto-Restart

เพิ่ม Health Check ใน docker-compose.yml เพื่อให้ Docker ตรวจสอบสถานะ Container อัตโนมัติ และ Restart หากมีปัญหา:

  wordpress:
    healthcheck:
      test: ["CMD", "php-fpm-healthcheck"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

สรุป

การรัน WordPress ด้วย Docker Compose แบบ Production-Ready บน Cloud VPS ของ de.co.th ใหข้อดีคืหลายแรง ทั้งการจัดการที่ง่าย การ Isolate แต่ละ Service และความสามารถในการ Scale อย่างมาก อย่าลืม Backup อัตโนมัติ ใช้ SSL Certificate และ Monitor สถานะ Container อย่างสม่ำเสมอ เพื่อให้เว็บไซต์ WordPress ของคุณทำงานได้อย่างเสถียรและปลอดภัย