7a7b6408a3cc5306bcbc9de49763dbdcfcff3de9
Coolify deployment failed with "port is already allocated" since 8080 was already bound by another resource on the host. Container still listens on 8080 internally; host mapping moved to 8090.
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%