docker-compose.yml auf Coolify-Caddy-Proxy umgestellt

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 <noreply@anthropic.com>
This commit is contained in:
2026-07-11 01:19:41 +02:00
parent 06ea149d41
commit 1ef398ddfb
2 changed files with 36 additions and 16 deletions
+25 -14
View File
@@ -87,16 +87,25 @@ per Proxy an das Backend weiter.
## Deployment (Docker) ## Deployment (Docker)
Die App läuft als ein Container: Das Backend serviert die REST-API und das 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 gebaute Frontend intern über Port 8080. `docker-compose.yml` ist auf den in
(siehe `docker-compose.yml`). 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 ```bash
docker network create coolify # einmalig, falls nicht vorhanden
docker compose up --build docker compose up --build
``` ```
Danach ist die App unter http://localhost:8090 erreichbar. Die SQLite-Datenbank Die SQLite-Datenbank liegt im Docker-Volume `data`. `ADMIN_EMAIL` vor dem
liegt im Docker-Volume `data`. `ADMIN_EMAIL` vor dem ersten Start setzen (z. B. ersten Start setzen (z. B. in einer `.env`-Datei neben `docker-compose.yml`),
in einer `.env`-Datei neben `docker-compose.yml`), damit ein Start-Admin für damit ein Start-Admin für
einen bestehenden Mitarbeiter angelegt wird. einen bestehenden Mitarbeiter angelegt wird.
## Umstieg von der alten Version (ohne Login) ## 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 2. **Build-Pack**: **Docker Compose** wählen. Das mitgelieferte
`docker-compose.yml` baut das `Dockerfile` (Multi-Stage: Vue-Build + `docker-compose.yml` baut das `Dockerfile` (Multi-Stage: Vue-Build +
Node-Server) und startet einen einzelnen Container. Node-Server) und startet einen einzelnen Container.
3. **Port**: Der Container lauscht intern auf Port `8080`, im 3. **Routing über den Caddy-Proxy**: Der Container veröffentlicht keinen
`docker-compose.yml` auf Host-Port `8090` gemappt (Port 8080 war auf dem Host-Port mehr, sondern hängt sich über das externe Netzwerk `coolify`
Host bereits durch eine andere Ressource belegt → (von Coolify automatisch angelegt) in den von Coolify verwalteten
`driver failed programming external connectivity ... port is already Caddy-Proxy ein. Die Labels in `docker-compose.yml`
allocated`). In Coolify unter "Domains"/der Port-Konfiguration der (`caddy: ressourceksr.bbundco.de` / `caddy.reverse_proxy:
Ressource **muss der Host-Port (8090) explizit eingetragen werden** "{{upstreams 8080}}"`) sorgen dafür, dass Caddy die Domain automatisch
das passiert nicht automatisch. Falls auch 8090 belegt sein sollte, in auf Container-Port `8080` routet und ein TLS-Zertifikat besorgt. Damit
`docker-compose.yml` einen anderen freien Host-Port wählen (z. B. das funktioniert, muss die Domain per DNS (A/AAAA-Record) auf den
`"8091:8080"`) und die Coolify-Konfiguration entsprechend nachziehen. 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` 4. **Persistenz**: Das Docker-Volume `data` sichert `server/data/data.db`
(SQLite). Bei Redeploys bleiben die Daten erhalten, solange das Volume (SQLite). Bei Redeploys bleiben die Daten erhalten, solange das Volume
nicht gelöscht wird. Coolifys eingebaute Volume-Backup-Funktion kann nicht gelöscht wird. Coolifys eingebaute Volume-Backup-Funktion kann
+11 -2
View File
@@ -1,13 +1,22 @@
services: services:
app: app:
build: . build: .
ports: expose:
- "8090:8080" - "8080"
environment: environment:
- ADMIN_EMAIL=${ADMIN_EMAIL} - ADMIN_EMAIL=${ADMIN_EMAIL}
volumes: volumes:
- data:/app/server/data - data:/app/server/data
networks:
- coolify
labels:
caddy: ressourceksr.bbundco.de
caddy.reverse_proxy: "{{upstreams 8080}}"
restart: unless-stopped restart: unless-stopped
networks:
coolify:
external: true
volumes: volumes:
data: data: