Markus Michalski FAQ

Watchdog: Installation

Watchdog per Docker Compose installieren: lokal, Stage und Live. Passwort-Hash erzeugen, Container starten, Migrationen, Update, Datensicherung und Deinstallation.

English Version

Zurück zur Übersicht

Watchdog: Installation

Diese Dokumentation bezieht sich immer auf die aktuellste veröffentlichte Version.

Watchdog läuft als Docker-Compose-Stack. Das Repository enthält je eine Compose-Datei für lokale Entwicklung, Stage und Live. Eine Installation ohne Docker beschreibt das Repository nicht.

Voraussetzungen

Komponente Hinweis
Docker mit Compose-Plugin Alle Container werden aus dem mitgelieferten Dockerfile gebaut (Basis dunglas/frankenphp:1-php8.4-alpine)
git und make Das Makefile kapselt alle Compose-Aufrufe
Reverse Proxy mit HTTPS Nur bei Stage/Live nötig. Die App lauscht dort ausschließlich auf 127.0.0.1

PHP 8.4 und Symfony 8.1 sind im Image enthalten, auf dem Host wird nichts davon installiert.

Installation

Lokal (Entwicklung)

  1. Repository klonen und auf das neueste Release wechseln:
git clone https://github.com/markus-michalski/watchdog.git watchdog
cd watchdog
git checkout $(git tag --sort=-version:refname | head -1)
cp .env.example .env.local
  1. In .env.local mindestens APP_SECRET, APP_ADMIN_USER und APP_ADMIN_PASSWORD_HASH setzen (siehe Konfiguration). Der Hash gehört hier in einfache Anführungszeichen, damit Symfony das $ nicht als Variable auswertet.
  2. Image bauen, Container starten und Migrationen ausführen:
make local-build
  1. Aufrufen: App unter http://localhost:8087, Mailpit (Mail-Fänger) unter http://localhost:8128.

Im Entwicklungs-Stack ist der Code per Volume eingebunden. Danach genügt make local-up zum Starten und make local-down zum Stoppen.

Stage

  1. Repository nach /opt/watchdog klonen, auf das neueste Release wechseln und die Env-Datei anlegen:
git clone https://github.com/markus-michalski/watchdog.git /opt/watchdog
cd /opt/watchdog
git checkout $(git tag --sort=-version:refname | head -1)
cp .env.stage.example .env.stage
  1. .env.stage ausfüllen: APP_SECRET, APP_ADMIN_USER, APP_ADMIN_PASSWORD_HASH (mit $$ statt $), DEFAULT_URI, MAILER_DSN, MAILER_FROM.
  2. Bauen und starten:
make stage-build
make stage-up

make stage-up startet die Container und führt ausstehende Datenbank-Migrationen aus. App: 127.0.0.1:8087, Mailpit: 127.0.0.1:8128 auf dem Server.

Live

  1. Repository klonen und Env-Datei anlegen:
git clone https://github.com/markus-michalski/watchdog.git /opt/watchdog
cd /opt/watchdog
git checkout $(git tag --sort=-version:refname | head -1)
cp .env.live.example .env.live
  1. .env.live ausfüllen (APP_SECRET, Admin-Zugang, DEFAULT_URI, echter SMTP-Server in MAILER_DSN, MAILER_FROM).
  2. Bauen und starten:
make live-build
make live-up

Die App lauscht auf 127.0.0.1:8086. Für den Zugriff über HTTPS ist ein Reverse Proxy nötig, eine Proxy-Konfiguration liefert das Repository nicht mit.

Passwort-Hash erzeugen

Der Zugang besteht aus genau einem Admin-Benutzer, dessen Hash in der Env-Datei steht. Den Hash erzeugst Du so:

docker run --rm dunglas/frankenphp:1-php8.4-alpine php -r "echo password_hash('deinpasswort', PASSWORD_BCRYPT) . PHP_EOL;"

Alternativ, wenn der Stack schon läuft: docker compose -f compose.stage.yml exec app php bin/console security:hash-password.

Bcrypt-Hashes enthalten $. In .env.stage und .env.live liest Docker Compose die Datei, daher muss jedes $ zu $$ verdoppelt werden, also $$2y$$13$$.... In .env.local (lokal) liest Symfony die Datei, dort setzt Du den Hash stattdessen in einfache Anführungszeichen.

Erster Start

  1. Die App im Browser öffnen. Es erscheint der HTTP-Basic-Auth-Dialog (Realm Watchdog), melde Dich mit APP_ADMIN_USER und dem Passwort zum Hash an.
  2. Einen Client, Kontakte und Checks anlegen, siehe Konfiguration.
  3. Für Checks auf dem Host (Festplatte, Prozesse, Dateien) einen Agenten registrieren, siehe Agenten.

Update

cd /opt/watchdog
git fetch --tags
git checkout $(git tag --sort=-version:refname | head -1)
make stage-update

Auf Live nimmst Du make live-update. Beide Ziele bauen das Image neu, starten die Container neu, leeren den Cache und führen die Migrationen aus. make live-update startet zuerst app neu und danach Worker, Scheduler und Agent.

Zusätzliche Mounts (compose.override.yml)

Das Makefile bindet automatisch eine lokale compose.override.yml ein, falls sie existiert. Die Datei ist per .gitignore ausgeschlossen und übersteht Updates. Eine Vorlage liegt als compose.override.yml.example bei.

cp compose.override.yml.example compose.override.yml

Datensicherung

Alle Daten liegen in der SQLite-Datei /app/var/data.db im benannten Volume (watchdog_stage_data bei Stage, watchdog_data bei Live und lokal). Für eine konsistente Kopie stoppst Du vorher Worker und Scheduler.

docker compose -f compose.live.yml stop worker scheduler
docker compose -f compose.live.yml cp app:/app/var/data.db ./data.db.bak
docker compose -f compose.live.yml start worker scheduler

Deinstallation

Ziel Befehl
Container stoppen, Daten behalten make stage-down bzw. make live-down
Container und Datenbank-Volume löschen docker compose -f compose.stage.yml down -v (Live: compose.live.yml)
Images entfernen docker rmi watchdog-stage watchdog-stage-agent (Live: watchdog-live watchdog-live-agent)
Remote-Agent entfernen docker compose -f docker-compose.agent.yml down auf dem überwachten Server

Anschließend kannst Du das Verzeichnis /opt/watchdog samt .env.stage bzw. .env.live löschen. Den Agenten-Eintrag und die Tokens entfernst Du vorher in der Oberfläche unter Agents.