diff --git a/.env b/.env index 127b150..3197bfd 100644 --- a/.env +++ b/.env @@ -1,7 +1,7 @@ JWT_SECRET=change-me ADMIN_USERNAME=admin ADMIN_EMAIL=admin@example.com -ADMIN_PASSWORD=ChangeMe123! +ADMIN_PASSWORD=SE3112 ADMIN_NAME=System Admin MARIADB_ROOT_PASSWORD=SE3112 DB_PASSWORD_FALLBACK=root diff --git a/README.md b/README.md index a9d9cae..caeb99e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# SE Local Trenddata +# SE Local Trenddata SE Local Trenddata ist eine webbasierte Trend-, Dashboard- und Quellenverwaltung fuer lokale Anlagen- und WAGO-Daten. Das Projekt besteht aus einem React-Frontend, einer Node.js/Express-API, MariaDB, Redis und einem Collector-Service fuer Protokollquellen wie Modbus TCP, OPC UA, BACnet IP und KNX IP. @@ -127,96 +127,75 @@ Wichtig: Die API laeuft im Container intern auf Port `8080`, wird aber nach auss ## Schnellstart mit Docker Compose +Du solltest WSL installiert haben. +Falls du das nicht hast: +```powershell + wsl --install Ubuntu +``` +Dann kannst du Docker Desktop installieren: + https://docs.docker.com/desktop/setup/install/windows-install/ +Die Installation einfach durchklicken und wenn du gefragt wirst ob du Hyper-V oder WSL verwenden möchtest, wähle WSL. + + ### 1. Repository vorbereiten +Wenn du git auf deinem rechner installiert hast, dann öffne eine Powershell in dem Ordner, in dem du das LTD-System haben willst. +(rechtsklick im Windowsexplorer ins leere --> "In Terminal öffnen") ```powershell -cd C:\Projects\SeLTD -copy .env.example .env +git clone https://git.portal.se-cloud.de/Hannes/SE-LTD +cd ./SeLTD ``` +Powershell nicht schließen, brauchst du gleich noch. -Passe danach mindestens diese Werte an: - -```env -JWT_SECRET=bitte-langen-zufaelligen-wert-setzen -ADMIN_USERNAME=admin -ADMIN_PASSWORD=ChangeMe123! -MARIADB_ROOT_PASSWORD=SE3112 -CORS_ORIGIN=http://localhost:5173 -VITE_API_PORT=18080 -``` ### 2. Stack bauen und starten -```powershell -docker compose up -d --build -``` - -Bei groesseren Aenderungen am Code oder wenn der Browser alten Code anzeigt: +Falls du Powershell geschlossen hast: +(rechtsklick im Windowsexplorer ins leere --> "In Terminal öffnen") ```powershell -docker compose down docker compose build --no-cache web api collector -docker compose up -d +docker compose up -d --force-recreate ``` +Die lokalen Images werden jetzt gebaut und die Onlineimages werden heruntrergeladen. +Wenn das fertig ist müssen alle 7 Container gestartet sein. + +Im Nachgang kannst du dies in der Powershell mit... +```powershell +docker ps -a +``` +...überprüfen ### 3. Aufrufen +Nun stehen dir mehrere Tools zur Verfügung: -| Anwendung | URL | -| --- | --- | -| Frontend | `http://localhost:5173` | -| API Healthcheck | `http://localhost:18080/api/health` | -| Collector Healthcheck | `http://localhost:18110/health` | -| Dockhand | `http://localhost:3000` | -| cAdvisor | `http://localhost:9090` | +Frontend | `http://localhost:5173` +--> Das ist die normale Weboberfläche zum anschauen, editieren und anpassen von Trends. + +API Healthcheck | `http://localhost:18080/api/health` +--> hier kannst du schauen ob die API läuft + +Collector Healthcheck | `http://localhost:18110/health` +--> hier kannst du schauen ob der Collector läuft, was nur wichtig ist, wenn du Datenpunkte per OPC,KNX, Modbus oder Bacnet angebunden hast. + +Dockhand | `http://localhost:3000` +--> Dockhand ist Container verwaltungstool, dass es dir ermöglicht, auch grafisch den Zustand deiner Container und deines Stacks zu sehen. + Der Vorteil hier, im Gegensatz zur normalen Docker Desktopoberfläche: Du kannst es auf jedem beliebigen anderen Rechner, der auf dein Netzwerk zugriff hat, öffnen. + +cAdvisor | `http://localhost:9090` +--> Cadvisor stellt alle Containerdaten für Monitoring und Analyticprogramme bereit. + So kann bei einer größeren Anlage, das Dockersystem mitr Prometheus oder ähnlichem überwacht werden. + Cadvisor stellt di Daten per html bereit, kannst du dir gern anschauen, ist aber ziemlich unübersichtlich. ### 4. Standard-Login ```text Username: admin -Passwort: ChangeMe123! +Passwort: SE3112 ``` -Das Passwort sollte nach dem ersten Login geaendert werden. - --- -## Lokale Entwicklung - -### Frontend lokal starten - -```powershell -cd C:\Projects\SeLTD\web -npm install -npm run dev -``` - -Das Frontend laeuft dann auf: - -```text -http://localhost:5173 -``` - -### API lokal starten - -```powershell -cd C:\Projects\SeLTD\api -npm install -npm run dev -``` - -Die API liest ihre Konfiguration aus `.env`. Wenn du die API lokal ohne Docker laufen laesst, muss `DB_HOST` auf den erreichbaren MariaDB-Host zeigen. - -### Collector lokal starten - -```powershell -cd C:\Projects\SeLTD\collector -npm install -npm start -``` - -Der Collector braucht Zugriff auf MariaDB und schreibt seine lokale Konfiguration in `collector/data/sources.json`. - ---- ## Konfiguration @@ -231,25 +210,12 @@ Die wichtigsten Variablen liegen in `.env`. | `ADMIN_NAME` | `System Admin` | Anzeigename des Admins | | `MARIADB_ROOT_PASSWORD` | `SE3112` | MariaDB-Root-Passwort | | `DB_PASSWORD_FALLBACK` | `root` | Fallback fuer alte Entwicklungsvolumes | -| `CORS_ORIGIN` | `http://localhost:5173` | Erlaubter Browser-Ursprung fuer API-Aufrufe | +| `CORS_ORIGIN` | `*` | Erlaubter Browser-Ursprung fuer API-Aufrufe | | `VITE_API_PORT` | `18080` | API-Port, den das Frontend im Browser nutzt | | `POLL_TICK_MS` | `1000` | Collector-Tick fuer Polling-Pruefung | -### CORS -Wenn das Frontend lokal auf `http://localhost:5173` laeuft, muss in der API stehen: -```env -CORS_ORIGIN=http://localhost:5173 -``` - -Bei mehreren erlaubten Origins kann eine kommaseparierte Liste genutzt werden: - -```env -CORS_ORIGIN=http://localhost:5173,https://trend.example.local -``` - ---- ## Login, Benutzer und Rollen @@ -479,32 +445,7 @@ Redis sollte deshalb ebenfalls gebackupt werden, nicht nur MariaDB. --- -## WAGO- oder SD-Karten-Betrieb -Fuer Systeme, bei denen persistente Daten auf SD-Karte liegen sollen, gibt es ein Override: - -```powershell -docker compose -f docker-compose.yml -f docker-compose.wago.yml up -d --build -``` - -Dabei werden grosse Daten nach `/media/sd/seltd/...` gelegt: - -```text -/media/sd/seltd/mariadb -/media/sd/seltd/redis -/media/sd/seltd/collector -/media/sd/seltd/dockhand -``` - -Vorher sicherstellen: - -```bash -mkdir -p /media/sd/seltd/mariadb /media/sd/seltd/redis /media/sd/seltd/collector /media/sd/seltd/dockhand -``` - ---- - -## Backup und Restore ### MariaDB Backup @@ -534,22 +475,6 @@ docker run --rm -v seltd_collector_data:/data -v ${PWD}:/backup alpine tar czf / --- -## Deployment-Hinweise - -### Nach Code-Aenderungen - -Wenn Frontend oder API geaendert wurden: - -```powershell -docker compose build --no-cache web api collector -docker compose up -d -``` - -Wenn nur `.env` geaendert wurde: - -```powershell -docker compose up -d -``` ### Browsercache @@ -559,7 +484,6 @@ Bei alten JavaScript-Fehlern nach einem Fix: Strg + F5 ``` -oder Vite/Docker neu bauen. ### Nginx Proxy Manager @@ -598,7 +522,7 @@ curl http://localhost:18080/api/health Wenn Frontend lokal auf `localhost:5173` laeuft: ```env -CORS_ORIGIN=http://localhost:5173 +CORS_ORIGIN=* ``` Danach API neu starten: @@ -619,45 +543,6 @@ docker compose up -d Danach im Browser `Strg + F5`. -### Fehler: `ReferenceError: editingCollectorPointId is not defined` - -In `web/src/App.jsx` muss folgender State vorhanden sein: - -```jsx -const [editingCollectorPointId, setEditingCollectorPointId] = useState(""); -``` - -Wenn die Zeile vorhanden ist, der Fehler aber weiterhin erscheint, laeuft noch altes Build-/Container-Material. - -### Fehler: `SyntaxError: missing ) after argument list` in `isp.js` - -Bei SQL-Template-Strings muessen Backticks im String escaped werden: - -```js -missing.push(`ADD COLUMN \`${columnName}\` TEXT NULL`); -``` - -### Fehler: `Rollup failed to resolve import "jspdf"` - -Abhaengigkeiten im Frontend installieren: - -```powershell -cd web -npm install jspdf xlsx recharts -``` - -Bei Docker danach neu bauen. - -### Source-Map-Warnungen im Browser - -Warnungen wie diese sind in der Regel nicht kritisch: - -```text -Source map error: JSON.parse: unexpected character... -``` - -Sie kommen oft aus Devtools/React-Devtools oder externen Source-Maps und koennen ignoriert werden, solange keine roten Laufzeitfehler auftreten. - ### MariaDB Login oder DB-Verbindung fehlgeschlagen Logs ansehen: @@ -750,7 +635,6 @@ Vor produktiver Nutzung: - [ ] `JWT_SECRET` auf langen zufaelligen Wert setzen - [ ] Admin-Passwort aendern - [ ] MariaDB-Root-Passwort aendern -- [ ] `CORS_ORIGIN` nicht auf `*` lassen, sondern feste Domain setzen - [ ] MariaDB-Port `3306` nicht ungeschuetzt ins Internet veroeffentlichen - [ ] Redis-Port `6379` nicht ungeschuetzt ins Internet veroeffentlichen - [ ] Dockhand absichern oder nur intern bereitstellen @@ -768,31 +652,3 @@ Vor produktiver Nutzung: - Fuer vollstaendige Protokollintegration muessen je nach Feldbus noch Details wie Adressierung, Datentyp, Byteorder und Authentifizierung sauber projektspezifisch gepflegt werden. --- - -## Kurzfassung fuer Betrieb - -```powershell -cd C:\Projects\SeLTD -copy .env.example .env -notepad .env -docker compose up -d --build -``` - -Dann aufrufen: - -```text -http://localhost:5173 -``` - -Login: - -```text -admin / ChangeMe123! -``` - -Bei Code-Aenderungen: - -```powershell -docker compose build --no-cache web api collector -docker compose up -d -``` diff --git a/docker/mariadb/init/01-init.sql b/docker/mariadb/init/01-init.sql index 768ce7c..b41a4f2 100644 --- a/docker/mariadb/init/01-init.sql +++ b/docker/mariadb/init/01-init.sql @@ -22,7 +22,7 @@ BEGIN '` (', '`id` INT(11) NOT NULL AUTO_INCREMENT,', '`datum` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,', - '`userlevel` INT(1) NOT NULL', + '`userlevel` INT(1) DEFAULT NULL', value_columns, ', PRIMARY KEY (`id`)', ') ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;' @@ -64,5 +64,5 @@ FLUSH PRIVILEGES; CREATE USER IF NOT EXISTS 'wago'@'%' IDENTIFIED BY '3112'; -GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX ON `wago`.* TO 'wago'@'%'; +GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX ON * . * TO 'wago'@'%' IDENTIFIED BY '3112'; FLUSH PRIVILEGES;