Подключение к базе данных Discourse через DBeaver

Встроенный Data Explorer подходит для быстрых запросов, но если вы хотите использовать полноценный GUI, такой как DBeaver или TablePlus, вам придётся преодолеть несколько препятствий, поскольку Postgres в Discourse находится внутри Docker bridge.

Вот как безопасно открыть доступ к нему через частную сеть (например, Tailscale), чтобы не оставлять вашу базу данных открытой для интернета.

1. Настройка произвольного порта

Discourse обычно занимает стандартные порты, поэтому я использовал 5434. Отредактируйте файл containers/app.yml:

YAML

expose:
  - "80:80"
  - "443:443"
  - "5434:5432" # Хост 5434 -> Контейнер 5432

Затем пересоберите контейнер: ./launcher rebuild app

2. Фаервол

Не открывайте этот порт для публичного доступа. Если вы используете Tailscale или другие туннели, ограничьте доступ только этим интерфейсом:

Bash

sudo ufw allow in on tailscale0 to any port 5434 proto tcp

3. Настройка аутентификации (самая неприятная часть)

По умолчанию Discourse использует аутентификацию peer, что блокирует вход по паролю извне. Поэтому нужно настроить Postgres на использование scram-sha-256.

Внутри контейнера (./launcher enter app):

Bash

echo "host all all 0.0.0.0/0 scram-sha-256" >> /shared/postgres_data/pg_hba.conf

sudo -u postgres psql -c "SELECT pg_reload_conf();"

4. Установка пароля

У пользователя discourse по умолчанию нет пароля. Установите его, чтобы приложения вроде DBeaver могли войти в систему.

Bash

sudo -u postgres psql -c "ALTER USER discourse WITH PASSWORD 'your_password_here';"

5. Данные для подключения

  • Хост: Ваш IP-адрес

  • Порт: 5434

  • База данных: discourse

  • Пользователь: discourse