Запуск Discourse с Postgres в Docker

Привет

Я пытаюсь настроить Discourse в локальной среде разработки с одной небольшой разницей: я запускаю Postgres в Docker.

База данных доступна через psql из ОС, но при попытке создать базу данных с помощью rake или rails это не работает. Я следовал этим шагам:

cp discourse_defaults.conf discourse.conf

затем обновил discourse.conf

...
db_host = 127.0.0.1
...
db_username = postgres
db_password = mysecretpassword
...

Но когда я пытаюсь выполнить db:create

connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
	Is the server running locally and accepting connections on that socket?
Couldn't create 'discourse_development' database. Please check your configuration.
rails aborted!
ActiveRecord::NoDatabaseError: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
	Is the server running locally and accepting connections on that socket?


Caused by:
PG::ConnectionBad: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
	Is the server running locally and accepting connections on that socket?


Tasks: TOP => db:create
(See full trace by running task with --trace)

Я пробовал использовать .env

DISCOURSE_DB_HOST=127.0.0.1
DISCOURSE_DB_USERNAME=postgres
DISCOURSE_DB_PASSWORD=mysecretpassword

Также пробовал разные IP-адреса для ‘DB_HOST’, но получаю ту же ошибку.

Неужели я что-то упускаю?

Я не уверен, но, вероятно, проблема в том, что Discourse работает внутри контейнера Docker и по умолчанию не может получить доступ к вашему отдельному контейнеру PostgreSQL.

Мне кажется, вам нужно открыть доступ к базе данных с помощью конфигурации такого типа: GitHub - discourse/discourse_docker: A Docker image for Discourse · GitHub

Возможно, также потребуется удалить шаблон PostgreSQL из файла app.yml.

Эта документация может быть полезной — хотя вы не работаете на отдельном сервере, остальная информация должна быть актуальной.

Надеюсь, это поможет!

Привет, @phil22

Спасибо за ваш ответ.

Discourse запущен не в контейнере Docker, а непосредственно в вашей операционной системе. Postgres работает внутри контейнера, и вы пробросили его порт в ОС с помощью -p 5432:5432.

Это означает, что Discourse пытается подключиться через файловый сокет, но такого сокета не существует.

Попробуйте добавить port: 5432 в файл config/database.yml в разделе development?

Привет, @Falco
Спасибо за ваш ответ.
Та же история

connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
	Is the server running locally and accepting connections on that socket?
Couldn't create 'discourse_development' database. Please check your configuration.
rails aborted!
ActiveRecord::NoDatabaseError: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
	Is the server running locally and accepting connections on that socket?


Caused by:
PG::ConnectionBad: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
	Is the server running locally and accepting connections on that socket?

Tasks: TOP => db:create
(See full trace by running task with --trace)

Хорошо, попробуйте добавить эту строку:

  url: postgresql://postgres::postgres@localhost:5432/discourse_development?pool=5

вместо строки с port.

Спасибо, @Falco!
Я добавил всю недостающую информацию в database.yml, и теперь всё работает.

#cat database.yml 
development:
  prepared_statements: false
  adapter: postgresql
  database: <%= ENV['DISCOURSE_DEV_DB'] || 'discourse_development' %>
  min_messages: warning
  port: 5432
  host: localhost
  user: postgres
  password: mysecretpassword
  pool: 5
  timeout: 5000

Это означает, что есть проблема с загрузкой переменных конфигурации?

Нет, это просто означает, что параметр socket по умолчанию имеет приоритет над объявлением port. Один из способов обойти это — использовать ключ url, но вы можете изучить исходный код Rails, чтобы найти другие варианты.