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_BASE/data/progresswatch/progresswatch.envGenerata al primo avvio e conservata sul volume, quindi lasciala non impostata. Impostala tu dove non c'è un volume, o dove più container devono condividerla.
DATABASE_URLsqlite3:/data/progresswatch/db.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_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.

VariabilePredefinitoCosa fa
REDIS_URL—Il server usato per entrambi i ruoli, diviso in db 0 per l'avanzamento e db 1 per la coda. Se non è impostata, l'immagine avvia un proprio Redis nel container e ne salva snapshot sul volume.
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.

Limiti

Il testo oltre un limite viene tagliato a quel punto, con i puntini di sospensione come ultimo carattere. Un oggetto values con più chiavi, o con una chiave più lunga, viene invece rifiutato con 400. Questi valori predefiniti sono per un server tuo; progress.watch li tiene tutti più bassi.

VariabilePredefinitoCosa fa
MAX_TASK_TITLE_LENGTH500Titolo di attività più lungo conservato, in caratteri
MAX_TASK_SOURCE_LENGTH200Origine di attività più lunga conservata
MAX_SPACE_TITLE_LENGTH200Nome di spazio più lungo conservato
MAX_VALUES_KEY_COUNT50Numero massimo di chiavi nei values di un rapporto
MAX_VALUES_KEY_LENGTH100Chiave più lunga in values
MAX_VALUES_STRING_LENGTH10000Stringa più lunga in values, compresa una riga di log

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_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_SUBJECThttps://github.com/progress-watch/progresswatchUn 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.
PUSH_RELAYhttps://progress.watchDove viene inviata una notifica per l'app iOS per essere firmata e consegnata ad Apple: solo chi pubblica l'app possiede la chiave che Apple richiede, quindi un server self-hosted non può consegnarla da sé. Il relay vede il dispositivo e il testo della notifica, mai l'UUID di uno spazio, e non viene inviato nulla finché qualcuno non attiva le notifiche nell'app. PUSH_CONTENT=minimal ne tiene fuori i titoli delle attività. false lo disattiva, e l'app allora non offre notifiche su questo server.

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'è.