307 words
2 minutes
Docker Swarm WordPress Deployment
2025-05-27
No Tags

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.sh

2. Initialize Docker Swarm#

docker swarm init

3. 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 db container
  • 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-content

5. Deploy the Stack#

docker stack deploy -c docker-compose.yml wordpress_stack

6. Check Running Services#

docker stack services wordpress_stack

7. Remove the Stack#

docker stack rm wordpress_stack
Docker Swarm WordPress Deployment
https://fuwari.vercel.app/posts/deocker/
Author
Documentation Server
Published at
2025-05-27
License
CC BY-NC-SA 4.0