Discourse (Bitnami): Rechte korrekt setzen für Volumes & Konfiguration

Wenn du Discourse mit dem Bitnami Discourse Docker-Container betreibst, musst du sicherstellen, dass alle Datenverzeichnisse korrekt angelegt und berechtigt sind. Fehlerhafte Rechte führen häufig zu Startproblemen bei Datenbank, Redis oder der Web-App.

:brain: Warum sind Berechtigungen so wichtig?

  • PostgreSQL, Redis, Sidekiq und Discourse benötigen Zugriff auf ihre jeweiligen Datenverzeichnisse.
  • .env-Dateien werden zur Laufzeit vom Container geladen, um Einstellungen wie Zugangsdaten, SMTP oder Ports zu konfigurieren.
  • Die falschen UIDs/GIDs oder chmods verhindern das Schreiben in Volumes – und Discourse kann nicht starten.

:package: Automatisiert alles vorbereiten: Bash-Skript für Bitnami Discourse

Dieses Skript ist speziell für Bitnami Discourse Container vorbereitet und übernimmt das Anlegen der Volumes sowie das Setzen der passenden Berechtigungen. Es erstellt zusätzlich eine .env-Datei mit Beispieldaten:

🔧 Klick zum Anzeigen des Skripts
#!/bin/bash

# Basispfad der Containerdaten
BASE_DIR="/opt/containers/discourse"
USER_ID=1001
GROUP_ID=1001

echo "📁 Erstelle Basisverzeichnis: $BASE_DIR"
mkdir -p "$BASE_DIR"
cd "$BASE_DIR" || exit 1

echo "📁 Erstelle Unterverzeichnisse für Volumes..."
mkdir -p postgresql_data redis_data discourse_data sidekiq_data

echo "🔑 Setze Eigentümer für Bitnami-kompatible Container (UID:GID = $USER_ID:$GROUP_ID)..."
chown -R $USER_ID:$GROUP_ID "$BASE_DIR/postgresql_data"
chown -R $USER_ID:$GROUP_ID "$BASE_DIR/redis_data"
chown -R lxd:docker "$BASE_DIR/discourse_data"
chown -R $USER_ID:$GROUP_ID "$BASE_DIR/sidekiq_data"

echo "🔒 Setze Berechtigungen: nur Besitzer darf lesen/schreiben..."
chmod -R 700 "$BASE_DIR/postgresql_data"
chmod -R 700 "$BASE_DIR/redis_data"
chmod -R 700 "$BASE_DIR/discourse_data"
chmod -R 700 "$BASE_DIR/sidekiq_data"

# .env-Datei vorbereiten, wenn sie nicht existiert
ENV_FILE="$BASE_DIR/.env"
if [ ! -f "$ENV_FILE" ]; then
  echo "⚙️  Erstelle .env-Datei mit Platzhaltern..."
  cat <<EOF > "$ENV_FILE"
# Database Config
POSTGRES_USER=bn_discourse
POSTGRES_PW=securepassword
POSTGRES_DBNAME=bitnami_discourse
# DISCOURSE Config
DISCOURSE_HOST=example.com
DISCOURSE_DBHOST=postgresql
DISCOURSE_PORT=5432
DISCOURSE_USERNAME=adminuser
DISCOURSE_PASSWORD=supersecure
DISCOURSE_EMAIL=admin@example.com
# REDIS Config
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PW=redispassword
# SMTP Config
DISCOURSE_SMTP_HOST=smtp.example.com
DISCOURSE_SMTP_PORT=587
DISCOURSE_SMTP_USER=mailer@example.com
DISCOURSE_SMTP_PW='smtppassword'
DISCOURSE_SMTP_PROTOCOL=tls
DISCOURSE_SMTP_AUTH=login
EOF
  chmod 600 "$ENV_FILE"
  echo "✅ .env wurde erstellt unter $ENV_FILE – bitte anpassen!"
else
  echo "ℹ️  .env-Datei existiert bereits – übersprungen."
fi

echo "✅ Einrichtung abgeschlossen."

:pushpin: Wichtig nach dem Ausführen

:white_check_mark: Passe die .env-Datei mit deinen echten Daten an, bevor du den Container startest.
:white_check_mark: Vergewissere dich, dass der Container-Nutzer dieselbe UID wie $USER_ID verwendet.
:white_check_mark: Starte dein Discourse-Setup mit:

docker-compose up -d

:speech_balloon: Tipp: Dieses Skript funktioniert besonders gut mit einem Discourse-Setup, das auf dem offiziellen Bitnami-Image basiert. Bei Fragen oder Verbesserungen – schreib uns in die Kommentare!