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
Por
# documentarPara 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
Por
# documentarPara 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
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