Docker autónomo: configuración del host en .env e imagen fijada

- Puertos, carpeta de mangas, PUID/PGID, URL pública y registro se
  configuran en .env (plantilla en .env.example); sin .env arranca con
  valores portables (0.0.0.0:3352, ./mangas).
- Publicar en 0.0.0.0 evita fallar al arrancar si la IP de la LAN o de
  Tailscale aún no existe; el acceso lo siguen limitando las reglas
  DOCKER-USER del host.
- Imagen base fijada a node:24.22.2-alpine3.24 (node:sqlite es experimental).
- ALLOW_SIGNUP=false por defecto (el primer usuario puede registrarse igual).
- Comprobación de permisos al arrancar con mensaje claro (chown / PUID).
- README: qué guardar y cómo mover el servicio a otro servidor.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-31 00:59:55 -06:00
co-authored by Claude Opus 5.5
parent 73fc1d5849
commit af90d34c95
8 changed files with 93 additions and 19 deletions
+14 -11
View File
@@ -1,30 +1,33 @@
# Todo lo que depende de la máquina va en .env (ver .env.example).
# Sin .env también arranca: puerto 3352 en todas las interfaces, descargas en ./mangas.
services:
manga-reader:
build: .
image: manga-reader:local
container_name: manga-reader
restart: unless-stopped
# Dueño de ./data y de la carpeta de mangas en el host (id -u / id -g).
user: "${PUID:-1000}:${PGID:-1000}"
environment:
- TZ=America/El_Salvador
- TZ=${TZ:-America/El_Salvador}
- PORT=3352
- DATA_DIR=/app/data
- MANGA_DIR=/mangas
# Cada cuántas horas se buscan capítulos nuevos de los mangas seguidos.
- CHECK_INTERVAL_HOURS=${CHECK_INTERVAL_HOURS:-3}
# URL con la que se abre la web desde las notificaciones.
- PUBLIC_URL=${PUBLIC_URL:-http://192.168.1.141:3352}
# Pon "false" cuando ya hayas creado las cuentas que necesites.
# (Si no hay ningún usuario, el primero siempre puede registrarse.)
- ALLOW_SIGNUP=${ALLOW_SIGNUP:-true}
- PUBLIC_URL=${PUBLIC_URL:-http://localhost:3352}
# Registro de cuentas nuevas. Con la base vacía el primer usuario siempre puede registrarse.
- ALLOW_SIGNUP=${ALLOW_SIGNUP:-false}
volumes:
# SQLite con usuarios, sesiones e historial de lectura.
# SQLite con usuarios, sesiones, historial, estadísticas y clave del proxy de imágenes.
- ./data:/app/data
# Mangas descargados: <Título>/Capitulo NNNN.cbz + cover.jpg
- /zdata/media/mangas:/mangas
- ${MANGA_DIR_HOST:-./mangas}:/mangas
ports:
# Local del servidor, LAN y Tailscale.
- "127.0.0.1:3352:3352"
- "192.168.1.141:3352:3352"
- "${IP_TAILSCALE:-100.125.134.51}:3352:3352"
# 0.0.0.0 no depende de que la IP de la LAN o de Tailscale existan al arrancar.
# Para limitarlo a una interfaz: BIND_IP=192.168.1.141 en .env.
- "${BIND_IP:-0.0.0.0}:${HOST_PORT:-3352}:3352"
read_only: true
tmpfs:
- /tmp