This commit is contained in:
@@ -6,33 +6,75 @@ beim Essensportal-Projekt. Postgres-Datenbank.
|
||||
|
||||
## Start
|
||||
|
||||
Es gibt bewusst **keine `.env`-Datei** – alle Einstellungen (DB-Zugangsdaten,
|
||||
Port, `SECRET_KEY`, `MASCHINEN_PASSWORT`) stehen direkt in `docker-compose.yml`.
|
||||
Vor dem ersten Start dort alle `BITTE-AENDERN-...`-Platzhalter durch echte
|
||||
Werte ersetzen (Datenbank-Passwort bei `ens-db` und `ens-app` muss identisch
|
||||
sein), dann:
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
# .env anpassen (Passwort etc.)
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
Die Anwendung ist danach unter `http://<server>:8090/` erreichbar (Port über
|
||||
`APP_PORT` in `.env` änderbar).
|
||||
Die Anwendung ist danach unter `http://<server>:8081/` erreichbar (Port
|
||||
direkt im `ports:`-Abschnitt von `docker-compose.yml` änderbar).
|
||||
|
||||
**Wichtig zur DB-Initialisierung:** `build/db/init.sql` (= dein hochgeladenes Schema,
|
||||
ergänzt um ein paar Beispiel-Abweichungsgründe) wird **nur beim allerersten
|
||||
Start** ausgeführt, wenn das Datenvolume noch leer ist. Hast du bereits eine
|
||||
bestehende Postgres-Datenbank mit Daten, dann:
|
||||
|
||||
- entweder das `db`-Volume vor dem ersten Start leer lassen und `init.sql`
|
||||
anpassen/ersetzen, **oder**
|
||||
- den `db`-Service in `docker-compose.yml` entfernen und stattdessen über
|
||||
`DB_HOST` / `DB_PORT` / `DB_NAME` / `DB_USER` / `DB_PASSWORD` in der `.env`
|
||||
- entweder das Datenverzeichnis vor dem ersten Start leer lassen und
|
||||
`init.sql` anpassen/ersetzen, **oder**
|
||||
- den `ens-db`-Service in `docker-compose.yml` entfernen und stattdessen über
|
||||
`DB_HOST` / `DB_PORT` / `DB_NAME` / `DB_USER` / `DB_PASSWORD` bei `ens-app`
|
||||
auf deine bestehende Datenbank zeigen.
|
||||
|
||||
> **Achtung, bitte prüfen:** `ens-db` bindet aktuell als Volume das Verzeichnis
|
||||
> `/var/lib/docker/volumes/postgresql_ens_data` ein. Laut eurer eigenen
|
||||
> System-Doku ist genau das der Datenbankpfad des *bestehenden* Budibase-
|
||||
> Systems. Läuft Budibase parallel mit seiner eigenen Postgres-Instanz auf
|
||||
> demselben Host, würden zwei unabhängige Postgres-Prozesse gleichzeitig auf
|
||||
> dasselbe Datenverzeichnis schreiben – das kann das Datenverzeichnis
|
||||
> beschädigen. Bitte kurz gegenprüfen, ob das so beabsichtigt ist (z.B. weil
|
||||
> Budibase dort inzwischen abgelöst ist) oder ob hier versehentlich der
|
||||
> falsche Pfad übernommen wurde; im Zweifel einen eigenen, neuen Pfad/Volume
|
||||
> für `ens-db` verwenden.
|
||||
|
||||
## Bauen und Verteilen als Container
|
||||
|
||||
Bei jedem Push nach `main` bzw. auf einen `v*`-Tag baut die Gitea-Actions-
|
||||
Pipeline (`.gitea/workflows/build.yml`) automatisch ein Image und pusht es in
|
||||
die Gitea-Registry (getaggt als `:latest` und mit dem Commit-Hash).
|
||||
|
||||
Für einen **anderen Server**, der nur das fertige Image ziehen und selbst
|
||||
nichts bauen soll, gibt es `docker-compose.deploy.yml`: sie referenziert das
|
||||
Image direkt aus der Registry (`image: git.thiede-brauer.de/bryan.hoffmann/wdm:latest`,
|
||||
kein `build:`). Auf diesem Server reicht allein diese eine Datei – der Rest
|
||||
des Repos wird dort nicht benötigt:
|
||||
|
||||
```bash
|
||||
docker login git.thiede-brauer.de -u <benutzername> # falls die Registry nicht öffentlich lesbar ist
|
||||
docker compose -f docker-compose.deploy.yml up -d
|
||||
```
|
||||
|
||||
Update auf eine neue Version:
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose.deploy.yml pull
|
||||
docker compose -f docker-compose.deploy.yml up -d
|
||||
```
|
||||
|
||||
Auch hier gilt: keine `.env`, alle Werte direkt in `docker-compose.deploy.yml`
|
||||
eintragen (dieselben Werte wie beim Bauen, insbesondere das DB-Passwort).
|
||||
|
||||
## Aufruf der einzelnen Seiten
|
||||
|
||||
- Maschine N (1–40): `http://<server>:8090/m<N>`
|
||||
z.B. `http://<server>:8090/m1`
|
||||
- Produktionsleiter: `http://<server>:8090/start`
|
||||
- Maschine N (1–40): `http://<server>:8081/m<N>`
|
||||
z.B. `http://<server>:8081/m1`
|
||||
- Produktionsleiter: `http://<server>:8081/start`
|
||||
|
||||
**Alte/lange URL-Form:** `http://<server>:8090/m<N>_m_view_main` (z.B.
|
||||
**Alte/lange URL-Form:** `http://<server>:8081/m<N>_m_view_main` (z.B.
|
||||
`.../m1_m_view_main`) funktioniert unverändert weiter und zeigt auf
|
||||
dieselbe Seite. Sie bleibt bewusst zusätzlich zur kurzen Form erhalten,
|
||||
damit bereits auf Tablets als Kiosk-Startseite/Lesezeichen hinterlegte
|
||||
@@ -122,9 +164,10 @@ location /app/wdm-performance/ {
|
||||
- **Maschinenverwaltung** (`/start_maschinen_verwaltung`, passwortgeschützt):
|
||||
Maschinen anlegen, umbenennen/Standort ändern, löschen (nur möglich wenn
|
||||
keine Aufträge mehr an der Maschine hängen). Passwort über die
|
||||
Umgebungsvariable `MASCHINEN_PASSWORT` in der `.env` konfigurierbar
|
||||
(Standard `admin` – bitte unbedingt ändern!). Für die Login-Session wird
|
||||
zusätzlich ein `SECRET_KEY` benötigt (ebenfalls in der `.env` setzen).
|
||||
Umgebungsvariable `MASCHINEN_PASSWORT` in `docker-compose.yml` konfigurierbar
|
||||
(unbedingt vom Platzhalter auf einen echten Wert ändern!). Für die
|
||||
Login-Session wird zusätzlich ein `SECRET_KEY` benötigt (ebenfalls dort
|
||||
gesetzt).
|
||||
|
||||
### Aufträge importieren (`/start_import`)
|
||||
Excel- (.xlsx) oder CSV-Datei mit (mindestens) diesen Spalten hochladen
|
||||
@@ -160,10 +203,12 @@ Prioritätsliste und (sofern gerade ein Auftrag aktiv ist) auch in der
|
||||
Maschinenübersicht ("Zu Maschine springen") mit angezeigt.
|
||||
|
||||
### Logo / Icon
|
||||
`build/static/logo.svg` wird als Favicon und (in doppelter Standardgröße,
|
||||
104×104px) über dem Seitentitel angezeigt. Einfach durch eine eigene Datei
|
||||
mit demselben Namen (`logo.svg`, idealerweise quadratisch) ersetzen, um das
|
||||
Firmenlogo einzubinden – kein Code muss dafür angepasst werden.
|
||||
`build/static/logo.svg` wird als Favicon und über dem Seitentitel angezeigt.
|
||||
Die Darstellung ist proportional (feste Höhe 130px, Breite skaliert automatisch
|
||||
im echten Seitenverhältnis mit) – funktioniert also auch mit einem breiten,
|
||||
nicht-quadratischen Logo. Einfach durch eine eigene Datei mit demselben Namen
|
||||
(`logo.svg`) ersetzen, um das Firmenlogo einzubinden – kein Code muss dafür
|
||||
angepasst werden.
|
||||
|
||||
### JavaScript-Einsatz (Ausnahmen vom "kein Client-JS"-Grundsatz)
|
||||
Zwei bewusste, punktuelle Ausnahmen von der sonst reinen Server-Side-
|
||||
@@ -189,11 +234,12 @@ Rendering-Philosophie:
|
||||
## Struktur
|
||||
|
||||
```
|
||||
wdm-performance/
|
||||
wdm/
|
||||
├── Dockerfile Build-Anweisungen (Kontext = Projektwurzel)
|
||||
├── docker-compose.yml
|
||||
├── docker-compose.yml lokal bauen/testen (build: .)
|
||||
├── docker-compose.deploy.yml nur Image ziehen (für andere Server)
|
||||
├── .gitea/workflows/build.yml CI: baut Image und pusht in die Gitea-Registry
|
||||
├── README.md
|
||||
├── .env.example
|
||||
└── build/
|
||||
├── app.py Flask-Anwendung (alle Routen, Server-Side-Rendering)
|
||||
├── db.py DB-Pool mit Retry-Logik
|
||||
|
||||
+24
-18
@@ -1,9 +1,15 @@
|
||||
# Für ANDERE Docker-Instanzen: zieht nur das fertig gebaute Image,
|
||||
# baut nicht selbst aus dem Quellcode. Diese Datei (+ .env) reicht dort aus,
|
||||
# der Rest des Repos wird nicht benötigt.
|
||||
# Für ANDERE Docker-Instanzen: zieht nur das fertig gebaute Image aus der
|
||||
# Gitea-Registry, baut nicht selbst aus dem Quellcode. Diese eine Datei
|
||||
# reicht auf dem Zielserver aus, der Rest des Repos wird dort nicht benötigt.
|
||||
#
|
||||
# Vor dem ersten Start einmalig einloggen:
|
||||
# docker login git.meinefirma.de -u <benutzername>
|
||||
# Es gibt bewusst KEINE .env - alle Werte stehen direkt hier. Vor dem
|
||||
# produktiven Einsatz alle "BITTE-AENDERN"-Platzhalter ersetzen (DB-Passwort
|
||||
# muss mit dem beim Bauen verwendeten Wert übereinstimmen) und diese Datei
|
||||
# danach entsprechend schützen (Klartext-Zugangsdaten).
|
||||
#
|
||||
# Vor dem ersten Start ggf. einmalig an der Registry anmelden (falls sie
|
||||
# nicht öffentlich lesbar ist):
|
||||
# docker login git.thiede-brauer.de -u <benutzername>
|
||||
#
|
||||
# Start:
|
||||
# docker compose -f docker-compose.deploy.yml up -d
|
||||
@@ -18,15 +24,15 @@ services:
|
||||
container_name: ens-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_DB: ${DB_NAME:-wdm}
|
||||
POSTGRES_USER: ${DB_USER:-wdm}
|
||||
POSTGRES_PASSWORD: ${DB_PASSWORD:-wdm}
|
||||
POSTGRES_DB: postgres
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: "BITTE-AENDERN-DB-PASSWORT"
|
||||
ports:
|
||||
- "5432:5432"
|
||||
volumes:
|
||||
- /var/lib/docker/volumes/postgresql_ens_data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-wdm} -d ${DB_NAME:-wdm}"]
|
||||
test: ["CMD-SHELL", "pg_isready -U postgres -d postgres"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
@@ -34,9 +40,9 @@ services:
|
||||
oom_score_adj: -200
|
||||
|
||||
ens-app:
|
||||
# Statt "build: ." wird hier das fertige Image aus der Gitea/Forgejo-
|
||||
# Registry gezogen. Owner/Repo-Name muss klein geschrieben sein.
|
||||
image: git.meinefirma.de/owner/ens:latest
|
||||
# Statt "build: ." wird hier das fertige Image aus der Gitea-Registry
|
||||
# gezogen. Owner/Repo-Name muss klein geschrieben sein (Docker-Vorgabe).
|
||||
image: git.thiede-brauer.de/bryan.hoffmann/wdm:latest
|
||||
container_name: ens-app
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
@@ -45,13 +51,13 @@ services:
|
||||
environment:
|
||||
DB_HOST: ens-db
|
||||
DB_PORT: 5432
|
||||
DB_NAME: ${DB_NAME:-wdm}
|
||||
DB_USER: ${DB_USER:-wdm}
|
||||
DB_PASSWORD: ${DB_PASSWORD:-wdm}
|
||||
SECRET_KEY: ${SECRET_KEY:-bitte-in-der-.env-aendern}
|
||||
MASCHINEN_PASSWORT: ${MASCHINEN_PASSWORT:-admin}
|
||||
DB_NAME: postgres
|
||||
DB_USER: postgres
|
||||
DB_PASSWORD: "BITTE-AENDERN-DB-PASSWORT"
|
||||
SECRET_KEY: "BITTE-AENDERN-LANGER-ZUFALLSWERT"
|
||||
MASCHINEN_PASSWORT: "BITTE-AENDERN-MASCHINEN-PASSWORT"
|
||||
ports:
|
||||
- "${APP_PORT:-8090}:5000"
|
||||
- "8081:5000"
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-fsS", "http://localhost:5000/api/health"]
|
||||
interval: 30s
|
||||
|
||||
+22
-10
@@ -1,18 +1,30 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# Lokales Bauen/Testen. Alle Einstellungen stehen direkt hier in der Datei -
|
||||
# es gibt bewusst KEINE .env mehr. Vor dem produktiven Einsatz alle
|
||||
# "BITTE-AENDERN"-Platzhalter durch echte, individuelle Werte ersetzen und
|
||||
# diese Datei danach entsprechend schützen (enthält Klartext-Zugangsdaten,
|
||||
# nicht ungeschützt in ein öffentliches Repo pushen).
|
||||
#
|
||||
# Für das Bauen+Verteilen als Container: das Gitea-Actions-Workflow
|
||||
# (.gitea/workflows/build.yml) baut bei jedem Push auf main/Tag automatisch
|
||||
# ein Image und pusht es in die Registry. Zum Deployment auf einem ANDEREN
|
||||
# Server (der nur zieht, nicht selbst baut) siehe docker-compose.deploy.yml.
|
||||
# ---------------------------------------------------------------------------
|
||||
services:
|
||||
ens-db:
|
||||
image: postgres:17
|
||||
container_name: ens-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_DB: ${DB_NAME:-wdm}
|
||||
POSTGRES_USER: ${DB_USER:-wdm}
|
||||
POSTGRES_PASSWORD: ${DB_PASSWORD:-wdm}
|
||||
POSTGRES_DB: postgres
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: "BITTE-AENDERN-DB-PASSWORT"
|
||||
ports:
|
||||
- "5432:5432"
|
||||
volumes:
|
||||
- /var/lib/docker/volumes/postgresql_ens_data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-wdm} -d ${DB_NAME:-wdm}"]
|
||||
test: ["CMD-SHELL", "pg_isready -U postgres -d postgres"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
@@ -29,13 +41,13 @@ services:
|
||||
environment:
|
||||
DB_HOST: ens-db
|
||||
DB_PORT: 5432
|
||||
DB_NAME: ${DB_NAME:-wdm}
|
||||
DB_USER: ${DB_USER:-wdm}
|
||||
DB_PASSWORD: ${DB_PASSWORD:-wdm}
|
||||
SECRET_KEY: ${SECRET_KEY:-bitte-in-der-.env-aendern}
|
||||
MASCHINEN_PASSWORT: ${MASCHINEN_PASSWORT:-admin}
|
||||
DB_NAME: postgres
|
||||
DB_USER: postgres
|
||||
DB_PASSWORD: "BITTE-AENDERN-DB-PASSWORT"
|
||||
SECRET_KEY: "BITTE-AENDERN-LANGER-ZUFALLSWERT"
|
||||
MASCHINEN_PASSWORT: "BITTE-AENDERN-MASCHINEN-PASSWORT"
|
||||
ports:
|
||||
- "${APP_PORT:-8090}:5000"
|
||||
- "8081:5000"
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-fsS", "http://localhost:5000/api/health"]
|
||||
interval: 30s
|
||||
|
||||
Reference in New Issue
Block a user