From af69060f2c73e8eb5cbaaa84ed09c7e061e5542e Mon Sep 17 00:00:00 2001 From: samuelzielke Date: Wed, 30 Sep 2026 12:29:22 +0200 Subject: [PATCH] DB in eigenes data/-Verzeichnis verschieben (Schreibrechte-Fix) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- .gitignore | 2 ++ db.sqlite3 | 0 piomint/settings.py | 10 +++++++++- 3 files changed, 11 insertions(+), 1 deletion(-) delete mode 100644 db.sqlite3 diff --git a/.gitignore b/.gitignore index b3a6dbc..3f433b2 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,6 @@ venv/ */__pycache__* */migrations* */.DS_Store +/data/ +db.sqlite3 diff --git a/db.sqlite3 b/db.sqlite3 deleted file mode 100644 index e69de29..0000000 diff --git a/piomint/settings.py b/piomint/settings.py index 3ce2e42..d453014 100644 --- a/piomint/settings.py +++ b/piomint/settings.py @@ -85,10 +85,18 @@ WSGI_APPLICATION = 'piomint.wsgi.application' # https://docs.djangoproject.com/en/5.1/ref/settings/#databases #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 = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': BASE_DIR / 'db.sqlite3', + 'NAME': DATA_DIR / 'db.sqlite3', } }