# Hellas – Bestand & WaWi ## Überblick Dieses Repository enthält: - **WaWi‑App** (Flask + SQLite) für Artikelverwaltung, Ausbuchen, Verkäufe und Bestellungen. - **Live‑Shop‑Ansicht** (`index.html`) lädt Daten aus der WaWi‑App. - **Import‑Script** für Daten aus der ursprünglichen `hellas_bestand.html`. ## Struktur - `wawi/app.py` – Flask‑App (CRUD, Ausbuchen, Verkäufe, Benutzerverwaltung) - `wawi/templates/` – HTML‑Templates der WaWi‑App - `wawi/static/` – Styles + Logo - `wawi/hellas.db` – SQLite‑Datenbank (wird automatisch erstellt) - `wawi/import_from_html.py` – Import aus `hellas_bestand.html` - `index.html` – Live‑Shop‑Ansicht (ruft `/wawi/proxy/bestand`) ## WaWi lokal starten ```bash cd wawi python3 -m venv .venv source .venv/bin/activate pip install flask gunicorn python app.py ``` Standardzugriff: Login über Benutzerverwaltung (siehe unten). ## Developer (ENV variablen) Diese App liest Konfiguration ausschließlich aus Umgebungsvariablen. Für lokale Entwicklung kannst du sie direkt im Shell-Session setzen oder eine `.env`-Datei in dein Startup-Script laden. Minimal sinnvoll für lokal: - `SECRET_KEY` – Session-Secret (beliebiger String) - `APP_USER` / `APP_PASSWORD` – initialer Admin-User - `URL_PREFIX` – leer lassen, wenn lokal ohne Sub-Pfad Für Bestellungen per Mail zusätzlich: - `SMTP_HOST`, `SMTP_PORT`, `SMTP_USER`, `SMTP_PASS` - `SMTP_FROM`, `ORDER_TO` Optional: - `APP_API_KEY` – Schutz fuer `/wawi/api/bestand` und `/wawi/order` - `COOKIE_SECURE` – `0` fuer http lokal, `1` fuer https ## Benutzerverwaltung Beim ersten Start wird **ein Admin** aus ENV erzeugt: - `APP_USER` (default: `admin`) - `APP_PASSWORD` (default: `admin`) Passwörter werden **gehasht** gespeichert. Über `/users` können weitere Benutzer angelegt und Passwörter zurückgesetzt werden. ## Import aus hellas_bestand.html ```bash cd wawi python import_from_html.py /pfad/zu/hellas_bestand.html --truncate ``` ## Live‑Shop‑Ansicht (index.html) `index.html` lädt den Bestand aus der WaWi‑App: - API‑Proxy: `/wawi/proxy/bestand` Wenn du diese Datei auf einem Webserver auslieferst, stelle sicher, dass die WaWi‑App unter `/wawi` erreichbar ist. Wenn du Bestellungen direkt aus `index.html` abschickst, muss der `X-Order-Key` bzw. `?key=` dem `APP_API_KEY` entsprechen. Der Key wird in `index.html` im Script‑Block gesetzt: `const ORDER_KEY = ""` (neben der Formularlogik). Trage dort deinen Key ein. ## Umgebungsvariablen (ENV) **Pflicht/Empfohlen für Produktion** - `SECRET_KEY` – Session‑Secret - `APP_USER` / `APP_PASSWORD` – initialer Admin‑User - `URL_PREFIX` – z. B. `/wawi` (wenn hinter Sub‑Pfad) **E‑Mail (Bestellungen)** - `SMTP_HOST` – SMTP‑Server - `SMTP_PORT` – z. B. `587` - `SMTP_USER` / `SMTP_PASS` – SMTP Login - `SMTP_FROM` – Absender (z. B. `bestand@hellas.welker.me`) - `ORDER_TO` – Empfänger, mehrere per Komma **Optional** - `APP_API_KEY` – gemeinsamer API‑Key für `/wawi/api/bestand` **und** `/wawi/order` - `COOKIE_SECURE` – `1` (default) setzt Secure‑Cookie, `0` deaktiviert für http ## Deployment (systemd + Gunicorn) 1) App nach `/var/www/hellas/wawi` kopieren 2) venv erstellen: ```bash cd /var/www/hellas/wawi python3 -m venv .venv source .venv/bin/activate pip install flask gunicorn ``` 3) Service‑Datei anlegen: `/etc/systemd/system/hellas.service` ``` [Unit] Description=Hellas WaWi After=network.target [Service] User=www-data Group=www-data WorkingDirectory=/var/www/hellas/wawi Environment="PATH=/var/www/hellas/wawi/.venv/bin" Environment="URL_PREFIX=/wawi" Environment="SECRET_KEY=DEIN_SECRET" Environment="APP_USER=admin" Environment="APP_PASSWORD=starkesPasswort" Environment="SMTP_HOST=smtp.example.com" Environment="SMTP_PORT=587" Environment="SMTP_USER=dein_user" Environment="SMTP_PASS=dein_pass" Environment="SMTP_FROM=bestand@example.com" Environment="ORDER_TO=admin@example.com, zweite@example.com" Environment="APP_API_KEY=api_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ExecStart=/var/www/hellas/wawi/.venv/bin/gunicorn -w 3 -b 127.0.0.1:8000 app:app Restart=always [Install] WantedBy=multi-user.target ``` 4) Aktivieren: ```bash sudo systemctl daemon-reload sudo systemctl enable --now hellas ``` ## Nginx (Reverse‑Proxy + Shop‑Seite) Beispiel `/etc/nginx/sites-available/hellas`: ``` server { listen 80; server_name hellas.welker.me; location = / { root /var/www/hellas; try_files /index.html =404; } location /wawi/ { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` Aktivieren: ```bash sudo ln -s /etc/nginx/sites-available/hellas /etc/nginx/sites-enabled/hellas sudo nginx -t sudo systemctl reload nginx ``` ## SSL (Let’s Encrypt) ```bash sudo apt install -y certbot python3-certbot-nginx sudo certbot --nginx -d hellas.welker.me ``` ## Dateirechte (SQLite + Uploads) ```bash sudo chown -R www-data:www-data /var/www/hellas/wawi sudo chmod 750 /var/www/hellas/wawi sudo chmod 640 /var/www/hellas/wawi/hellas.db sudo mkdir -p /var/www/hellas/wawi/static/uploads sudo chown -R www-data:www-data /var/www/hellas/wawi/static/uploads ``` ## Fix‑Permissions Script (inkl. Uploads) `/root/fix_wawi_permissions.sh` sollte auch das Upload‑Verzeichnis setzen: ```bash #!/bin/sh set -e chown -R www-data:www-data /var/www/hellas/wawi chmod 750 /var/www/hellas/wawi chmod 640 /var/www/hellas/wawi/hellas.db mkdir -p /var/www/hellas/wawi/static/uploads chown -R www-data:www-data /var/www/hellas/wawi/static/uploads systemctl restart hellas ```