307 words
2 minutes
Docker Swarm WordPress Deployment
Docker Swarm WordPress Deployment Guide
This guide provides a fully functional Docker Swarm setup for WordPress with MySQL and phpMyAdmin, including resource limits, persistent storage, and deployment steps.
🚀 Why Use Docker Swarm?
Docker Swarm offers several advantages for deploying WordPress:
- Limit resource usage: Set CPU and memory limits for containers to prevent crashes.
- Simplify deployment: Easily scale across multiple servers.
- Enhance security: Encrypted networking and role-based access control.
With Swarm, we achieve a stable, scalable, and efficient environment for WordPress hosting.
🛠 Requirements for WordPress Deployment with Docker Swarm
1. Install Docker
curl -O https://kingtam.win/usr/uploads/script/install-docker.sh && chmod +x install-docker.sh && ./install-docker.sh2. Initialize Docker Swarm
docker swarm init3. Prepare a Docker Compose File
WordPress Service
wordpress:
image: wordpress:php7.4
container_name: wordpress
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wl-wordpress-user
WORDPRESS_DB_PASSWORD: wladmin@123
WORDPRESS_DB_NAME: wlwordpressdb
volumes:
- /opt/www/wordpress:/var/www/html
- /opt/www/docker-compose/custom.ini:/usr/local/etc/php/conf.d/custom.ini
deploy:
replicas: 1
resources:
limits:
memory: 1024M
cpus: "0.5"
reservations:
memory: 512M
cpus: "0.25"🔍 Explanation
- Uses WordPress with PHP 7.4
- Exposes port 8080 on host
- Connects to MySQL
dbcontainer - Persists WordPress files and PHP config
Example custom.ini
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 300
max_input_time = 300📄 Full Docker Compose Configuration
services:
wordpress:
image: wordpress:php5.6
container_name: wordpress
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wl-wordpress-user
WORDPRESS_DB_PASSWORD: wladmin@123
WORDPRESS_DB_NAME: wlwordpressdb
volumes:
- /opt/www/wordpress:/var/www/html
- /opt/www/docker-compose/custom.ini:/usr/local/etc/php/conf.d/custom.ini
deploy:
replicas: 1
resources:
limits:
memory: 1024M
cpus: "0.5"
reservations:
memory: 512M
cpus: "0.25"
db:
image: mysql:8.0
container_name: wordpress_db
environment:
MYSQL_ROOT_PASSWORD: wladmin@123+
MYSQL_DATABASE: wlwordpressdb
MYSQL_USER: wl-wordpress-user
MYSQL_PASSWORD: wladmin@123
volumes:
- /opt/www/mysql:/var/lib/mysql
deploy:
replicas: 1
resources:
limits:
memory: 1024M
cpus: "1.0"
reservations:
memory: 512M
cpus: "0.5"
phpmyadmin:
image: phpmyadmin:latest
container_name: phpmyadmin
ports:
- "8081:80"
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: wladmin@123+
UPLOAD_LIMIT: 100M
MEMORY_LIMIT: 512M
MAX_EXECUTION_TIME: 600
depends_on:
- db
deploy:
replicas: 1
resources:
limits:
memory: 128M
cpus: "0.2"
reservations:
memory: 64M
cpus: "0.1"🔧 Post-Setup Tasks
4. Fix wp-content Folder Permissions
chown -R www-data:www-data wp-content5. Deploy the Stack
docker stack deploy -c docker-compose.yml wordpress_stack6. Check Running Services
docker stack services wordpress_stack7. Remove the Stack
docker stack rm wordpress_stack Docker Swarm WordPress Deployment
https://fuwari.vercel.app/posts/deocker/