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_BASE/data/progresswatch/progresswatch.envWird beim ersten Start erzeugt und auf dem Volume aufbewahrt, lassen Sie sie also ungesetzt. Setzen Sie sie selbst, wo es kein Volume gibt oder mehrere Container sie teilen müssen.
DATABASE_URLsqlite3:/data/progresswatch/db.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_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.

VariableVoreinstellungWofür sie da ist
REDIS_URL—Der Server für beide Rollen, aufgeteilt in db 0 für Fortschritt und db 1 für die Warteschlange. Ungesetzt startet das Image ein eigenes Redis im Container und schreibt Snapshots davon auf das Volume.
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.

Grenzen

Text über einer Grenze wird darauf gekürzt, das letzte Zeichen ist dann eine Ellipse. Ein values-Objekt mit mehr Schlüsseln oder einem längeren Schlüssel wird stattdessen mit 400 abgelehnt. Diese Vorgaben gelten für einen eigenen Server; progress.watch hält jede davon niedriger.

VariableVoreinstellungWofür sie da ist
MAX_TASK_TITLE_LENGTH500Längster gespeicherter Aufgabentitel, in Zeichen
MAX_TASK_SOURCE_LENGTH200Längste gespeicherte Quelle einer Aufgabe
MAX_SPACE_TITLE_LENGTH200Längster gespeicherter Bereichsname
MAX_VALUES_KEY_COUNT50Meiste Schlüssel in den values eines Berichts
MAX_VALUES_KEY_LENGTH100Längster Schlüssel in values
MAX_VALUES_STRING_LENGTH10000Längster String in values, eine log-Zeile eingeschlossen

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_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_SUBJECThttps://github.com/progress-watch/progresswatchEine 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.
PUSH_RELAYhttps://progress.watchWohin eine Benachrichtigung für die iOS-App geschickt wird, um signiert und an Apple übergeben zu werden: Nur der Herausgeber der App besitzt den Schlüssel, den Apple verlangt, ein selbst gehosteter Server kann sie also nicht selbst zustellen. Das Relay sieht das Gerät und den Text der Benachrichtigung, nie eine Bereichs-UUID, und es wird nichts gesendet, bevor jemand in der App Benachrichtigungen einschaltet. PUSH_CONTENT=minimal hält Aufgabentitel heraus. false schaltet es ab, und die App bietet auf diesem Server dann keine Benachrichtigungen an.

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.