Installer Discourse pour le développement avec Docker

La cause profonde pourrait être que pg15 a modifié les règles de vérification par défaut.

Chemin du fichier de configuration : /etc/postgresql/15/main/pg_hba.conf

Contenu du fichier :

# 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

La commande d’exécution de la sauvegarde est la suivante :

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

La commande ci-dessus génère une erreur en raison de la règle local all postgres peer : Peer authentication failed for user "postgres"

Idée de résolution : Changer peer en trust pour autoriser toutes les commandes en environnement local. Cela signifie qu’aucune vérification ne sera nécessaire pour toutes les commandes (et aucun mot de passe ne sera requis).

Étapes spécifiques :

  1. Copier /etc/postgresql/15/main/pg_hba.conf du conteneur vers la machine locale

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

Donner les permissions 644

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

Modifier la configuration dans data/pg_hba.conf

# Database administrative login by Unix domain socket
local   all   postgres   trust
  1. Modifier le fichier d/boot_dev pour monter data/pg_hba.conf dans le conteneur, écrasant le fichier de configuration par défaut de 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 ligne ci-dessous est ajoutée, elle monte le fichier de configuration dans le conteneur, et donne uniquement des droits de lecture au conteneur
    -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. Arrêter et supprimer le conteneur actuel, puis reconstruire le nouveau conteneur
d/shotdown_dev
d/boot_dev
  1. Après la reconstruction, démarrer les applications front-end et back-end, et tester si la sauvegarde fonctionne correctement
d/rails s

# Exécuter dans une autre invite de commande
d/ember-cli

Dans la page de sauvegarde, cliquez sur Sauvegarder, attendez quelques secondes, puis vérifiez la liste des fichiers de sauvegarde.

1 « J'aime »

Sur la base de l’expérience ci-dessus, le souhait de pouvoir se connecter à la base de données postgreSQL dans Docker avec un client de base de données local est désormais réalisable.

Modifier la configuration dans le fichier d/boot_dev comme suit :

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 \
    # Ajouter le mappage de port
    -p $local_publish:55432:5432 \
    -v "$DATA_DIR:/shared/postgres_data:delegated" \
    # Conserver le mappage du fichier de configuration
    -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

Autoriser toutes les requêtes de connexion à pg :

Dans le fichier data/pg_hba.conf, modifier la configuration comme suit :

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

Reconstruire

d/shutdown_dev
d/boot_dev

Vous pouvez maintenant vous connecter avec un client de base de données local

J’utilise DBeaver ici

  1. Le port de la base de données est 55432, ce qui correspond à celui dans d/boot_dev. Ici, c’est 55432 pour éviter les conflits avec les installations locales existantes.
  2. Nom de la base de données
  3. Il est recommandé de cocher « Afficher toutes les bases de données »
  4. Nom d’utilisateur
  5. Tester la connexion
  6. Cliquer sur OK pour enregistrer

Enfin, vous pouvez consulter joyeusement les données de la base de données localement.

1 « J'aime »

Est-il normal que cette installation n’affiche pas le menu correctement ?