Make image Coolify-ready: fix native module build, add healthcheck

- .dockerignore fehlte, wodurch node_modules vom Host (macOS-Binaries)
  das im Container frisch installierte better-sqlite3 überschrieben hat
  (invalid ELF header). node_modules jetzt rekursiv ausgeschlossen.
- Finales Image von node:20-alpine auf node:20-slim gewechselt, da
  better-sqlite3-Prebuilds gegen glibc gelinkt sind und auf musl/Alpine
  nicht laden.
- HEALTHCHECK gegen /health ergänzt.
- README um Coolify-Deployment-Anleitung erweitert.
This commit is contained in:
2026-07-03 23:08:46 +02:00
parent fc25eff643
commit 74c9fee38e
3 changed files with 30 additions and 1 deletions
+23
View File
@@ -57,3 +57,26 @@ docker compose up --build
Danach ist die App unter http://localhost:8080 erreichbar. Die SQLite-Datenbank
liegt im Docker-Volume `data`.
## Deployment in Coolify
1. **Repository verbinden**: Dieses Repo (`admin/ressourcenplanung` auf Gitea)
in Coolify als neue Ressource hinzufügen (New Resource → Application →
Gitea-Repo auswählen).
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 auf Port `8080`. In Coolify unter
"Domains"/der Port-Konfiguration der Ressource **muss dieser Port (8080)
explizit eingetragen werden** — das passiert nicht automatisch. Falls
Port 8080 auf dem Host bereits von einer anderen Coolify-Ressource belegt
ist, in `docker-compose.yml` den Host-Port anpassen (z. B. `"8081:8080"`)
und die Coolify-Konfiguration entsprechend nachziehen.
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
dafür verwendet werden.
5. **Healthcheck**: Das Image bringt einen `HEALTHCHECK` gegen `/health`
mit; Coolify nutzt ihn automatisch, um den Container-Status anzuzeigen.
6. **Deploy** klicken. Beim allerersten Start legt der Server automatisch
`data.db` an und befüllt sie mit Beispieldaten.