Files

1.6 KiB

Flask Deploy Pattern (PersoEnt, 19.07.2026)

venv anlegen (Ubuntu 24.04)

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:

[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/)

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:

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)