Configurar Progress Watch con variables de entorno
Todo es una variable de entorno. No hay archivos de configuración que editar ni credenciales cifradas metidas en la imagen, así que el mismo contenedor corre en un NAS de casa y en la nube.
General
| Variable | Por defecto | Qué hace |
|---|---|---|
SECRET_KEY_BASE | — | La única variable obligatoria en producción. Genera una con openssl rand -hex 64 y consérvala. |
DATABASE_URL | sqlite3:storage/production.sqlite3 | Dónde viven los espacios y la estructura de las tareas. El archivo por defecto es lo que guarda el volumen de Docker; apúntala a postgresql://… para un despliegue en la nube. El progreso en sí nunca se escribe aquí. |
FORCE_SSL | false | Ponla a true cuando algo delante termine el TLS. También controla assume_ssl, así que dejarla apagada mantiene la aplicación usable por HTTP simple en vez de redirigir a un certificado que no tienes. |
PORT | 3000 | El puerto al que Puma se enlaza dentro del contenedor. docker-compose.yml lo publica en el 7979, porque un servicio que dejas corriendo durante semanas no debería ocupar el puerto que quieren tus propios servidores de desarrollo. |
RAILS_LOG_LEVEL | info | Los logs van a stdout y a ningún otro sitio. Esto es cuánto de ellos. |
RATE_LIMIT_PER_HOUR | — | Cuántos espacios y tareas puede crear una dirección por hora. Sin poner significa sin límite, que es la respuesta correcta para un servidor al que solo llegas tú. Reportar progreso nunca se limita. |
Detrás de un proxy, RATE_LIMIT_PER_HOUR vale tanto como la dirección que ve la aplicación. Rails lee X-Forwarded-For y se fía de él desde rangos privados, que es lo que envía un proxy inverso en el mismo host; pero si la cabecera no llega, cada petición parece un solo cliente y el límite deja fuera a todos a la vez en lugar de a nadie.
Redis
Redis guarda dos cosas sin relación: el progreso actual de cada tarea y la cola de Sidekiq. Por defecto son dos bases de datos lógicas de un mismo servidor, y cualquiera de las dos puede moverse a su propia instancia.
| Variable | Por defecto | Qué hace |
|---|---|---|
REDIS_URL | redis://localhost:6379 | El servidor usado para ambos papeles, repartido en db 0 para el progreso y db 1 para la cola. |
PROGRESS_REDIS_URL | REDIS_URL, db 0 | Sustituye solo el almacén de progreso. |
SIDEKIQ_REDIS_URL | REDIS_URL, db 1 | Sustituye solo la cola. |
PROGRESS_TTL_SECONDS | 86400 | Cuánto conserva una tarea su progreso sin que se escriba en ella. Cada reporte lo refresca, así que esto es en realidad cuánto tiempo sigue en pantalla una tarea abandonada. |
PROGRESS_KEY_PREFIX | pw:progress | Prefijo de clave del almacén de progreso, para que pueda compartir base de datos con otra cosa. |
Notificaciones
Las dos claves sin poner significa que la función no existe: ni botón en un espacio, ni nada guardado sobre nadie. No hay nada que registrar con Apple ni con Google: quien hizo el navegador opera el servicio de push. Genera un par una vez y no lo rotes; las suscripciones existentes están atadas a él y a los navegadores no se les avisa.
| Variable | Por defecto | Qué hace |
|---|---|---|
VAPID_PUBLIC_KEY | — | La mitad pública del par que firma cada push. Se le entrega al navegador cuando se suscribe. |
VAPID_PRIVATE_KEY | — | La mitad privada. No sale nunca del servidor. |
VAPID_SUBJECT | mailto:hello@progress.watch | Una dirección de contacto a la que los servicios de push pueden acudir si algo va mal. Nadie la verifica. |
PUSH_CONTENT | full | full pone el título de la tarea en la notificación, minimal envía «Task completed» y nada identificativo. |
Dimensionar los procesos
| Variable | Por defecto | Qué hace |
|---|---|---|
RAILS_MAX_THREADS | 5 | Hilos de Puma por proceso, y el tamaño tanto del pool de conexiones a la base de datos como del de Redis. |
WEB_CONCURRENCY | 0 | Procesos worker de Puma. Cero ejecuta un solo proceso, que es la respuesta correcta en una máquina pequeña. |
SIDEKIQ_CONCURRENCY | 5 | Hilos del proceso Sidekiq. Enviar notificaciones es el único trabajo que hay. |