Docker
Recomendado para producción. Usa la imagen precompilada o compila localmente con docker compose.
Fulgoria incluye un servidor fino (server.js, Node/Express) que hace solo dos cosas:
sirve la app estática y, opcionalmente, la protege detrás de un login leído desde .env. El
documento en sí siempre se procesa 100% en el navegador — el servidor nunca lo recibe,
aplica una CSP estricta y cabeceras de seguridad, y nunca expone .env, server.js ni
muestras privadas.
Docker
Recomendado para producción. Usa la imagen precompilada o compila localmente con docker compose.
Node.js 18+
Requerido solo si ejecutas el servidor directamente con npm en lugar de Docker.
Un navegador moderno
Toda la extracción (parseo de PDF, OCR, edición) se ejecuta del lado del cliente, así que un navegador actual es donde ocurre el trabajo real.
El camino más rápido es la imagen publicada en GHCR, compilada por CI en cada push a main.
docker run -d \ -p 3000:3000 \ -e AUTH_ENABLED=true \ -e AUTH_USER=diego \ -e AUTH_PASSWORD='your-password' \ -e SESSION_SECRET="$(openssl rand -hex 32)" \ -e COOKIE_SECURE=false \ ghcr.io/diegoparras/fulgoria:latestLuego abre http://localhost:3000.
Clona el repo, prepara tu .env, y compila:
cp .env.example .env# edita .env: define AUTH_PASSWORD y SESSION_SECRETdocker compose up --buildEl archivo compose incluido mapea el puerto 3000, carga variables desde .env, y reinicia
salvo que se lo detenga.
cp .env.example .envnpm installnode server.js --hash 'your-password' # → pega el hash en AUTH_PASSWORDopenssl rand -hex 32 # → pega en SESSION_SECRETnpm start # → http://localhost:3000http://localhost:3000 (o el host que configuraste).AUTH_ENABLED=true, inicia sesión con AUTH_USER y la contraseña que configuraste.Toda la configuración vive en .env (cópialo desde .env.example). El archivo .env nunca
se commitea ni se sirve.
| Variable | Predeterminado | Descripción |
|---|---|---|
PORT | 3000 | Puerto en el que escucha el servidor fino. |
AUTH_ENABLED | true | Define false para servir la app sin contraseña (uso local o en red privada). |
AUTH_USER | diego | Nombre de usuario para el login. |
AUTH_PASSWORD | (vacío) | La contraseña — texto plano, o un hash bcrypt de --hash. |
SESSION_SECRET | (vacío) | Secreto usado para firmar la cookie de sesión. Genéralo con openssl rand -hex 32. |
SESSION_TTL_HOURS | 12 | Duración de la sesión, en horas. |
COOKIE_SECURE | true | Mantén true detrás de HTTPS; define false solo para probar localmente sobre http://. |
ESCRIBA_URL | (vacío) | Destino del botón “Enviar a Escriba”. Vacío recurre a /. Apúntalo a tu Escriba, por ejemplo https://your-escriba.com/. |