DB in eigenes data/-Verzeichnis verschieben (Schreibrechte-Fix)

Auf dem Server läuft Gunicorn als www-data, Deployment (git pull/migrate)
aber als root. db.sqlite3 lag bisher direkt im Projektordner, den nur root
beschreiben kann - www-data konnte also nie in die DB schreiben (Sessions,
jetzt auch UsageEvent). Naheliegender Fix wäre gewesen, www-data Schreibzugriff
auf den ganzen Projektordner zu geben, das hätte aber auch den Quellcode/.git
für den Webserver-Prozess beschreibbar gemacht - unnötiges Risiko.

Stattdessen: SQLite liegt jetzt in data/db.sqlite3, einem eigenen, isolierten
Verzeichnis (wird von Django automatisch angelegt). Nur dieses eine
Verzeichnis muss www-data gehören, der Rest des Projekts bleibt root-only.

- piomint/settings.py: DATABASES zeigt auf DATA_DIR (BASE_DIR/data), die per
  Path.mkdir(exist_ok=True) beim Settings-Import automatisch angelegt wird
- .gitignore: /data/ und db.sqlite3 ergänzt - die echte Datenbank darf nie
  ins Repo gelangen (Sessions/User-Daten)
- Alte, ungenutzte db.sqlite3 (leerer Platzhalter) aus dem Repo entfernt

Lokal getestet: frisches migrate legt data/db.sqlite3 automatisch an,
Track-Endpoint und Dashboard-Auth-Schutz funktionieren mit dem neuen Pfad.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
main
Samuel Zielke 3 weeks ago
parent 710220ff71
commit af69060f2c

2
.gitignore vendored

@ -2,4 +2,6 @@ venv/
*/__pycache__* */__pycache__*
*/migrations* */migrations*
*/.DS_Store */.DS_Store
/data/
db.sqlite3

@ -85,10 +85,18 @@ WSGI_APPLICATION = 'piomint.wsgi.application'
# https://docs.djangoproject.com/en/5.1/ref/settings/#databases # https://docs.djangoproject.com/en/5.1/ref/settings/#databases
#STANDART DATENBANK #STANDART DATENBANK
# SQLite liegt bewusst in einem eigenen data/-Verzeichnis außerhalb des Quellcodes:
# Auf dem Server läuft Gunicorn als www-data, das Deployment (git pull/migrate) aber
# als root - nur so kann www-data die DB beschreiben, ohne dass der ganze Projektordner
# (inkl. .git) für den Webserver-Prozess beschreibbar sein muss. Verzeichnis wird bei
# Bedarf automatisch angelegt; data/ ist in .gitignore, landet also nie im Repo.
DATA_DIR = BASE_DIR / 'data'
DATA_DIR.mkdir(parents=True, exist_ok=True)
DATABASES = { DATABASES = {
'default': { 'default': {
'ENGINE': 'django.db.backends.sqlite3', 'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3', 'NAME': DATA_DIR / 'db.sqlite3',
} }
} }

Loading…
Cancel
Save

Powered by TurnKey Linux.