Update README with deployment and env docs

This commit is contained in:
Bjoern Welker
2026-01-30 08:58:52 +01:00
parent 81a1ed7eef
commit 1bcaad503a

120
README.md
View File

@@ -2,8 +2,8 @@
## Überblick ## Überblick
Dieses Repository enthält: Dieses Repository enthält:
- **WaWiApp** (Flask + SQLite) für Artikelverwaltung, Ausbuchen und Verkäufe. - **WaWiApp** (Flask + SQLite) für Artikelverwaltung, Ausbuchen, Verkäufe und Bestellungen.
- **LiveBestand Ansicht** (`index.html`) die den Bestand aus der WaWiAPI lädt. - **LiveShopAnsicht** (`index.html`) lädt Daten aus der WaWiApp.
- **ImportScript** für Daten aus der ursprünglichen `hellas_bestand.html`. - **ImportScript** für Daten aus der ursprünglichen `hellas_bestand.html`.
## Struktur ## Struktur
@@ -12,14 +12,14 @@ Dieses Repository enthält:
- `wawi/static/` Styles + Logo - `wawi/static/` Styles + Logo
- `wawi/hellas.db` SQLiteDatenbank (wird automatisch erstellt) - `wawi/hellas.db` SQLiteDatenbank (wird automatisch erstellt)
- `wawi/import_from_html.py` Import aus `hellas_bestand.html` - `wawi/import_from_html.py` Import aus `hellas_bestand.html`
- `index.html` LiveBestand Ansicht (ruft `/wawi/proxy/bestand`) - `index.html` LiveShopAnsicht (ruft `/wawi/proxy/bestand`)
## WaWi lokal starten ## WaWi lokal starten
```bash ```bash
cd wawi cd wawi
python3 -m venv .venv python3 -m venv .venv
source .venv/bin/activate source .venv/bin/activate
pip install flask pip install flask gunicorn
python app.py python app.py
``` ```
Standardzugriff: Login über Benutzerverwaltung (siehe unten). Standardzugriff: Login über Benutzerverwaltung (siehe unten).
@@ -38,19 +38,115 @@ cd wawi
python import_from_html.py /pfad/zu/hellas_bestand.html --truncate python import_from_html.py /pfad/zu/hellas_bestand.html --truncate
``` ```
## LiveBestand Ansicht (index.html) ## LiveShopAnsicht (index.html)
`index.html` lädt den Bestand aus der WaWiApp: `index.html` lädt den Bestand aus der WaWiApp:
- APIProxy: `/wawi/proxy/bestand` - APIProxy: `/wawi/proxy/bestand`
Wenn du diese Datei auf einem Webserver auslieferst, stelle sicher, dass die WaWiApp unter `/wawi` erreichbar ist. Wenn du diese Datei auf einem Webserver auslieferst, stelle sicher, dass die WaWiApp unter `/wawi` erreichbar ist.
## Deployment (Kurz) ## Umgebungsvariablen (ENV)
**Pflicht/Empfohlen für Produktion**
- `SECRET_KEY` SessionSecret
- `APP_USER` / `APP_PASSWORD` initialer AdminUser
- `URL_PREFIX` z. B. `/wawi` (wenn hinter SubPfad)
**EMail (Bestellungen)**
- `SMTP_HOST` SMTPServer
- `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` APIKey für direkten Zugriff auf `/wawi/api/bestand`
## Deployment (systemd + Gunicorn)
1) App nach `/var/www/hellas/wawi` kopieren 1) App nach `/var/www/hellas/wawi` kopieren
2) Gunicorn + systemd starten 2) venv erstellen:
3) Nginx ReverseProxy auf `/wawi` ```bash
cd /var/www/hellas/wawi
python3 -m venv .venv
source .venv/bin/activate
pip install flask gunicorn
```
3) ServiceDatei anlegen: `/etc/systemd/system/hellas.service`
```
[Unit]
Description=Hellas WaWi
After=network.target
Für Produktion setze: [Service]
- `SECRET_KEY` (SessionCookie) User=www-data
- `APP_USER`, `APP_PASSWORD` (Admin) Group=www-data
- optional `APP_API_KEY` (für direkten APIZugriff) 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@hellas.welker.me"
Environment="ORDER_TO=bjoern@welker.me, zweite@domain.de"
Environment="APP_API_KEY=api_f4b8e1c97a2d4e5b8c6a9d3e2f7b1a0c"
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 (ReverseProxy + ShopSeite)
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 (Lets 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
```
## Backup (Beispiel)
```bash
sudo /root/fix_wawi_permissions.sh
```