WordPress na VPS com Docker Compose (MariaDB e Nginx com HTTPS)

Matheus Alexandre

Matheus Alexandre

Última atualização em Sep 29, 2026

Este guia usa Docker Compose com Traefik na frente para o HTTPS automático. Pré-requisitos: Docker instalado, domínio apontado e portas 80/443 liberadas.

1. Arquivos

mkdir -p /opt/wordpress && cd /opt/wordpress
nano docker-compose.yml
services:
  traefik:
    image: traefik:v3
    command:
      - --providers.docker=true
      - --providers.docker.exposedbydefault=false
      - --entrypoints.web.address=:80
      - --entrypoints.websecure.address=:443
      - --entrypoints.web.http.redirections.entrypoint.to=websecure
      - --certificatesresolvers.le.acme.tlschallenge=true
      - --certificatesresolvers.le.acme.email=seu@email.com
      - --certificatesresolvers.le.acme.storage=/letsencrypt/acme.json
    ports: ["80:80", "443:443"]
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - traefik_le:/letsencrypt
    restart: unless-stopped

  db:
    image: mariadb:11
    environment:
      MARIADB_DATABASE: wordpress
      MARIADB_USER: wp
      MARIADB_PASSWORD: TROQUE-ESTA-SENHA
      MARIADB_ROOT_PASSWORD: TROQUE-ESTA-TAMBEM
    volumes: ["db_data:/var/lib/mysql"]
    restart: unless-stopped

  wordpress:
    image: wordpress:php8.3-apache
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wp
      WORDPRESS_DB_PASSWORD: TROQUE-ESTA-SENHA
    volumes: ["wp_data:/var/www/html"]
    labels:
      - traefik.enable=true
      - traefik.http.routers.wp.rule=Host(`seudominio.com`) || Host(`www.seudominio.com`)
      - traefik.http.routers.wp.entrypoints=websecure
      - traefik.http.routers.wp.tls.certresolver=le
      - traefik.http.services.wp.loadbalancer.server.port=80
    depends_on: [db]
    restart: unless-stopped

volumes:
  db_data:
  wp_data:
  traefik_le:

2. Subir

docker compose up -d
docker compose logs -f traefik    # aguarde o certificado

Abra https://seudominio.com e conclua o assistente do WordPress.

3. Ajustes que valem a pena

  • Upload maior: crie uploads.ini com upload_max_filesize = 64M e post_max_size = 64M e monte em /usr/local/etc/php/conf.d/uploads.ini no serviço wordpress.
  • Cache: plugin de cache (LiteSpeed Cache não; use WP Super Cache/W3TC) ou Cloudflare na frente.
  • Mídia no Object Storage: plugin de offload apontando para o bucket (guia).
  • E-mail: o WordPress envia por PHP mail(), que não funciona sem SMTP. Use um plugin SMTP com um provedor (a porta 25 é bloqueada).

4. Backup

Os dados estão nos volumes db_data e wp_data:

docker compose exec db mariadb-dump -u root -pTROQUE-ESTA-TAMBEM wordpress > /root/wp-$(date +%F).sql

Envie o dump e a pasta /var/lib/docker/volumes/wordpress_wp_data para o bucket com o backup automático.

5. Atualizar

Plugins e temas: pelo painel do WordPress. Imagem do PHP/WordPress: docker compose pull && docker compose up -d (faça um snapshot antes).