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
| Variable | Voreinstellung | Wofür sie da ist |
|---|---|---|
SECRET_KEY_BASE | — | Die einzige Variable, die in der Produktion erforderlich ist. Erzeugen Sie eine mit openssl rand -hex 64 und bewahren Sie sie auf. |
DATABASE_URL | sqlite3:storage/production.sqlite3 | Wo 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_SSL | false | Auf 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. |
PORT | 3000 | Der 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_LEVEL | info | Logs gehen nach stdout und sonst nirgendwohin. Das hier ist, wie viel davon. |
RATE_LIMIT_PER_HOUR | — | Wie 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.
| Variable | Voreinstellung | Wofür sie da ist |
|---|---|---|
REDIS_URL | redis://localhost:6379 | Der Server für beide Rollen, aufgeteilt in db 0 für Fortschritt und db 1 für die Warteschlange. |
PROGRESS_REDIS_URL | REDIS_URL, db 0 | Überschreibt allein den Fortschrittsspeicher. |
SIDEKIQ_REDIS_URL | REDIS_URL, db 1 | Überschreibt allein die Warteschlange. |
PROGRESS_TTL_SECONDS | 86400 | Wie 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_PREFIX | pw:progress | Schlü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.
| Variable | Voreinstellung | Wofür sie da ist |
|---|---|---|
VAPID_PUBLIC_KEY | — | Die öffentliche Hälfte des Paars, das jeden Push signiert. Wird dem Browser bei der Anmeldung übergeben. |
VAPID_PRIVATE_KEY | — | Die private Hälfte. Verlässt den Server nie. |
VAPID_SUBJECT | mailto:hello@progress.watch | Eine Kontaktadresse, unter der die Push-Dienste Sie erreichen können, wenn etwas schiefgeht. Niemand prüft sie. |
PUSH_CONTENT | full | full setzt den Aufgabentitel in die Benachrichtigung, minimal sendet „Task completed“ und nichts Identifizierendes. |
Prozessgrößen
| Variable | Voreinstellung | Wofür sie da ist |
|---|---|---|
RAILS_MAX_THREADS | 5 | Puma-Threads pro Prozess, und die Größe sowohl des Datenbank- als auch des Redis-Verbindungspools. |
WEB_CONCURRENCY | 0 | Puma-Worker-Prozesse. Null lässt einen einzelnen Prozess laufen, was auf einer kleinen Maschine die richtige Antwort ist. |
SIDEKIQ_CONCURRENCY | 5 | Threads im Sidekiq-Prozess. Benachrichtigungen zu senden ist der einzige Job, den es gibt. |