Configurare Progress Watch con le variabili d'ambiente
Tutto è una variabile d'ambiente. Non ci sono file di configurazione da modificare né credenziali cifrate cotte dentro l'immagine, quindi lo stesso container gira su un NAS di casa e nel cloud.
Generale
| Variabile | Predefinito | Cosa fa |
|---|---|---|
SECRET_KEY_BASE | — | L'unica variabile obbligatoria in produzione. Generane una con openssl rand -hex 64 e conservala. |
DATABASE_URL | sqlite3:storage/production.sqlite3 | Dove vivono gli spazi e la struttura delle attività. Il file predefinito è ciò che contiene il volume Docker; punta a postgresql://… per un deploy nel cloud. L'avanzamento in sé non viene mai scritto qui. |
FORCE_SSL | false | Imposta true quando qualcosa davanti termina il TLS. Guida anche assume_ssl, quindi lasciarlo spento mantiene l'app usabile via HTTP semplice invece di reindirizzare a un certificato che non hai. |
PORT | 3000 | La porta a cui Puma si lega dentro il container. docker-compose.yml la pubblica sulla 7979, perché un servizio lasciato acceso per settimane non dovrebbe occupare la porta che vogliono i tuoi server di sviluppo. |
RAILS_LOG_LEVEL | info | I log vanno su stdout e da nessun'altra parte. Questo è quanti. |
RATE_LIMIT_PER_HOUR | — | Quanti spazi e attività può creare un indirizzo all'ora. Non impostato significa nessun limite, che è la risposta giusta per un server che puoi raggiungere solo tu. Riportare l'avanzamento non è mai limitato. |
Dietro un proxy, RATE_LIMIT_PER_HOUR vale quanto l'indirizzo che l'app vede. Rails legge X-Forwarded-For e si fida di esso dagli intervalli privati, che è ciò che manda un reverse proxy sullo stesso host — ma se l'header non arriva, ogni richiesta sembra un solo client e il limite blocca tutti insieme invece di nessuno.
Redis
Redis tiene due cose senza rapporto: l'avanzamento corrente di ogni attività e la coda di Sidekiq. Per impostazione predefinita sono due database logici di un unico server, ed entrambi possono essere spostati su un'istanza propria.
| Variabile | Predefinito | Cosa fa |
|---|---|---|
REDIS_URL | redis://localhost:6379 | Il server usato per entrambi i ruoli, diviso in db 0 per l'avanzamento e db 1 per la coda. |
PROGRESS_REDIS_URL | REDIS_URL, db 0 | Sostituisce il solo archivio dell'avanzamento. |
SIDEKIQ_REDIS_URL | REDIS_URL, db 1 | Sostituisce la sola coda. |
PROGRESS_TTL_SECONDS | 86400 | Per quanto un'attività conserva il suo avanzamento senza essere scritta. Ogni report lo rinfresca, quindi questo è in realtà per quanto un'attività abbandonata resta a schermo. |
PROGRESS_KEY_PREFIX | pw:progress | Prefisso delle chiavi dell'archivio dell'avanzamento, così può condividere un database con qualcos'altro. |
Notifiche
Entrambe le chiavi vuote significano che la funzione non esiste: nessun pulsante su uno spazio e niente memorizzato su nessuno. Non c'è niente da registrare con Apple o Google: chi ha fatto il browser gestisce il servizio di push. Genera una coppia una volta sola e non ruotarla; le iscrizioni esistenti sono legate a essa e i browser non vengono informati.
| Variabile | Predefinito | Cosa fa |
|---|---|---|
VAPID_PUBLIC_KEY | — | Metà pubblica della coppia che firma ogni push. Consegnata al browser quando si iscrive. |
VAPID_PRIVATE_KEY | — | Metà privata. Non lascia mai il server. |
VAPID_SUBJECT | mailto:hello@progress.watch | Un indirizzo di contatto che i servizi di push possono raggiungere se qualcosa va storto. Nessuno lo verifica. |
PUSH_CONTENT | full | full mette il titolo dell'attività nella notifica, minimal invia «Task completed» e niente di identificabile. |
Dimensionare i processi
| Variabile | Predefinito | Cosa fa |
|---|---|---|
RAILS_MAX_THREADS | 5 | Thread di Puma per processo, e dimensione sia del pool di connessioni al database sia di quello a Redis. |
WEB_CONCURRENCY | 0 | Processi worker di Puma. Zero fa girare un solo processo, che è la risposta giusta su una macchina piccola. |
SIDEKIQ_CONCURRENCY | 5 | Thread nel processo Sidekiq. Mandare notifiche è l'unico lavoro che c'è. |