Progress Watch über Umgebungsvariablen konfigurieren

Alles ist eine Umgebungsvariable. Es gibt keine Konfigurationsdateien zu bearbeiten und keine verschlüsselten Zugangsdaten im Image, derselbe Container läuft also auf einem NAS zu Hause und in der Cloud.

Allgemein

VariableVoreinstellungWofür sie da ist
SECRET_KEY_BASEDie einzige Variable, die in der Produktion erforderlich ist. Erzeugen Sie eine mit openssl rand -hex 64 und bewahren Sie sie auf.
DATABASE_URLsqlite3:storage/production.sqlite3Wo Bereiche und Aufgabenstruktur liegen. Die voreingestellte Datei ist das, was das Docker-Volume hält; zeigen Sie für eine Cloud-Installation auf postgresql://…. Der Fortschritt selbst wird hier nie geschrieben.
FORCE_SSLfalseAuf true setzen, wenn etwas davor TLS terminiert. Es steuert auch assume_ssl, es auszulassen hält die App also über einfaches HTTP benutzbar, statt auf ein Zertifikat umzuleiten, das Sie nicht haben.
PORT3000Der Port, an den Puma im Container bindet. docker-compose.yml veröffentlicht ihn auf 7979, weil ein Dienst, den Sie wochenlang laufen lassen, nicht den Port belegen sollte, den Ihre eigenen Dev-Server wollen.
RAILS_LOG_LEVELinfoLogs gehen nach stdout und sonst nirgendwohin. Das hier ist, wie viel davon.
RATE_LIMIT_PER_HOURWie viele Bereiche und Aufgaben eine Adresse pro Stunde anlegen darf. Ungesetzt heißt kein Limit, was die richtige Antwort für einen Server ist, den nur Sie erreichen. Fortschritt zu berichten wird nie begrenzt.

Hinter einem Proxy ist RATE_LIMIT_PER_HOUR nur so gut wie die Adresse, die die App sieht. Rails liest X-Forwarded-For und vertraut dem Header aus privaten Bereichen, was ein Reverse Proxy auf demselben Host sendet — kommt der Header aber nicht an, sieht jede Anfrage wie ein einziger Client aus, und das Limit sperrt alle auf einmal aus statt niemanden.

Redis

Redis hält zwei voneinander unabhängige Dinge: den aktuellen Fortschritt jeder Aufgabe und die Sidekiq-Warteschlange. Das sind standardmäßig zwei logische Datenbanken eines Servers, und beide lassen sich auf eine eigene Instanz verschieben.

VariableVoreinstellungWofür sie da ist
REDIS_URLredis://localhost:6379Der Server für beide Rollen, aufgeteilt in db 0 für Fortschritt und db 1 für die Warteschlange.
PROGRESS_REDIS_URLREDIS_URL, db 0Überschreibt allein den Fortschrittsspeicher.
SIDEKIQ_REDIS_URLREDIS_URL, db 1Überschreibt allein die Warteschlange.
PROGRESS_TTL_SECONDS86400Wie lange eine Aufgabe ihren Fortschritt behält, ohne beschrieben zu werden. Jeder Bericht frischt das auf, das hier ist also eigentlich, wie lange eine aufgegebene Aufgabe auf dem Schirm bleibt.
PROGRESS_KEY_PREFIXpw:progressSchlüsselpräfix für den Fortschrittsspeicher, damit er sich eine Datenbank mit etwas anderem teilen kann.

Benachrichtigungen

Beide Schlüssel ungesetzt heißt, die Funktion existiert nicht: kein Knopf auf einem Bereich, und nichts über irgendwen gespeichert. Es gibt nichts bei Apple oder Google zu registrieren — wer den Browser gebaut hat, betreibt den Push-Dienst. Erzeugen Sie einmal ein Paar und rotieren Sie es nicht; bestehende Anmeldungen sind daran gebunden, und Browser werden nicht informiert.

VariableVoreinstellungWofür sie da ist
VAPID_PUBLIC_KEYDie öffentliche Hälfte des Paars, das jeden Push signiert. Wird dem Browser bei der Anmeldung übergeben.
VAPID_PRIVATE_KEYDie private Hälfte. Verlässt den Server nie.
VAPID_SUBJECTmailto:hello@progress.watchEine Kontaktadresse, unter der die Push-Dienste Sie erreichen können, wenn etwas schiefgeht. Niemand prüft sie.
PUSH_CONTENTfullfull setzt den Aufgabentitel in die Benachrichtigung, minimal sendet „Task completed“ und nichts Identifizierendes.

Prozessgrößen

VariableVoreinstellungWofür sie da ist
RAILS_MAX_THREADS5Puma-Threads pro Prozess, und die Größe sowohl des Datenbank- als auch des Redis-Verbindungspools.
WEB_CONCURRENCY0Puma-Worker-Prozesse. Null lässt einen einzelnen Prozess laufen, was auf einer kleinen Maschine die richtige Antwort ist.
SIDEKIQ_CONCURRENCY5Threads im Sidekiq-Prozess. Benachrichtigungen zu senden ist der einzige Job, den es gibt.