fix: Datenbank-Pfad in Docker - relative Pfade aus .env falsch aufgeloest
Problem: Nach Umstellung auf env_file in docker-compose wurden die relativen Pfade (./data/minicloud.db) aus .env falsch aufgeloest. basedir zeigte auf / statt /app, dadurch wurde eine neue leere DB unter /data/ erstellt statt die bestehende unter /app/data/ zu nutzen. Ergebnis: Alle User weg, Login unmoeglich. Fix: - config.py: _resolve_path nutzt Path.cwd() fuer relative Pfade (in Docker CWD=/app, in Dev CWD=backend/) - .env.example: Absolute Docker-Pfade als Default (/app/data/minicloud.db statt ./data/minicloud.db) mit Kommentar fuer Entwicklungsumgebung Auf dem Server muss die .env angepasst werden: DATABASE_PATH=/app/data/minicloud.db UPLOAD_PATH=/app/data/files Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
c23205d2a6
commit
97cb4c7748
|
|
@ -8,10 +8,12 @@ FLASK_ENV=production
|
|||
FLASK_DEBUG=0
|
||||
|
||||
# Datenbank
|
||||
DATABASE_PATH=./data/minicloud.db
|
||||
# Docker: /app/data/minicloud.db | Entwicklung: ./data/minicloud.db
|
||||
DATABASE_PATH=/app/data/minicloud.db
|
||||
|
||||
# Dateispeicher
|
||||
UPLOAD_PATH=./data/files
|
||||
# Docker: /app/data/files | Entwicklung: ./data/files
|
||||
UPLOAD_PATH=/app/data/files
|
||||
|
||||
# JWT
|
||||
# Token generieren: python3 -c "import secrets; print(secrets.token_urlsafe(64))"
|
||||
|
|
|
|||
|
|
@ -2,23 +2,31 @@ import os
|
|||
from datetime import timedelta
|
||||
from pathlib import Path
|
||||
|
||||
# Project root: backend/app/config.py -> backend/app -> backend -> project_root
|
||||
basedir = Path(__file__).resolve().parent.parent.parent
|
||||
|
||||
def _resolve_path(env_var, default_subpath):
|
||||
"""Resolve a path from environment variable.
|
||||
|
||||
- Absolute paths (/app/data/...) are used as-is
|
||||
- Relative paths (./data/...) are resolved relative to CWD
|
||||
- No env var: use default relative to CWD
|
||||
"""
|
||||
env_val = os.environ.get(env_var, '').strip()
|
||||
if not env_val:
|
||||
return str(Path.cwd() / default_subpath)
|
||||
if os.path.isabs(env_val):
|
||||
return env_val
|
||||
return str(Path.cwd() / env_val)
|
||||
|
||||
|
||||
class Config:
|
||||
SECRET_KEY = os.environ.get('SECRET_KEY', 'dev-secret-key-change-me')
|
||||
|
||||
# Database - always resolve relative to project root
|
||||
_db_default = str(basedir / 'data' / 'minicloud.db')
|
||||
_db_env = os.environ.get('DATABASE_PATH', '')
|
||||
_db_path = str(basedir / _db_env) if _db_env and not os.path.isabs(_db_env) else (_db_env or _db_default)
|
||||
SQLALCHEMY_DATABASE_URI = f'sqlite:///{_db_path}'
|
||||
# Database
|
||||
SQLALCHEMY_DATABASE_URI = f'sqlite:///{_resolve_path("DATABASE_PATH", "data/minicloud.db")}'
|
||||
SQLALCHEMY_TRACK_MODIFICATIONS = False
|
||||
|
||||
# File uploads - always resolve relative to project root
|
||||
_upload_env = os.environ.get('UPLOAD_PATH', '')
|
||||
UPLOAD_PATH = str(basedir / _upload_env) if _upload_env and not os.path.isabs(_upload_env) else (_upload_env or str(basedir / 'data' / 'files'))
|
||||
# File uploads
|
||||
UPLOAD_PATH = _resolve_path('UPLOAD_PATH', 'data/files')
|
||||
MAX_CONTENT_LENGTH = int(os.environ.get('MAX_UPLOAD_SIZE_MB', 500)) * 1024 * 1024
|
||||
|
||||
# JWT
|
||||
|
|
|
|||
Loading…
Reference in New Issue