Bookstack + Traefik Requerimientos previos Docker instalado Instancia de Traefik instalada y corriendo Red de Docker creada para integrar contenedor con Traefik Requiere 2 middlewares configurados en Traefik: secHeaders@file autoDetectContentType@file Pasos Preparar dominio/subdominio de la instancia a configurar Crear secretos para credenciales de base de datos y correo Crear archivos de configuración Cambiar valores de acuerdo a las necesidades de la instancia Levantar el contenedor Visitar la aplicación y comprobar que esté funcionando correctamente Configuración previa Crear secretos en Docker para acceso a base de datos # Para usuario de base de datos (db_password) printf "palabra secreta" | docker secret create db_password - # Para usuario root (db_root_password) printf "palabra secreta" | docker secret create db_root_password - Crear secretos en Docker para acceso a SMTP # Para usuario SMTP (mail_password) printf "palabra secreta" | docker secret create mail_password - Archivos de configuración .env APP_KEY=base64:123456 APP_URL=https://ejemplo.com DB_DATABASE=bd_ejemplo DB_HOST=localhost DB_PORT=7076 INSTANCE_URL=ejemplo.com MAIL_DRIVER=sendmail MAIL_FROM_NAME=(Remitente de correo) MAIL_FROM=usuario@ejemplo.com MAIL_HOST=smtp.ejemplo.com MAIL_PORT=465 MAIL_USERNAME=mailer@ejemplo.com MAIL_ENCRYPTION=ssl PGID=1000 PUID=1000 TZ=America/Guatemala VOLUME_PATH=/var/www/ejemplo.com compose.yaml En la configuración de entrypoints y certresolver cambiar de acuerdo a los valores configurados en Traefik. services: bookstack_db: image: mariadb container_name: bookstack_db environment: - MYSQL_DATABASE=${DB_DATABASE} - MYSQL_USER=/run/secrets/db_user - MYSQL_PASSWORD=/run/secrets/db_password - MYSQL_ROOT_PASSWORD=/run/secrets/db_root_password volumes: - ${VOLUME_PATH}/bookstack-db:/var/lib/mysql - ${VOLUME_PATH}/entrypoint-initdb:/docker-entrypoint-initdb.d:ro - ./my.cnf:/etc/mysql/my.cnf networks: - traefik_network restart: unless-stopped bookstack_app: image: lscr.io/linuxserver/bookstack:latest container_name: bookstack_app depends_on: - bookstack_db environment: - PUID=1001 - PGID=1001 - TZ=${TZ} - APP_URL=${APP_URL} - APP_KEY=${APP_KEY} - APP_DEBUG=false - APP_THEME=comunidad - DB_HOST=bookstack-db - DB_DATABASE=${DB_DATABASE} - DB_USERNAME=/run/secrets/db_user - DB_PASSWORD=/run/secrets/db_password - MAIL_DRIVER=${MAIL_DRIVER} - MAIL_FROM_NAME=${MAIL_FROM_NAME} - MAIL_FROM=${MAIL_FROM} - MAIL_HOST=${MAIL_HOST} - MAIL_PORT=${MAIL_PORT} - MAIL_USERNAME=${MAIL_USERNAME} - MAIL_PASSWORD=/run/secrets/mail_password - MAIL_ENCRYPTION=${MAIL_ENCRYPTION} labels: - "traefik.enable=true" - "traefik.http.routers.nombre_interno_instancia.rule=Host(`${INSTANCE_URL}`)" - "traefik.http.routers.nombre_interno_instancia.entrypoints=https" - "traefik.http.routers.nombre_interno_instancia.tls=true" - "traefik.http.routers.nombre_interno_instancia.tls.certresolver=tls" - "traefik.http.routers.nombre_interno_instancia.middlewares=secHeaders@file,autodetectContenttype@file" - "traefik.http.services.nombre_interno_instancia.loadbalancer.server.port=80" - "traefik.http.services.nombre_interno_instancia.loadbalancer.passHostHeader=true" volumes: - ${VOLUME_PATH}/bookstack-files:/config restart: unless-stopped ports: - 7075:80 networks: - traefik_network networks: traefik_network: external: true my.conf (opcional) Configuración adicional para reducir el uso de RAM de parte de la base de datos MariaDB [client-server] socket = /run/mysqld/mysqld.sock !includedir /etc/mysql/mariadb.conf.d/ !includedir /etc/mysql/conf.d/ max_connections = 10 connect_timeout = 5 wait_timeout = 600 max_allowed_packet = 16M thread_cache_size = 4M sort_buffer_size = 32K bulk_insert_buffer_size = 0 tmp_table_size = 1K max_heap_table_size = 16K query_cache_limit = 128K query_cache_size = 512K innodb_buffer_pool_size = 10M innodb_log_buffer_size = 512K