Ir al contenido principal

Readeck + 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

Pasos

  1. Preparar dominio/subdominio de la instancia a configurar
  2. Crear archivos de configuración
  3. Cambiar valores de acuerdo a las necesidades de la instancia
  4. Levantar contenedor (docker composer up)
  5. Visitar aplicación y comprobar que esté funcionando correctamente

Archivos de configuración

.env

INSTANCE_PORT=8000
INSTANCE_DOMAIN=ejemplo.com
VOLUME_PATH=/var/www/ejemplo.com
MAIL_HOST=smtp.ejemplo.com
MAIL_PORT=587
MAIL_USERNAME=ejemplo
MAIL_PASSWORD=xyz123
MAIL_ENCRYPTION=TLS
MAIL_FROM=ejemplo@ejemplo.com
MAIL_FROMNOREPLY=ejemplo@ejemplo.com

compose.yaml

En la configuración de entrypoints y certresolver cambiar de acuerdo a los valores configurados en Traefik.

services:
  readeck:
    image: codeberg.org/readeck/readeck:latest
    container_name: readeck
    restart: unless-stopped
    environment:
      - READECK_SERVER_HOST=0.0.0.0
      - READECK_SERVER_PORT=${INSTANCE_PORT}
      - READECK_SERVER_PREFIX=/
      - READECK_ALLOWED_HOSTS=${INSTANCE_DOMAIN}
      - READECK_PUBLIC_SHARE_TTL=2160
      - READECK_MAIL_HOST=${MAIL_HOST}
      - READECK_MAIL_PORT=${MAIL_PORT}
      - READECK_MAIL_USERNAME=${MAIL_USERNAME}
      - READECK_MAIL_PASSWORD=${MAIL_PASSWORD}
      - READECK_MAIL_ENCRYPTION=${MAIL_ENCRYPTION}
      - READECK_MAIL_FROM=${MAIL_FROM}
      - READECK_MAIL_FROMNOREPLY=${MAIL_FROMNOREPLY}
    volumes:
      - ${VOLUME_PATH}/data:/readeck
    networks:
      - traefik_network
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.readeck.rule=Host(`${INSTANCE_DOMAIN}`)"
      - "traefik.http.routers.readeck.entrypoints=https"
      - "traefik.http.routers.readeck.tls=true"
      - "traefik.http.routers.readeck.tls.certresolver=tls"
      - "traefik.http.routers.readeck.middlewares=autodetectContenttype@file"
      - "traefik.http.services.readeck.loadbalancer.server.port=${INSTANCE_PORT}"
      - "traefik.http.services.readeck.loadbalancer.passHostHeader=true"
    healthcheck:
      test: ["CMD", "/bin/readeck", "healthcheck", "-config", "config.toml"]
      interval: 60s
      timeout: 2s
      retries: 3
networks:
  traefik_network:
    external: true