Installa Discourse per lo sviluppo usando Docker

La causa principale potrebbe essere che pg15 ha modificato le regole di autenticazione predefinite.

Percorso del file di configurazione: /etc/postgresql/15/main/pg_hba.conf

Contenuto del file:

# 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

Il comando di backup eseguito è:

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

Il comando sopra fallisce a causa della regola local all postgres peer: Peer authentication failed for user "postgres"

Idea di soluzione: cambiare peer in trust, consentendo tutti i comandi nell’ambiente locale. Ciò significa che tutti i comandi non richiederanno più l’autenticazione (né l’inserimento della password).

Passaggi specifici:

  1. Copiare /etc/postgresql/15/main/pg_hba.conf dal container in locale

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

Dare i permessi 644

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

Modificare la configurazione in data/pg_hba.conf

# Database administrative login by Unix domain socket
local   all   postgres   trust
  1. Modificare il file d/boot_dev per montare data/pg_hba.conf nel container, sovrascrivendo il file di configurazione predefinito di pg.
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" \
    # La riga seguente è aggiunta, monta il file di configurazione nel container, e dà al container permessi di sola lettura
    -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. Spegnere ed eliminare il container corrente, quindi ricreare il nuovo container
d/shotdown_dev
d/boot_dev
  1. Dopo la ricreazione, avviare le applicazioni frontend e backend e testare se il backup funziona correttamente
d/rails s

# Eseguire in un altro terminale
d/ember-cli

Nella pagina di backup, fare clic su backup, attendere qualche secondo e quindi visualizzare l’elenco dei file di backup.

1 Mi Piace

Sulla base dell’esperienza precedente, il desiderio di connettersi al database PostgreSQL all’interno di Docker utilizzando un client di database locale è ora realizzabile.

Modificare la configurazione nel file d/boot_dev come segue:

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 \
    # Mappatura della porta aggiunta
    -p $local_publish:55432:5432 \
    -v "$DATA_DIR:/shared/postgres_data:delegated" \
    # Mantenere il mapping del file di configurazione
    -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

Consentire tutte le richieste di connessione a pg:

Nel file data/pg_hba.conf, modificare la configurazione come segue:

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

Ricostruire

d/shutdown_dev
d/boot_dev

Ora è possibile connettersi utilizzando un client di database locale

Sto usando DBeaver qui

  1. La porta del database è 55432, coerente con d/boot_dev, qui è 55432 per evitare conflitti con quelli locali esistenti.
  2. Nome del database
  3. Si consiglia di spuntare “Mostra tutti i database”
  4. Nome utente
  5. Testare la connessione
  6. Fare clic su OK per salvare

Finalmente posso visualizzare felicemente i dati nel database localmente.

1 Mi Piace

È normale che questa installazione non visualizzi correttamente il menu?