Saltar a contenido

Imagen de Docker

Registros y etiquetas

La imagen se construye para linux/amd64 y linux/arm64 y se publica en:

  • ghcr.io/koval01/telegram-me
  • docker.io/koval01/telegram-me
Etiqueta Apunta a
latest la última build de main
sha-<12 hex> un commit exacto: úsala para fijar la versión y para revertir
2.0.0, 2.0, 2 versiones publicadas

Cada imagen incluye un SBOM y una atestación de procedencia de la build, y etiquetas OCI con la versión y el commit.

Ejecutar

docker run -d --name telegram-me \
  -p 8000:3000 \
  --restart unless-stopped \
  --read-only --tmpfs /tmp \
  --cap-drop ALL --security-opt no-new-privileges \
  -e REDIS_URL=redis://cache.internal:6379/0 \
  ghcr.io/koval01/telegram-me:2.0.0

Las opciones del medio son un refuerzo de seguridad opcional; la imagen está pensada para funcionar con todas ellas.

Qué hay dentro

  • Python 3.14 sobre Debian (slim), las dependencias fijadas en /app/.venv y nada más: ni compiladores, ni curl, ni pip.
  • Esta documentación en /app/docs, compilada para /docs/ y servida por la aplicación (DOCS_SITE_DIR), unos 8 MB.
  • Se ejecuta como el usuario sin privilegios app, indicado por número (USER 10001:10001), para que el runtime pueda comprobar que no es root.
  • ENTRYPOINT ["telegram-me"], CMD ["serve"]: el servidor es el PID 1 y recibe SIGTERM directamente, así que docker stop termina en mucho menos de un segundo una vez completadas las solicitudes en curso.
  • HEALTHCHECK llama a /healthz cada 30 s con el Python incluido.
  • Puerto 3000.

Comandos

docker run --rm ghcr.io/koval01/telegram-me version          # print the version
docker run -d ... ghcr.io/koval01/telegram-me worker         # feed refresher only

Recursos

Medido en 2.0.0 (arm64), consulta Rendimiento:

WEB_CONCURRENCY En reposo Tras tráfico ligero
1 ~110 MB (proceso del servidor + un worker) ~145 MB
2 ~180 MB ~225 MB

Calcula aproximadamente 40 MB para el proceso del servidor y 70–110 MB por worker, más hasta MEMORY_CACHE_MAX_MB por worker para la caché dentro del proceso (un worker con tráfico intenso sin Redis se mantiene en torno a 170 MB con el valor por defecto de 64; con Redis solo guarda las entradas de los últimos MEMORY_CACHE_MAX_TTL segundos). La memoria liberada se devuelve al sistema cada MEMORY_TRIM_INTERVAL segundos. WORKERS_MAX_RSS_MB añade una red de seguridad. WEB_CONCURRENCY toma por defecto el número de CPU disponibles para el contenedor (máx. 4); defínelo explícitamente cuando limites las CPU.

Construcción

docker build -t telegram-me:dev .
docker build --build-arg PYTHON_VERSION=3.13 -t telegram-me:py313 .

La build usa montajes de caché de BuildKit para uv; las dependencias son una capa aparte, así que los cambios que solo afectan al código se reconstruyen en segundos.