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

87 lines
3.4 KiB
Markdown
Raw Permalink 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 intern über Port 8080, nach außen gemappt auf Host-Port 8090
(siehe `docker-compose.yml`).
```bash
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.