การรัน 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 ของคุณทำงานได้อย่างเสถียรและปลอดภัย

