Progress Watch instellen via omgevingsvariabelen
Alles is een omgevingsvariabele. Er zijn geen configuratiebestanden om te bewerken en geen versleutelde inloggegevens in de image gebakken, dus dezelfde container draait op een NAS thuis en in de cloud.
Algemeen
| Variabele | Standaard | Wat het doet |
|---|---|---|
SECRET_KEY_BASE | — | De enige variabele die in productie verplicht is. Genereer er een met openssl rand -hex 64 en bewaar hem. |
DATABASE_URL | sqlite3:storage/production.sqlite3 | Waar ruimtes en taakstructuur leven. Het standaardbestand is wat het Docker-volume bevat; wijs naar postgresql://… voor een cloudinstallatie. De voortgang zelf wordt hier nooit geschreven. |
FORCE_SSL | false | Zet op true wanneer iets ervoor de TLS afhandelt. Het stuurt ook assume_ssl aan, dus uit laten houdt de app bruikbaar via gewoon HTTP in plaats van door te sturen naar een certificaat dat je niet hebt. |
PORT | 3000 | De poort waarop Puma binnen de container luistert. docker-compose.yml publiceert hem op 7979, omdat een dienst die je wekenlang laat draaien niet de poort hoort te bezetten die je eigen ontwikkelservers willen. |
RAILS_LOG_LEVEL | info | Logs gaan naar stdout en nergens anders heen. Dit is hoeveel ervan. |
RATE_LIMIT_PER_HOUR | — | Hoeveel ruimtes en taken één adres per uur mag aanmaken. Niet gezet betekent geen limiet, wat het juiste antwoord is voor een server die alleen jij kunt bereiken. Voortgang rapporteren wordt nooit beperkt. |
Achter een proxy is RATE_LIMIT_PER_HOUR niet beter dan het adres dat de app ziet. Rails leest X-Forwarded-For en vertrouwt die vanuit privébereiken, wat een reverse proxy op dezelfde host stuurt — maar als de header niet aankomt, lijkt elk verzoek op één client en sluit de limiet iedereen tegelijk buiten in plaats van niemand.
Redis
Redis houdt twee ongerelateerde dingen bij: de huidige voortgang van elke taak, en de Sidekiq-wachtrij. Dat zijn standaard twee logische databases van één server, en beide kunnen naar een eigen instantie verhuizen.
| Variabele | Standaard | Wat het doet |
|---|---|---|
REDIS_URL | redis://localhost:6379 | De server voor beide rollen, verdeeld over db 0 voor voortgang en db 1 voor de wachtrij. |
PROGRESS_REDIS_URL | REDIS_URL, db 0 | Vervangt alleen de voortgangsopslag. |
SIDEKIQ_REDIS_URL | REDIS_URL, db 1 | Vervangt alleen de wachtrij. |
PROGRESS_TTL_SECONDS | 86400 | Hoe lang een taak haar voortgang houdt zonder beschreven te worden. Elke rapportage vernieuwt dat, dus dit is eigenlijk hoe lang een verlaten taak in beeld blijft. |
PROGRESS_KEY_PREFIX | pw:progress | Sleutelprefix voor de voortgangsopslag, zodat die een database met iets anders kan delen. |
Meldingen
Beide sleutels leeg betekent dat de functie niet bestaat: geen knop op een ruimte, en niets opgeslagen over wie dan ook. Er valt niets te registreren bij Apple of Google — wie de browser maakte, draait de pushdienst. Genereer één keer een paar en roteer het niet; bestaande abonnementen zijn eraan gebonden en browsers worden niet ingelicht.
| Variabele | Standaard | Wat het doet |
|---|---|---|
VAPID_PUBLIC_KEY | — | Publieke helft van het paar dat elke push ondertekent. Wordt aan de browser gegeven wanneer die zich abonneert. |
VAPID_PRIVATE_KEY | — | Private helft. Verlaat de server nooit. |
VAPID_SUBJECT | mailto:hello@progress.watch | Een contactadres waarop de pushdiensten je kunnen bereiken als er iets misgaat. Niemand controleert het. |
PUSH_CONTENT | full | full zet de taaktitel in de melding, minimal stuurt «Task completed» en niets herkenbaars. |
Processen dimensioneren
| Variabele | Standaard | Wat het doet |
|---|---|---|
RAILS_MAX_THREADS | 5 | Puma-threads per proces, en de grootte van zowel de database- als de Redis-verbindingspool. |
WEB_CONCURRENCY | 0 | Puma-workerprocessen. Nul draait één enkel proces, wat het juiste antwoord is op een kleine machine. |
SIDEKIQ_CONCURRENCY | 5 | Threads in het Sidekiq-proces. Meldingen sturen is de enige klus die er is. |