Wordpress + Traefik
Requerimientos previos
- Docker instalado
- Instancia de Traefik instalada y corriendo
- Red de Docker creada para conectar contenedor con Traefik
- Opcionalmente, usa un middleware configurado en Traefik:
- autodetectContenttype@file
- permissionsPolicy@file
- referrerPolicy@file
- cspWordpress@file
- secHeaders@file
Pasos
- Preparar dominio/subdominio de la instancia a configurar
- Crear archivos de configuración
- Cambiar valores de acuerdo a las necesidades de la instancia
- Levantar contenedor (docker composer up)
- Visitar aplicación y comprobar que esté funcionando correctamente
Configuración previa
Crear secretos en Docker para acceso a base de datos
# Creación de secretos para credenciales de base de datos
printf "palabra secreta 1" | docker secret create db_root_password -
printf "palabra secreta 2" | docker secret create db_user -
printf "palabra secreta 3" | docker secret create db_password -
Archivos de configuración
.env
INSTANCE_URL=ejemplo.com
DB_NAME=nombre_base_de_datos
DB_TABLE_PREFIX=prefijo_
UID=1000
GID=1000
GID_FILES=33
VOLUME_PATH=./web
compose.yaml
En la configuración de entrypoints
y certresolver
cambiar de acuerdo a los valores configurados en Traefik.
services:
bd:
image: mariadb:latest
container_name: bd
volumes:
- ${VOLUME_PATH}/wordpress-db:/var/lib/mysql
- ./entrypoint-initdb:/docker-entrypoint-initdb.d:ro
environment:
- UID=${UID}
- GID=${GID}
- MYSQL_ROOT_PASSWORD=/run/secrets/db_root_password
- MYSQL_USER=/run/secrets/db_user
- MYSQL_PASSWORD=/run/secrets/db_password
- MYSQL_DATABASE=${DB_NAME}
restart: unless-stopped
networks:
- traefik
wp:
image: wordpress:latest
container_name: wp
hostname: ${INSTANCE_URL}
volumes:
- ${VOLUME_PATH}/wordpress-files:/var/www/html
- ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
environment:
- UID=${UID}
- GID=${GID_FILES}
- WORDPRESS_DB_HOST=bd
- WORDPRESS_DB_NAME=${DB_NAME}
- WORDPRESS_TABLE_PREFIX=${DB_TABLE_PREFIX}
- WORDPRESS_DB_USER=/run/secrets/db_user
- WORDPRESS_DB_PASSWORD=/run/secrets/db_password
depends_on:
- bd
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.wordpress-http.rule=Host(`${INSTANCE_URL}`)"
- "traefik.http.routers.wordpress-http.entrypoints=http"
- "traefik.http.routers.wordpress-http.middlewares=http-to-https"
- "traefik.http.middlewares.http-to-https.redirectscheme.scheme=https"
- "traefik.http.middlewares.sslheader.headers.customrequestheaders.X-Forwarded-Proto=https"
- "traefik.http.routers.wordpress.rule=Host(`${INSTANCE_URL}`)"
- "traefik.http.routers.wordpress.entrypoints=https"
- "traefik.http.routers.wordpress.tls=true"
- "traefik.http.routers.wordpress.middlewares=sslheader@docker,permissionsPolicy@file,referrerPolicy@file,cspWordpress@file,secHeaders@file,autoDetectContentType@file"
- "traefik.http.routers.wordpress.tls.certresolver=tls"
- "traefik.http.services.wordpress.loadbalancer.server.port=80"
- "traefik.http.services.wordpress.loadbalancer.passHostHeader=true"
networks:
- traefik
networks:
traefik:
external: true
uploads.ini (opcional)
Configuración especial para PHP, para permitir subir archivos de hasta 100MB
file_uploads = On
memory_limit = 256M
upload_max_filesize = 100M
post_max_size = 100M
max_execution_time = 600