56 lines
1.6 KiB
Markdown
56 lines
1.6 KiB
Markdown
# Flask Deploy Pattern (PersoEnt, 19.07.2026)
|
|
|
|
## venv anlegen (Ubuntu 24.04)
|
|
```bash
|
|
apt-get install -y python3.12-venv
|
|
python3 -m venv /var/www/<projekt>/backend/venv
|
|
/var/www/<projekt>/backend/venv/bin/pip install flask flask-cors requests
|
|
```
|
|
|
|
## systemd Service
|
|
`/etc/systemd/system/<projekt>-api.service`:
|
|
```ini
|
|
[Unit]
|
|
Description=<Projekt> API (Flask)
|
|
After=network.target
|
|
|
|
[Service]
|
|
User=www-data
|
|
Group=www-data
|
|
WorkingDirectory=/var/www/<projekt>/backend
|
|
Environment=PATH=/var/www/<projekt>/backend/venv/bin
|
|
ExecStart=/var/www/<projekt>/backend/venv/bin/python app.py
|
|
Restart=always
|
|
RestartSec=5
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
```
|
|
|
|
## Kritisch: Berechtigungen nach jedem File-Edit!
|
|
`patch`/`write_file`/`sed` ändern den Owner → `chown www-data:www-data app.py` VOR `systemctl restart`!
|
|
Sonst: `Permission denied` + Restart-Loop.
|
|
|
|
## Nginx (in sites-enabled/<domain>)
|
|
```nginx
|
|
location /api/ {
|
|
proxy_pass http://127.0.0.1:5000/api/;
|
|
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;
|
|
}
|
|
```
|
|
`nginx -t && systemctl reload nginx`
|
|
|
|
## Token in Code schreiben (NICHT via sed!)
|
|
⚠️ `sed -i "s|^PB_TOKEN = .*|PB_TOKEN = \"$TOKEN\"|"` schneidet langen Token ab (Terminal kürzt bei Display, aber das Problem: sed ersetzt mit gekürztem Wert wenn Variable im Heredoc/SSH-Kontext kaputt ist).
|
|
**Sicher:** Python-Script nutzen:
|
|
```python
|
|
import re
|
|
token = "VOLLER_TOKEN"
|
|
with open('app.py') as f: c = f.read()
|
|
c = re.sub(r'PB_TOKEN = ".*"', f'PB_TOKEN = "{token}"', c)
|
|
with open('app.py','w') as f: f.write(c)
|
|
```
|