Ir al contenido principal

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