Несколько сайтов discourse на одном сервере

postgresql
discourse

(yuran) #1

Установил два сайта на сервере на discourse. Никак не могу понять каким образом сайты взаимодействуют с базами данных. В yml файле для первого сайта в секции expose указываю:

  • “15432:5432” # PostgreSQL
    Для второго сайта в его yml файле в той же секции указываю так:
  • “15433:5432” # PostgreSQL

В файле config.inc.php который в phppgadmin прописал так:

 if (!function_exists('df_servers')) {
	/**
	 * @param array(string => int) $servers
	 * @return array(array(string => string|int))
	 */
	function df_servers(array $servers) {
		return array_map('df_server', array_keys($servers), array_values($servers));
	}
	if (!function_exists('df_server')) {
		/**
		 * @param string $desc
		 * @param int $port
		 * @return array(string => string|int)
		 */
		function df_server($desc, $port) {
			return array(
				'desc' => $desc
				, 'port' => $port
				, 'host' => 'localhost'
				, 'sslmode' => 'allow'
				, 'defaultdb' => 'discourse'
				, 'pg_dump_path' => '/usr/bin/pg_dump'
				, 'pg_dumpall_path' => '/usr/bin/pg_dumpall'
			);
		}
	}
}
$conf['servers'] = df_servers(array(
	'site_1.ru' => 15432
	,'site_2.ru' => 15433

));
.....................................
.....................................
	$conf['servers'][0]['defaultdb'] = 'template1';
.....................................
....................................

Пересобираю контейнеры, в итоге phppgadmin показывает два сервера, первый PostgreSQL и в нем posgres и такая информация PostgreSQL 9.6.6 выполняется на localhost:5432 – Вы зарегистрированы как “postgres”

Второй сервер определяет как site_2.ru и в нем база discourse и такая информация
PostgreSQL 9.5.10 выполняется на localhost:15433 – Вы зарегистрированы как “postgres”

Для первого сайта получается какую то дефолтную базу определяет и версия PostgreSQL 9.6.6. А в контейнерах версия PostgreSQL 9.5.10… судя по информации phppgadmin.

В общем не получается разобраться с этим делом… База данных получается одна что ли? Но это невозможно для разных сайтов… если только не через дополнительные префиксы…
Здесь читал про мультисайтовость… там вообще все как то по другому делается…

Кто разбирается в данном вопросе - помогите пожалуйста разобраться. Спасибо.


(yuran) #2

В общем сам немного разобрался. В основном информацию взял с сайта http://discourse-forum.ru
Как там сказано:

В среде Docker системное имя пользователя Docker — «postgres», пароля тоже нет, но Вам надо его задать, потому что иначе phpPgAdmin не даст авторизоваться, да и по соображениям безопасности.
Задать пароль можно так:


./launcher enter app
su - postgres
psql -d postgres -c "ALTER ROLE postgres WITH PASSWORD '<пароль>';" 

Насколько я понял это действие нужно сделать для каждого сайта и оно задает пароль для пользователя postgres и базы данных discourse для каждого сайта. Т.е. у каждого сайта своя база данных с названием discourse. Это наверное происходит исходя из метода установки, что по умолчанию создается база discourse для приложения по умолчанию без пароля и все это работает в докере незаметно для нас. Но так как я захотел подключить phppgadmin и посмотреть что там внутри сайтов с базами то и пришлось выполнить те действия что я описал выше, а именно задать пароль.
Далее осталось подправить файл config.inc.php чтобы правильно законнектиться к нашим базам наших сайтов. Нужно закомментировать дефолтные значения для соединения. Я закомментировал вот эти строки:


//   $conf['servers'][0]['desc'] = 'PostgreSQL';
//   $conf['servers'][0]['host'] = 'localhost';
//   $conf['servers'][0]['port'] = 5432;
//   $conf['servers'][0]['defaultdb'] = 'template1';

После авторизации в phppgadmin для каждого сервера вид интерфейса такой:

Какая от этого практическая польза - думаю пока никакая… Но хоть немного разобрался что да как… Может со временем пригодится это дело.