CI / backend-tests (push) Failing after 1s
Installer (deploy/): - install_server.sh: PostgreSQL+nginx auf Debian 13, idempotente Rolle/DB-Anlage, pgcrypto-Extension, Speicher-Tuning für 4GB-VPS, Zugangsdaten in chmod-600-Datei statt stdout (postgres-expert/owasp-Review) - nginx-Template mit Security-Headern + Rate-Limit auf /auth/login - systemd-Unit-Template mit Sandboxing (NoNewPrivileges/ProtectSystem/PrivateTmp) Backend-Fixes (fastapi-expert-Review): - get_db: einheitliche commit/rollback-Konvention statt Endpunkt-Copy-Paste - Test-Fixtures auf SQLAlchemy-2.0-Savepoint-Pattern umgestellt (join_transaction_mode), da get_db jetzt selbst committet - Lifespan-Handler: Startup-Guard gegen JWT-Secret-Platzhalter, engine.dispose() beim Shutdown - JWT-Payload ohne ungenutztes roles-Claim (Rollen kommen immer frisch aus der DB) Zusätzlich: Subagenten-Definitionen (~/.claude/agents/) auf lauffähiges Modell fixiert. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L85hmKbvX7Cqkq47KnQhFt
34 lines
1.3 KiB
Plaintext
34 lines
1.3 KiB
Plaintext
# limit_req_zone gehört in den http-Kontext (hier: via sites-enabled-Include-Kette
|
|
# bereits innerhalb von http{}, aber außerhalb des server{}-Blocks nötig).
|
|
# Grober Schutz gegen Brute-Force auf Login, ergänzt (nicht ersetzt) die
|
|
# Rate-Begrenzung/Lockout auf Anwendungsebene, die noch aussteht (Review-Fund).
|
|
limit_req_zone $binary_remote_addr zone=mabea_login:10m rate=5r/m;
|
|
|
|
server {
|
|
listen 80;
|
|
server_name __APP_DOMAIN__;
|
|
|
|
# Basis-Hardening-Header (Review-Fund owasp-top10-expert). Sobald TLS aktiv ist,
|
|
# zusätzlich Strict-Transport-Security ergänzen.
|
|
add_header X-Content-Type-Options nosniff always;
|
|
add_header X-Frame-Options DENY always;
|
|
add_header Referrer-Policy strict-origin-when-cross-origin always;
|
|
|
|
location /api/v1/auth/login {
|
|
limit_req zone=mabea_login burst=5 nodelay;
|
|
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;
|
|
}
|
|
|
|
location / {
|
|
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;
|
|
}
|
|
}
|