74c9fee38e
- .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.
3.1 KiB
3.1 KiB
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
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
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.
docker compose up --build
Danach ist die App unter http://localhost:8080 erreichbar. Die SQLite-Datenbank
liegt im Docker-Volume data.
Deployment in Coolify
- Repository verbinden: Dieses Repo (
admin/ressourcenplanungauf Gitea) in Coolify als neue Ressource hinzufügen (New Resource → Application → Gitea-Repo auswählen). - Build-Pack: Docker Compose wählen. Das mitgelieferte
docker-compose.ymlbaut dasDockerfile(Multi-Stage: Vue-Build + Node-Server) und startet einen einzelnen Container. - 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, indocker-compose.ymlden Host-Port anpassen (z. B."8081:8080") und die Coolify-Konfiguration entsprechend nachziehen. - Persistenz: Das Docker-Volume
datasichertserver/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. - Healthcheck: Das Image bringt einen
HEALTHCHECKgegen/healthmit; Coolify nutzt ihn automatisch, um den Container-Status anzuzeigen. - Deploy klicken. Beim allerersten Start legt der Server automatisch
data.dban und befüllt sie mit Beispieldaten.