884f26bf25adced664efceafe9524539241b5abf
Bestehende Deployments mit dem alten name-Feld verlieren beim Redeploy keine Daten mehr: db.js erkennt das alte Schema (PRAGMA table_info), splittet name in first_name/last_name und übernimmt alle Zeilen, statt die Tabelle neu anzulegen. Läuft nur einmal (Spalte "name" existiert danach nicht mehr) und lässt neue Datenbanken unverändert.
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 intern über Port 8080, nach außen gemappt auf Host-Port 8090
(siehe docker-compose.yml).
docker compose up --build
Danach ist die App unter http://localhost:8090 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 intern auf Port
8080, imdocker-compose.ymlauf Host-Port8090gemappt (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, indocker-compose.ymleinen anderen freien Host-Port wählen (z. B."8091: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.
Description
Languages
JavaScript
61.4%
Vue
33.3%
CSS
4.3%
Dockerfile
0.7%
HTML
0.3%