Proxy inverso y HTTPS
Tal como viene, Vaultisse escucha en HTTP plano en el puerto 3000. Está bien en tu propio ordenador o red doméstica. Para acceder desde internet necesitas un nombre de dominio y HTTPS, de modo que contraseñas y sesiones viajen cifradas. Elige una de estas formas:
| Opción | Ideal cuando | Necesita |
|---|---|---|
| Caddy | Tienes un servidor con dirección pública y quieres el menor trabajo | Un dominio que apunte al servidor, puertos 80 y 443 abiertos |
| Nginx | Ya usas Nginx | Lo mismo, más Certbot |
| Cloudflare Tunnel | Tu dominio está en Cloudflare, o no puedes abrir puertos | Una cuenta gratuita de Cloudflare |
| Unraid | Usas Unraid | Su pestaña Docker |
Elijas lo que elijas, estos dos ajustes de .env siempre hacen falta:
FRONT_END_URL=https://books.example.com
TRUST_PROXY=trueFRONT_END_URL es la dirección pública, exactamente como se escribe en el navegador. TRUST_PROXY=true avisa a Vaultisse de que hay un proxy delante, para que su protección contra la adivinación de contraseñas vea la dirección real de cada visitante y no la del proxy. Deja ALLOW_HTTP=false.
Mantén privado el puerto de la aplicación
Si el proxy se ejecuta en la misma máquina, publica el puerto de la aplicación solo en la dirección de loopback, para que la única entrada sea el proxy. En docker-compose.yml, cambia el servicio app:
ports:
- "127.0.0.1:${API_PORT:-3000}:${API_PORT:-3000}"Caddy
Caddy solicita y renueva por sí mismo el certificado HTTPS.
Apunta el registro
Ade tu dominio (yAAAApara IPv6) al servidor.Instala Caddy en el servidor, fuera de Docker, y pon esto en
/etc/caddy/Caddyfile:books.example.com { reverse_proxy localhost:3000 }Aplícalo:
bashsudo systemctl reload caddyAbre los puertos 80 y 443 en tu cortafuegos. No hace falta abrir nada más.
Nginx
Añade un bloque server que pase las peticiones a la aplicación:
server {
server_name books.example.com;
client_max_body_size 20m;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Después obtén el certificado con Certbot, que añade la parte HTTPS por ti:
sudo certbot --nginx -d books.example.comclient_max_body_size debe ser al menos tan grande como MAX_EBOOK_FILE_SIZE_MB, o fallarán las subidas de ebooks.
Cloudflare Tunnel
Un túnel hace una conexión saliente hacia Cloudflare, así que no abres ningún puerto ni gestionas certificados.
En el panel de Cloudflare, ve a Zero Trust → Networks → Tunnels y crea un túnel.
Añade un nombre de host público, por ejemplo
books.example.com, con el serviciohttp://app:3000. Es el nombre del servicio de Compose, nolocalhost.Copia el token del túnel y ponlo en
.env:iniFRONT_END_URL=https://books.example.com TRUST_PROXY=true CLOUDFLARE_TUNNEL_TOKEN=<tu token>Inicia el stack con el perfil
cloudflarepara que también se ejecute el contenedor del túnel:bashdocker compose --profile cloudflare up -d
Cuando funcione puedes quitar por completo la entrada ports: del servicio app. El túnel llega a la aplicación por la red interna de Docker, así que el servidor no tiene entonces ningún puerto de entrada.
Unraid
Los usuarios de Unraid pueden añadir Vaultisse desde su pestaña Docker en lugar de usar Compose.
Primero necesitas un servidor PostgreSQL, uno que ya uses o la plantilla oficial
postgres. Cargaassets/db/databaseSchema.sqluna vez en una base de datos vacía.En un navegador de tu red, abre esta dirección, sustituyendo
TOWER-IP:http://TOWER-IP/Docker/AddContainer?xmlTemplate=https://raw.githubusercontent.com/AlbertAmat/vaultisse/main/assets/unraid/vaultisse.xmlRellena
DB_HOST,DB_PORT,DB_NAME,DB_USER,DB_PASSWORD,FRONT_END_URLyJWT_SECRET, dejaALLOW_DEV_AUTHenfalsey haz clic en Apply.Para
http://TOWER-IP:3000plano en tu red, defineALLOW_HTTP=trueyTRUST_PROXY=false. Si añades un proxy o túnel con HTTPS, defineALLOW_HTTP=falseyTRUST_PROXY=true.
Si lo haces accesible desde internet, dale a Vaultisse, a su proxy y a su propia base de datos una red de Docker separada (docker network create vaultisse-net), y no uses redes Host ni br0 para él. Así un problema en esta aplicación no puede llegar a tus demás contenedores.
Compruébalo
- Abre
https://books.example.comy comprueba que aparece el candado. - Intenta iniciar sesión. Si la página carga pero el inicio de sesión da vueltas o los enlaces fallan,
FRONT_END_URLno coincide con lo que escribiste, oALLOW_HTTPes incorrecto. Consulta Solución de problemas.
Lista de comprobación de seguridad
- [ ]
ALLOW_DEV_AUTH=false - [ ]
JWT_SECRETgenerado conopenssl rand -hex 32 - [ ]
DB_PASSWORDes una contraseña real - [ ]
TRUST_PROXY=truedetrás de un proxy o túnel,falseen otro caso - [ ]
ALLOW_HTTP=falsesiempre que haya HTTPS delante - [ ] El puerto de la aplicación está enlazado a
127.0.0.1, o no publicado con un túnel - [ ]
APP_TAGfijado a una versión - [ ] El registro está cerrado cuando las personas que necesitas ya tienen cuenta