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 | /data/progresswatch/progresswatch.env | Generata 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_URL | sqlite3:/data/progresswatch/db.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 | — | 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_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. |
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.
| Variabile | Predefinito | Cosa fa |
|---|---|---|
MAX_TASK_TITLE_LENGTH | 500 | Titolo di attività più lungo conservato, in caratteri |
MAX_TASK_SOURCE_LENGTH | 200 | Origine di attività più lunga conservata |
MAX_SPACE_TITLE_LENGTH | 200 | Nome di spazio più lungo conservato |
MAX_VALUES_KEY_COUNT | 50 | Numero massimo di chiavi nei values di un rapporto |
MAX_VALUES_KEY_LENGTH | 100 | Chiave più lunga in values |
MAX_VALUES_STRING_LENGTH | 10000 | Stringa 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.
| 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 | https://github.com/progress-watch/progresswatch | 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. |
PUSH_RELAY | https://progress.watch | Dove 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
| 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'è. |