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

VariabilePredefinitoCosa fa
SECRET_KEY_BASEL'unica variabile obbligatoria in produzione. Generane una con openssl rand -hex 64 e conservala.
DATABASE_URLsqlite3:storage/production.sqlite3Dove 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_SSLfalseImposta 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.
PORT3000La 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_LEVELinfoI log vanno su stdout e da nessun'altra parte. Questo è quanti.
RATE_LIMIT_PER_HOURQuanti 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.

VariabilePredefinitoCosa fa
REDIS_URLredis://localhost:6379Il server usato per entrambi i ruoli, diviso in db 0 per l'avanzamento e db 1 per la coda.
PROGRESS_REDIS_URLREDIS_URL, db 0Sostituisce il solo archivio dell'avanzamento.
SIDEKIQ_REDIS_URLREDIS_URL, db 1Sostituisce la sola coda.
PROGRESS_TTL_SECONDS86400Per 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_PREFIXpw:progressPrefisso 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.

VariabilePredefinitoCosa fa
VAPID_PUBLIC_KEYMetà pubblica della coppia che firma ogni push. Consegnata al browser quando si iscrive.
VAPID_PRIVATE_KEYMetà privata. Non lascia mai il server.
VAPID_SUBJECTmailto:hello@progress.watchUn indirizzo di contatto che i servizi di push possono raggiungere se qualcosa va storto. Nessuno lo verifica.
PUSH_CONTENTfullfull mette il titolo dell'attività nella notifica, minimal invia «Task completed» e niente di identificabile.

Dimensionare i processi

VariabilePredefinitoCosa fa
RAILS_MAX_THREADS5Thread di Puma per processo, e dimensione sia del pool di connessioni al database sia di quello a Redis.
WEB_CONCURRENCY0Processi worker di Puma. Zero fa girare un solo processo, che è la risposta giusta su una macchina piccola.
SIDEKIQ_CONCURRENCY5Thread nel processo Sidekiq. Mandare notifiche è l'unico lavoro che c'è.