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

VariabeleStandaardWat het doet
SECRET_KEY_BASEDe enige variabele die in productie verplicht is. Genereer er een met openssl rand -hex 64 en bewaar hem.
DATABASE_URLsqlite3:storage/production.sqlite3Waar 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_SSLfalseZet 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.
PORT3000De 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_LEVELinfoLogs gaan naar stdout en nergens anders heen. Dit is hoeveel ervan.
RATE_LIMIT_PER_HOURHoeveel 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.

VariabeleStandaardWat het doet
REDIS_URLredis://localhost:6379De server voor beide rollen, verdeeld over db 0 voor voortgang en db 1 voor de wachtrij.
PROGRESS_REDIS_URLREDIS_URL, db 0Vervangt alleen de voortgangsopslag.
SIDEKIQ_REDIS_URLREDIS_URL, db 1Vervangt alleen de wachtrij.
PROGRESS_TTL_SECONDS86400Hoe 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_PREFIXpw:progressSleutelprefix 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.

VariabeleStandaardWat het doet
VAPID_PUBLIC_KEYPublieke helft van het paar dat elke push ondertekent. Wordt aan de browser gegeven wanneer die zich abonneert.
VAPID_PRIVATE_KEYPrivate helft. Verlaat de server nooit.
VAPID_SUBJECTmailto:hello@progress.watchEen contactadres waarop de pushdiensten je kunnen bereiken als er iets misgaat. Niemand controleert het.
PUSH_CONTENTfullfull zet de taaktitel in de melding, minimal stuurt «Task completed» en niets herkenbaars.

Processen dimensioneren

VariabeleStandaardWat het doet
RAILS_MAX_THREADS5Puma-threads per proces, en de grootte van zowel de database- als de Redis-verbindingspool.
WEB_CONCURRENCY0Puma-workerprocessen. Nul draait één enkel proces, wat het juiste antwoord is op een kleine machine.
SIDEKIQ_CONCURRENCY5Threads in het Sidekiq-proces. Meldingen sturen is de enige klus die er is.