Was du bekommst #
| Dienst | Image | Rolle |
|---|---|---|
db | postgres:16-alpine | Daten plus Job-Queue. Nur auf 127.0.0.1:5432 veröffentlicht. |
app | gebaut aus ./web | Web-App, API und Collaboration-Server auf Port 3000. Kein Host-Port; ein Reverse-Proxy davor. |
worker | gebaut aus ./services/worker | E-Mails, Webhooks, Push, Digests, Aufräumen. |
scheduler | gebaut aus ./services/scheduler | Legt wiederkehrende Jobs in die Queue. |
Anhänge landen standardmäßig in einem Docker-Volume oder in einem beliebigen S3-kompatiblen Bucket.
Ausrollen #
Klonen und konfigurieren
Trage mindestensgit clone https://github.com/KilicerDev/trackr.git && cd trackr cp .env.example .envPOSTGRES_PASSWORD,BETTER_AUTH_SECRET(32+ zufällige Zeichen) und dasROOT_*-Konto ein. Alles andere hat einen sinnvollen Standard.Starten
Der App-Container führt bei jedem Start Migrationen aus und legt das Root-Konto an; beides ist idempotent.docker compose up -d --buildProxy davorschalten
Zeige mit deinem Reverse-Proxy aufapp:3000und reicheX-Forwarded-ProtoundX-Forwarded-Hostweiter. LassORIGINungesetzt, damit Trackr seine öffentliche URL aus diesen Headern ableitet.Anmelden
Öffne deine Domain, melde dich mit dem Root-Konto an, lege deine interne Organisation an und lade das Team ein.
E-Mail #
Setze SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS und EMAIL_FROM. Ist SMTP_HOST leer, protokolliert der Worker E-Mails statt sie zu senden — nützlich für den ersten Lauf.
Speicher #
STORAGE_DRIVER=local # oder s3
STORAGE_LOCAL_DIR=/app/data/attachments
# S3-kompatibel
S3_ENDPOINT=https://s3.eu-central-1.amazonaws.com
S3_REGION=eu-central-1
S3_BUCKET=trackr-attachments
S3_ACCESS_KEY_ID=…
S3_SECRET_ACCESS_KEY=…
S3_FORCE_PATH_STYLE=false
BODY_SIZE_LIMIT=100MAktualisieren #
git pull
docker compose up -d --buildMigrationen laufen beim Start automatisch. Die Go-Dienste migrieren nie; das Schema gehört der Web-App.
Skalierung #
workerundschedulerlaufen mit beliebig vielen Replikas; die Queue nutzt Zeilensperren, nichts wird doppelt verarbeitet.- Der Live-Update-Stream und der Berechtigungs-Cache der Web-App sind Einzelprozess. Betreibe eine
app-Replika, oder frag vor dem Skalieren nach.