From fdd70fc20d4a3b8d98d35a3029f74911ff1cdc9f Mon Sep 17 00:00:00 2001 From: orejudo Date: Sat, 11 Jul 2026 01:19:41 +0200 Subject: [PATCH] docker-compose.yml auf Coolify-Caddy-Proxy umgestellt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Kein Host-Port-Mapping mehr, stattdessen Anbindung an das externe Docker-Netzwerk "coolify" mit caddy-Labels für domainbasiertes Routing und automatisches TLS über ressourceksr.bbundco.de. README entsprechend aktualisiert (Coolify-Deployment ohne manuelle Port-Konfiguration). Co-Authored-By: Claude Sonnet 5 --- README.md | 39 +++++++++++++++++++++++++-------------- docker-compose.yml | 13 +++++++++++-- 2 files changed, 36 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index db6c479..8e1ff6e 100644 --- a/README.md +++ b/README.md @@ -87,16 +87,25 @@ per Proxy an das Backend weiter. ## Deployment (Docker) Die App läuft als ein Container: Das Backend serviert die REST-API und das -gebaute Frontend intern über Port 8080, nach außen gemappt auf Host-Port 8090 -(siehe `docker-compose.yml`). +gebaute Frontend intern über Port 8080. `docker-compose.yml` ist auf den in +Coolify installierten Caddy-Proxy zugeschnitten (siehe Abschnitt +"Deployment in Coolify") — es wird kein Host-Port mehr veröffentlicht, +stattdessen hängt sich der Container über das externe Docker-Netzwerk +`coolify` in den Proxy ein und ist über die im `caddy`-Label hinterlegte +Domain erreichbar. + +Für einen rein lokalen Test außerhalb von Coolify muss das Netzwerk zuerst +angelegt werden, danach ist die App (ohne Domain/TLS) nur über die +Container-IP oder testweise per Port-Override erreichbar: ```bash +docker network create coolify # einmalig, falls nicht vorhanden docker compose up --build ``` -Danach ist die App unter http://localhost:8090 erreichbar. Die SQLite-Datenbank -liegt im Docker-Volume `data`. `ADMIN_EMAIL` vor dem ersten Start setzen (z. B. -in einer `.env`-Datei neben `docker-compose.yml`), damit ein Start-Admin für +Die SQLite-Datenbank liegt im Docker-Volume `data`. `ADMIN_EMAIL` vor dem +ersten Start setzen (z. B. in einer `.env`-Datei neben `docker-compose.yml`), +damit ein Start-Admin für einen bestehenden Mitarbeiter angelegt wird. ## Umstieg von der alten Version (ohne Login) @@ -150,15 +159,17 @@ beim nächsten Login vergeben. Mit `--password` wird sofort ein Passwort gesetzt 2. **Build-Pack**: **Docker Compose** wählen. Das mitgelieferte `docker-compose.yml` baut das `Dockerfile` (Multi-Stage: Vue-Build + Node-Server) und startet einen einzelnen Container. -3. **Port**: Der Container lauscht intern auf Port `8080`, im - `docker-compose.yml` auf Host-Port `8090` gemappt (Port 8080 war auf dem - Host bereits durch eine andere Ressource belegt → - `driver failed programming external connectivity ... port is already - allocated`). In Coolify unter "Domains"/der Port-Konfiguration der - Ressource **muss der Host-Port (8090) explizit eingetragen werden** — - das passiert nicht automatisch. Falls auch 8090 belegt sein sollte, in - `docker-compose.yml` einen anderen freien Host-Port wählen (z. B. - `"8091:8080"`) und die Coolify-Konfiguration entsprechend nachziehen. +3. **Routing über den Caddy-Proxy**: Der Container veröffentlicht keinen + Host-Port mehr, sondern hängt sich über das externe Netzwerk `coolify` + (von Coolify automatisch angelegt) in den von Coolify verwalteten + Caddy-Proxy ein. Die Labels in `docker-compose.yml` + (`caddy: ressourceksr.bbundco.de` / `caddy.reverse_proxy: + "{{upstreams 8080}}"`) sorgen dafür, dass Caddy die Domain automatisch + auf Container-Port `8080` routet und ein TLS-Zertifikat besorgt. Damit + das funktioniert, muss die Domain per DNS (A/AAAA-Record) auf den + Coolify-Host zeigen; einen zusätzlichen Domain-/Port-Eintrag in der + Coolify-UI braucht es für dieses Setup nicht mehr. Soll die App unter + einer anderen Domain laufen, das `caddy`-Label entsprechend anpassen. 4. **Persistenz**: Das Docker-Volume `data` sichert `server/data/data.db` (SQLite). Bei Redeploys bleiben die Daten erhalten, solange das Volume nicht gelöscht wird. Coolifys eingebaute Volume-Backup-Funktion kann diff --git a/docker-compose.yml b/docker-compose.yml index b51f020..bf13296 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,13 +1,22 @@ services: app: build: . - ports: - - "8090:8080" + expose: + - "8080" environment: - ADMIN_EMAIL=${ADMIN_EMAIL} volumes: - data:/app/server/data + networks: + - coolify + labels: + caddy: ressourceksr.bbundco.de + caddy.reverse_proxy: "{{upstreams 8080}}" restart: unless-stopped +networks: + coolify: + external: true + volumes: data: