Ir al contenido principal

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

  1. Preparar dominio/subdominio de la instancia a configurar
  2. Crear secretos para credenciales de base de datos y correo
  3. Crear archivos de configuración
  4. Cambiar valores de acuerdo a las necesidades de la instancia
  5. Levantar el contenedor
  6. Visitar la aplicación y comprobar que esté funcionando correctamente

Configuración previa

Crear secretos en Docker para acceso a base de datos

Por

# documentar

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

Por

# documentar

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

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