Files
ressourcenplanung/README.md
T
admin 7a7b6408a3 Fix port conflict on Coolify host: map to 8090 instead of 8080
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.
2026-07-03 23:22:26 +02:00

3.4 KiB
Raw Permalink Blame History

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

  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 intern auf Port 8080, im docker-compose.yml auf Host-Port 8090 gemappt (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, in docker-compose.yml einen anderen freien Host-Port wählen (z. B. "8091: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.