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

VariablePor defectoQué hace
SECRET_KEY_BASELa única variable obligatoria en producción. Genera una con openssl rand -hex 64 y consérvala.
DATABASE_URLsqlite3:storage/production.sqlite3Dó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_SSLfalsePonla 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.
PORT3000El 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_LEVELinfoLos logs van a stdout y a ningún otro sitio. Esto es cuánto de ellos.
RATE_LIMIT_PER_HOURCuá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.

VariablePor defectoQué hace
REDIS_URLredis://localhost:6379El servidor usado para ambos papeles, repartido en db 0 para el progreso y db 1 para la cola.
PROGRESS_REDIS_URLREDIS_URL, db 0Sustituye solo el almacén de progreso.
SIDEKIQ_REDIS_URLREDIS_URL, db 1Sustituye solo la cola.
PROGRESS_TTL_SECONDS86400Cuá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_PREFIXpw:progressPrefijo 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.

VariablePor defectoQué hace
VAPID_PUBLIC_KEYLa mitad pública del par que firma cada push. Se le entrega al navegador cuando se suscribe.
VAPID_PRIVATE_KEYLa mitad privada. No sale nunca del servidor.
VAPID_SUBJECTmailto:hello@progress.watchUna dirección de contacto a la que los servicios de push pueden acudir si algo va mal. Nadie la verifica.
PUSH_CONTENTfullfull pone el título de la tarea en la notificación, minimal envía «Task completed» y nada identificativo.

Dimensionar los procesos

VariablePor defectoQué hace
RAILS_MAX_THREADS5Hilos de Puma por proceso, y el tamaño tanto del pool de conexiones a la base de datos como del de Redis.
WEB_CONCURRENCY0Procesos worker de Puma. Cero ejecuta un solo proceso, que es la respuesta correcta en una máquina pequeña.
SIDEKIQ_CONCURRENCY5Hilos del proceso Sidekiq. Enviar notificaciones es el único trabajo que hay.