Instalar Discourse para desarrollo usando Docker

La causa raíz puede ser que pg15 modificó las reglas de autenticación predeterminadas.

Ruta del archivo de configuración: /etc/postgresql/15/main/pg_hba.conf

Contenido del archivo:

# 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

El comando de respaldo ejecutado es:

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

El comando anterior falla debido a la regla local all postgres peer: Peer authentication failed for user "postgres"

Idea de solución: Cambiar peer a trust para permitir todos los comandos en el entorno local. Es decir, todos los comandos ya no requerirán autenticación (ni requerirán ingresar una contraseña).

Pasos específicos:

  1. Copiar /etc/postgresql/15/main/pg_hba.conf del contenedor a la máquina local

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

Otorgar permisos 644

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

Modificar la configuración en data/pg_hba.conf

# Database administrative login by Unix domain socket
local   all   postgres   trust
  1. Modificar el archivo d/boot_dev para montar data/pg_hba.conf en el contenedor, sobrescribiendo el archivo de configuración predeterminado 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 siguiente línea es la nueva, monta el archivo de configuración en el contenedor y solo le da permisos de solo lectura al contenedor
    -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. Detener y eliminar el contenedor actual, luego reconstruir el nuevo contenedor
d/shotdown_dev
d/boot_dev
  1. Después de la reconstrucción, iniciar las aplicaciones frontend y backend y probar si la copia de seguridad funciona correctamente
d/rails s

# Ejecutar en otra línea de comandos
d/ember-cli

En la página de copias de seguridad, haga clic en realizar copia de seguridad, espere unos segundos y luego verifique la lista de archivos de copia de seguridad.

1 me gusta

Basado en la experiencia anterior, ahora es posible conectar un cliente de base de datos local a la base de datos postgreSQL dentro de Docker.

Modificar la configuración en el archivo d/boot_dev de la siguiente manera:

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 \
    # Mapeo de puertos añadido
    -p $local_publish:55432:5432 \
    -v "$DATA_DIR:/shared/postgres_data:delegated" \
    # Mantener el mapeo del archivo de configuración
    -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

Permitir todas las solicitudes de conexión a pg:

En el archivo data/pg_hba.conf, modificar la configuración de la siguiente manera:

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

Reconstruir

d/shutdown_dev
d/boot_dev

Ahora se puede conectar con un cliente de base de datos local

Estoy usando DBeaver aquí.

  1. El puerto de la base de datos es 55432, lo que coincide con el de d/boot_dev. Se utiliza 55432 para evitar conflictos con los puertos locales existentes.
  2. Nombre de la base de datos
  3. Se recomienda marcar “Mostrar todas las bases de datos”
  4. Nombre de usuario
  5. Probar si la conexión es exitosa
  6. Hacer clic en Aceptar para guardar

Finalmente, puedo ver los datos en la base de datos local felizmente.

1 me gusta

¿Es normal que esta instalación no muestre el menú correctamente?