docker-compose.yml
Todo vuzon se despliega con un único archivo Compose. Esta página explica cada bloque del archivo, qué puedes ajustar y qué conviene dejar como está.
Estructura del archivo
vuzon corre como un solo servicio: sin base de datos externa y sin colas. Este es el Compose de referencia — la copia del repositorio solo se diferencia en la etiqueta de imagen que fija:
services:
vuzon:
container_name: vuzon
image: ghcr.io/kn990x/vuzon:latest
env_file:
- path: .env
required: false
environment:
PORT: "8001"
restart: unless-stopped
init: true
read_only: true
tmpfs:
- /tmp
volumes:
- vuzon-data:/app/data
cap_drop:
- ALL
security_opt:
- no-new-privileges:true
ports:
- "${VUZON_PORT:-8001}:8001"
volumes:
vuzon-data:Nota: guarda DOMAIN y CF_API_TOKEN en un archivo .env junto al
compose; Docker lo inyecta automáticamente (env_file con required: false
necesita Compose v2.24+).
Etiquetas de imagen
La imagen se publica en ghcr.io/kn990x/vuzon con cada release, multiarquitectura amd64 / arm64. latest apunta siempre a la última imagen publicada — incluida una nueva versión mayor, que es donde viven los cambios incompatibles, así que lee las notas de la release antes de actualizar. Para decidir tú cuándo se da ese salto, fija una versión concreta en la línea image: — ver Actualizar vuzon.
Puertos y red
vuzon expone un único puerto HTTP para el panel y su API. El compose publica el puerto del anfitrión VUZON_PORT (por defecto 8001) asignado al 8001 del contenedor.
Advertencia: no expongas el puerto del panel directamente a internet. Sírvelo detrás de un proxy inverso con TLS (Caddy, Traefik, nginx) o de un túnel de Cloudflare — ver Reverse proxy y TLS.
Volúmenes y persistencia
No hay base de datos. La única ruta escribible es el volumen vuzon-data, montado en /app/data, que contiene:
- Las credenciales del panel, como hash scrypt.
- La clave de firma de la cookie que el panel genera para sí mismo.
- La marca de revocación de sesiones, que es lo que hace que un cierre de sesión sobreviva a un reinicio.
Perder este volumen es perder la contraseña del panel: el asistente de instalación se vuelve a abrir y el primer visitante reclama el panel. Haz copia como de cualquier otro estado de tu homelab — ver Backups.
Endurecimiento de serie
El compose viene bloqueado por defecto, y la imagen coopera:
read_only: true— el sistema de ficheros de la imagen queda en solo lectura;/tmpvive en tmpfs.cap_drop: ALLyno-new-privileges— el contenedor se ejecuta como usuario no root y sin ninguna capability.init: true— el PID 1 recoge zombis y reenvía señales, así quedocker stopapaga el panel limpiamente.- Un healthcheck contra
/healthzmantiene honesto adocker pssobre el estado del panel — lo declara la imagen, así que Compose lo hereda y no hay nada que repetir aquí.
Entorno
Las dos variables obligatorias son DOMAIN y CF_API_TOKEN. La lista completa — puertos, directorio de datos, flags de proxy y cookies — está en Variables de entorno.