docs: add troubleshooting guide and fix permissions script for database issues
- Introduced a comprehensive troubleshooting guide for common application errors, particularly focusing on database permission issues after migrating databases. - Added a script to automate the fixing of database permissions, ensuring SQLite can write to the necessary files and directories. - Included detailed steps for diagnosing and resolving various container and database-related problems to enhance user support.
This commit is contained in:
75
scripts/fix-database-permissions.sh
Executable file
75
scripts/fix-database-permissions.sh
Executable file
@@ -0,0 +1,75 @@
|
||||
#!/bin/bash
|
||||
# Script zum Reparieren von Datenbank-Berechtigungen
|
||||
# Wichtig: Wenn eine Datenbank von einem anderen Server kopiert wurde,
|
||||
# müssen die Berechtigungen angepasst werden, damit SQLite schreiben kann.
|
||||
|
||||
set -e
|
||||
|
||||
echo "🔧 Repariere Datenbank-Berechtigungen..."
|
||||
|
||||
# Datenbank-Pfad aus docker-compose.yml oder .env ermitteln
|
||||
DB_DIR="./data"
|
||||
DB_FILE="$DB_DIR/prod.db"
|
||||
|
||||
# Prüfe ob Datenbankverzeichnis existiert
|
||||
if [ ! -d "$DB_DIR" ]; then
|
||||
echo "❌ Datenbankverzeichnis '$DB_DIR' existiert nicht!"
|
||||
echo " Erstelle Verzeichnis..."
|
||||
mkdir -p "$DB_DIR"
|
||||
fi
|
||||
|
||||
# Prüfe ob Datenbankdatei existiert
|
||||
if [ ! -f "$DB_FILE" ]; then
|
||||
echo "⚠️ Datenbankdatei '$DB_FILE' existiert nicht!"
|
||||
echo " Das ist okay, wenn du eine neue Datenbank erstellst."
|
||||
echo ""
|
||||
echo " Setze Berechtigungen für das Verzeichnis..."
|
||||
else
|
||||
echo "✅ Datenbankdatei gefunden: $DB_FILE"
|
||||
fi
|
||||
|
||||
# Setze Berechtigungen für Datenbankverzeichnis
|
||||
# SQLite braucht Schreibrechte auf:
|
||||
# 1. Die Datenbankdatei selbst
|
||||
# 2. Das Verzeichnis (für -wal und -shm Dateien)
|
||||
|
||||
echo "📝 Setze Berechtigungen..."
|
||||
|
||||
# Verzeichnis: Lesen, Schreiben, Ausführen für Owner und Gruppe
|
||||
chmod 775 "$DB_DIR"
|
||||
|
||||
# Datenbankdatei: Lesen und Schreiben für Owner und Gruppe
|
||||
if [ -f "$DB_FILE" ]; then
|
||||
chmod 664 "$DB_FILE"
|
||||
|
||||
# Auch für alle SQLite-temporären Dateien
|
||||
chmod 664 "$DB_DIR"/*.db-wal 2>/dev/null || true
|
||||
chmod 664 "$DB_DIR"/*.db-shm 2>/dev/null || true
|
||||
chmod 664 "$DB_DIR"/*.db-journal 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# Setze Besitzer (wichtig: Container läuft als root laut docker-compose.yml)
|
||||
# Aber falls ein bestimmter User benötigt wird:
|
||||
if [ -n "$SUDO_USER" ]; then
|
||||
echo "👤 Setze Besitzer auf: $SUDO_USER"
|
||||
chown -R "$SUDO_USER:$SUDO_USER" "$DB_DIR"
|
||||
else
|
||||
echo "ℹ️ Container läuft als root, keine Besitzer-Änderung nötig"
|
||||
fi
|
||||
|
||||
# Prüfe aktuelle Berechtigungen
|
||||
echo ""
|
||||
echo "📋 Aktuelle Berechtigungen:"
|
||||
ls -lh "$DB_DIR"/*.db* 2>/dev/null || echo " (Keine .db Dateien gefunden)"
|
||||
|
||||
echo ""
|
||||
echo "✅ Berechtigungen gesetzt!"
|
||||
echo ""
|
||||
echo "💡 Wichtig für SQLite:"
|
||||
echo " - Die Datenbankdatei braucht Schreibrechte (rw-rw-r--)"
|
||||
echo " - Das Verzeichnis braucht Schreibrechte (rwxrwxr-x)"
|
||||
echo " - SQLite erstellt temporäre Dateien (-wal, -shm) im gleichen Verzeichnis"
|
||||
echo ""
|
||||
echo "🔄 Starte Container neu, damit die Änderungen wirksam werden:"
|
||||
echo " docker compose restart hoerdle"
|
||||
|
||||
Reference in New Issue
Block a user