Discourse mit Docker für die Entwicklung installieren

Die Grundursache könnte darin liegen, dass pg15 die Standard-Authentifizierungsregeln geändert hat.

Konfigurationsdateipfad: /etc/postgresql/15/main/pg_hba.conf

Inhalt der Datei:

# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host all all 0.0.0.0/0 md5
# IPv6 local connections:
host all all ::/0 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            scram-sha-256
host    replication     all             ::1/128                 scram-sha-256

Der Befehl, der für das Backup ausgeführt wurde:

pg_dump --schema=public -T public.pg_* --file=‘/src/tmp/backups/default/2026-02-02-063003/dump.sql.gz’ --no-owner --no-privileges --verbose --compress=4 --username=postgres discourse_development

Aufgrund der Regel local all postgres peer schlägt der obige Befehl mit dem Fehler fehl: Peer authentication failed for user "postgres"

Lösungsansatz: Ändern Sie peer in trust, um alle Befehle in der lokalen Umgebung zuzulassen. Das bedeutet, dass für alle Befehle keine Authentifizierung mehr erforderlich ist (und auch kein Passwort eingegeben werden muss).

Konkrete Schritte:

  1. Kopieren Sie /etc/postgresql/15/main/pg_hba.conf aus dem Container auf Ihren lokalen Rechner

sudo docker cp discourse_dev:/etc/postgresql/15/main/pg_hba.conf ~/discourse/data/pg_hba.conf

Berechtigungen auf 644 setzen

sudo chmod 644 ~/discourse/data/pg_hba.conf

Konfiguration in data/pg_hba.conf ändern

# Database administrative login by Unix domain socket
local   all   postgres   trust
  1. Ändern Sie die Datei d/boot_dev, um data/pg_hba.conf in den Container einzubinden und so die Standardkonfigurationsdatei von pg zu überschreiben.
docker run -d \
    -p $local_publish:8025:8025 \
    -p $local_publish:3000:3000 \
    -p $local_publish:4200:4200 \
    -p $local_publish:9292:9292 \
    -p $local_publish:9405:9405 \
    -v "$DATA_DIR:/shared/postgres_data:delegated" \
    # Die folgende Zeile ist neu, sie bindet die Konfigurationsdatei in den Container ein und gibt dem Container nur Lesezugriff
    -v "$SOURCE_DIR/data/pg_hba.conf:/etc/postgresql/15/main/pg_hba.conf:ro" \
    -v "$SOURCE_DIR:/src:delegated" \
    -e UNICORN_BIND_ALL=true \
    $mount_plugin_symlinks \
    $ENV_ARGS \
    --hostname=discourse \
    --name=discourse_dev \
    --restart=always \
    discourse/discourse_dev:release /sbin/boot
  1. Stoppen und löschen Sie den aktuellen Container und erstellen Sie dann den neuen Container neu
d/shotdown_dev
d/boot_dev
  1. Nach der Neuerstellung starten Sie die Frontend- und Backend-Anwendungen und testen Sie, ob das Backup normal funktioniert
d/rails s

# In einem anderen Terminal ausführen
d/ember-cli

Klicken Sie auf der Backup-Seite auf Sichern, warten Sie einige Sekunden und überprüfen Sie dann die Liste der Sicherungsdateien.

1 „Gefällt mir“

Basierend auf den obigen Erfahrungen besteht nun die Möglichkeit, sich mit einem lokalen Datenbankclient mit der postgreSQL-Datenbank in Docker zu verbinden.

Konfiguration in der Datei d/boot_dev wie folgt ändern:

docker run -d \
    -p $local_publish:8025:8025 \
    -p $local_publish:3000:3000 \
    -p $local_publish:4200:4200 \
    -p $local_publish:9292:9292 \
    -p $local_publish:9405:9405 \
    # Neuen Port mappen
    -p $local_publish:55432:5432 \
    -v "$DATA_DIR:/shared/postgres_data:delegated" \
    # Konfigurationsdateizuordnung beibehalten
    -v "$SOURCE_DIR/data/pg_hba.conf:/etc/postgresql/15/main/pg_hba.conf:ro" \
    -v "$SOURCE_DIR:/src:delegated" \
    -e UNICORN_BIND_ALL=true \
    $mount_plugin_symlinks \
    $ENV_ARGS \
    --hostname=discourse \
    --name=discourse_dev \
    --restart=always \
    discourse/discourse_dev:release /sbin/boot

Alle Anfragen zum Verbinden mit pg zulassen:

In der Datei data/pg_hba.conf die Konfiguration wie folgt ändern:

# IPv4 local connections:
host all all 0.0.0.0/0 trust
# IPv6 local connections:
host all all ::/0 trust

Erneut bauen

d/shutdown_dev
d/boot_dev

Jetzt kann eine Verbindung mit einem lokalen Datenbankclient hergestellt werden

Ich verwende hier DBeaver

  1. Der Datenbankport ist 55432, was mit dem in d/boot_dev übereinstimmt. Hier ist es 55432, um Konflikte mit bereits lokalen Instanzen zu vermeiden.
  2. Datenbankname
  3. Es wird empfohlen, „Alle Datenbanken anzeigen“ anzuklicken
  4. Benutzername
  5. Testen Sie, ob die Verbindung hergestellt werden kann
  6. Klicken Sie auf OK, um zu speichern

Endlich kann ich die Daten in der Datenbank bequem lokal einsehen.

1 „Gefällt mir“

Ist es normal, dass diese Installation das Menü nicht korrekt anzeigt?