Faktenkompass: UI-Rebrand, Admin-Assistent und Produktions-Setup.

Modernisiert die öffentliche Oberfläche mit Inter, Dark Mode und Live-Suche, ergänzt KI-gestützte Entwürfe im Admin mit Nachweis-Uploads und dokumentiert Daphne/Nginx für den Serverbetrieb.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Pirmin Hinderling (fedora)
2026-07-07 15:33:58 +02:00
parent 2c7fb7d030
commit db3558872e
43 changed files with 3014 additions and 208 deletions
+183
View File
@@ -80,6 +80,163 @@ export DB_PORT=5432
Installieren Sie zusätzlich `psycopg2-binary` und führen Sie `migrate` erneut aus.
## Produktion (Daphne + Nginx)
Für den Serverbetrieb wird [Daphne](https://github.com/django/daphne) als ASGI-Server empfohlen. Nginx dient als Reverse Proxy und liefert statische Dateien sowie Uploads aus.
### 1. Umgebungsvariablen
Legen Sie z. B. `/etc/faktenkompass.env` an:
```bash
DJANGO_SETTINGS_MODULE=faktenkompass.settings
DJANGO_DEBUG=False
DJANGO_SECRET_KEY=lange-zufaellige-zeichenkette
ALLOWED_HOSTS=faktenkompass.example.com,www.faktenkompass.example.com
DB_ENGINE=django.db.backends.postgresql
DB_NAME=faktenkompass
DB_USER=faktenkompass
DB_PASSWORD=geheim
DB_HOST=127.0.0.1
DB_PORT=5432
OPENAI_API_KEY=sk-...
```
Optional in `faktenkompass/settings.py` für HTTPS hinter Nginx ergänzen:
```python
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
CSRF_TRUSTED_ORIGINS = ['https://faktenkompass.example.com']
```
`SECRET_KEY`, `DEBUG` und `ALLOWED_HOSTS` sollten in der Produktion aus Umgebungsvariablen gelesen werden.
### 2. Deployment vorbereiten
```bash
cd /pfad/zu/ArgumentAtlas
source .venv/bin/activate
pip install -r requirements.txt
python manage.py migrate
python manage.py collectstatic --noinput
python manage.py createsuperuser # falls noch nicht vorhanden
```
Stellen Sie sicher, dass der Prozessnutzer Schreibrechte für `media/` und die Datenbank hat.
### 3. Daphne manuell testen
```bash
set -a && source /etc/faktenkompass.env && set +a
daphne -b 127.0.0.1 -p 8001 faktenkompass.asgi:application
```
Die App lauscht dann nur lokal auf Port `8001` der öffentliche Zugriff erfolgt über Nginx.
### 4. systemd-Dienst
Datei `/etc/systemd/system/faktenkompass.service`:
```ini
[Unit]
Description=Faktenkompass (Daphne ASGI)
After=network.target postgresql.service
[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/pfad/zu/ArgumentAtlas
EnvironmentFile=/etc/faktenkompass.env
ExecStart=/pfad/zu/ArgumentAtlas/.venv/bin/daphne \
-b 127.0.0.1 \
-p 8001 \
--access-log /var/log/faktenkompass/access.log \
--proxy-headers \
faktenkompass.asgi:application
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
```
Log-Verzeichnis anlegen und Dienst aktivieren:
```bash
sudo mkdir -p /var/log/faktenkompass
sudo chown www-data:www-data /var/log/faktenkompass
sudo systemctl daemon-reload
sudo systemctl enable --now faktenkompass
sudo systemctl status faktenkompass
```
`--proxy-headers` setzt voraus, dass Nginx die Header `X-Forwarded-For`, `X-Forwarded-Proto` und `Host` korrekt weitergibt.
### 5. Nginx-Konfiguration
Datei `/etc/nginx/sites-available/faktenkompass`:
```nginx
upstream faktenkompass {
server 127.0.0.1:8001;
}
server {
listen 80;
server_name faktenkompass.example.com;
client_max_body_size 25M;
location /static/ {
alias /pfad/zu/ArgumentAtlas/staticfiles/;
expires 30d;
access_log off;
}
location /media/ {
alias /pfad/zu/ArgumentAtlas/media/;
expires 7d;
access_log off;
}
location / {
proxy_pass http://faktenkompass;
proxy_http_version 1.1;
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;
proxy_redirect off;
}
}
```
Aktivieren und testen:
```bash
sudo ln -s /etc/nginx/sites-available/faktenkompass /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
```
Für HTTPS: Certbot/Let's Encrypt verwenden (`certbot --nginx`).
### 6. Updates einspielen
```bash
cd /pfad/zu/ArgumentAtlas
source .venv/bin/activate
git pull
pip install -r requirements.txt
python manage.py migrate
python manage.py collectstatic --noinput
sudo systemctl restart faktenkompass
```
## Projektstruktur
```
@@ -123,6 +280,32 @@ Optional: Titel, Bildunterschrift und Reihenfolge. Hochgeladene Dateien erschein
Dateien werden unter `media/evidence/` gespeichert. In der Produktion muss der Webserver Medien-Dateien ausliefern (z. B. über Nginx).
### Fakten-Assistent (KI im Admin)
Der Assistent hilft beim Anlegen neuer Behauptungen per ChatGPT. **Nichts wird automatisch veröffentlicht** jeder Entwurf muss zuerst geprüft werden.
**Einrichtung:**
```bash
export OPENAI_API_KEY=sk-...
# optional: OPENAI_MODEL=gpt-4o-mini, OPENAI_MODEL_VISION=gpt-4o
```
**Nutzung:**
1. Admin öffnen → **Fakten-Assistent** (Startseite oder unter Fakten-Entwürfe)
2. Artikel-URL, Beschreibung und/oder Bild/PDF eingeben
3. **Entwurf generieren** die KI schlägt Kategorie, Behauptung, Quellen und Gegenargumente vor
4. Entwurf prüfen, bearbeiten, ggf. **KI erneut fragen**
5. Erst mit **Veröffentlichen** wird der Eintrag live geschaltet
**Sicherheit:**
- Nur für eingeloggte Staff-Nutzer
- Artikel-URLs: SSRF-Schutz (keine internen/privaten Adressen)
- API-Schlüssel nur serverseitig (Umgebungsvariable), nie im Frontend
- Hochgeladene Dateien werden erst nach Freigabe als Nachweis verknüpft
## Lizenz
Projekt für den internen Gebrauch / Bildungszwecke.