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.inicomupload_max_filesize = 64Mepost_max_size = 64Me monte em/usr/local/etc/php/conf.d/uploads.inino serviçowordpress. - 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).