Files
ressourcenplanung/README.md
T
admin 74c9fee38e 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.
2026-07-03 23:08:46 +02:00

83 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Ressourcenplanung
Leichtgewichtige App zur Planung von Projekten, Aufgaben, Mitarbeitern und Teams
mit Zeitplan (Gantt), Auslastungs-Heatmap und Team-Verwaltung. Daten liegen in SQLite.
## Aufbau
```
ressourcenplanung/
├── server/ Node/Express + SQLite (better-sqlite3)
│ ├── schema.sql Tabellen & Beziehungen
│ ├── db.js DB-Init + Beispieldaten
│ └── index.js REST-API (CRUD + Auslastungsberechnung)
└── client/ Vue 3 + Vite
└── src/
├── App.vue Tab-Navigation
├── SchedulePanel.vue Gantt-Zeitplan
├── UtilizationPanel.vue Auslastungs-Heatmap
├── ProjectsPanel.vue Projekte/Aufgaben inkl. Zuweisungen
├── EmployeesPanel.vue Mitarbeiter
├── TeamsPanel.vue Teams (n:m-Mitgliedschaft)
├── store.js Reaktiver State + CRUD gegen die API
├── api.js API-Client
└── helpers.js Datum-/Gantt-/Farbberechnung
```
## Lokale Entwicklung
Zwei Terminals.
**1) Backend**
```bash
cd server
npm install
npm run dev # startet auf http://localhost:8080
```
Beim ersten Start wird `server/data/data.db` angelegt und mit Beispieldaten befüllt.
**2) Frontend**
```bash
cd client
npm install
npm run dev # startet auf http://localhost:5173
```
Browser auf http://localhost:5173 öffnen. Vite leitet `/api` und `/health`
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 über denselben Port 8080.
```bash
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.