# Настройка СУБД PostgreSQL

{% hint style="warning" %}
**Поддерживаемые версии PostgreSQL: 13, 15**
{% endhint %}

### Мастер установки сервера БД <a href="#db-wizard" id="db-wizard"></a>

В консоли сервера БД выполните команду `dbserver-pg-setup.sh` для запуски мастера установки.

Ответьте на вопросы мастера, задайте пароль пользователя БД для подключения:

```shell-session
# dbserver-pg-setup.sh
Добро пожаловать в мастер настройки DB Server. Пожалуйста, заполните все поля корректными значениями. Для принятия значений по умолчанию нажимайте ENTER.
Настроить сервер на использование базы данных PostgreSQL? [Y/n]: y
Внимание! Предыдущая конфигурация будет удалена, подтвердите операцию: [Y/n] y
Введите пароль пользователя БД: 
Введите (еще раз) пароль пользователя БД: 
Для применения новых параметров и перезапуска служб нажмите ENTER []: 
```

После завершения работы мастера на сервере будет развернут инстанс базы данных брокера VDI с именем `udsdb`, и создан пользователь PostgreSQL `udsdbadm` с правами доступа к этой базе, с заданным в процессе настройки паролем.

Далее, в файле `/etc/postgresql/13/main/postgresql.conf` раскомментируйте строку:

```
listen_addresses = '*'
```

В файл `/etc/postgresql/13/main/pg_hba.conf` разрешите удаленные подключения к БД с брокера VDI, добавив запись с его адресом или подсетью (в примере `10.1.1.0/24`):

```
# IPv4 remote connections:
host    all             all             10.1.1.0/24           md5
```

Для применения новой конфигурации перезапустите службу PostgreSQL:

```shell-session
# systemctl restart postgresql.service
```

### Перенос базы данных <a href="#db-migration" id="db-migration"></a>

{% hint style="info" %}
В случае новой установки данный раздел настройки можно пропустить.
{% endhint %}

Для переноса существующей базы данных PostgreSQL, уже развернутой в составе компонента HOSTVM VDI Брокер, на внешний сервер БД, выполните следующие команды.

В консоли брокера VDI остановите сервисы и создайте резервную копию БД, указав:

* имя базы на брокере (по умолчанию `udsdb`)
* имя файла резервной копии (в примере - `udsdb.bak`)

Команды для брокера версии `3.6`:

```shell-session
# systemctl stop vdi.service vdiweb.service
# su - postgres
$ pg_dump udsdb > /tmp/udsdb.bak
$ exit
```

Перенесите файл резервной копии на сервер БД, указав:

* имя файла резервной копии (в примере - `udsdb.bak`)
* IP или hostname сервера БД (в примере `dbserver`)

```shell-session
# scp /tmp/udsdb.bak root@dbserver:/tmp/
```

В консоли сервера БД выполните следующие команды.

Откройте терминальный клиент psql:

```shell-session
# su - postgres
$ psql
```

Пересоздайте БД брокера (в примере - `udsdb`):

```shell-session
postgres=# DROP DATABASE udsdb; CREATE DATABASE udsdb;
postgres=# \q
```

Импортируйте ранее созданную резервную копию БД:

```shell-session
$ psql -d udsdb -f /tmp/udsdb.bak
$ exit
```

В файле `/etc/postgresql/13/main/postgresql.conf` раскомментируйте строку:

```
listen_addresses = '*'
```

В файл `/etc/postgresql/13/main/pg_hba.conf` разрешите удаленные подключения к БД с брокера VDI, добавив запись с его адресом или подсетью (в примере `10.1.1.0/24`):

```
# IPv4 remote connections:
host    all             all             10.1.1.0/24           md5
```

Для применения новой конфигурации перезапустите службу PostgreSQL:

```shell-session
# systemctl restart postgresql.service
```

### Переключение брокера VDI на внешний сервер БД <a href="#broker-config" id="broker-config"></a>

**Версия 3.6-20250704 и выше**

Для настройки подключения к БД используйте [мастер установки HOSTVM VDI](/hostvm-vdi/hostvm-vdi-installation-guide/hostvm-vdi-ova-install.md#setup-wizard).

**Версия 3.6 до номера сборки 20250704**

Отредактируйте файл настроек брокера `/var/server/server/settings.py`, в блок `DATABASES` внесите информацию:

<pre><code><strong>DATABASES = {
</strong>    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'OPTIONS': {
            'isolation_level': 'read committed',
        },
        'NAME': 'udsdb',                     # имя БД, по умолчанию udsdb
        'USER': 'udsdbadm',                  # имя пользователя БД, по умолчанию udsdbadm
        'PASSWORD': 'password',              # пароль пользователя БД, как был задан в мастере установки сервера БД
        'HOST': '10.1.1.1',                  # IP адрес сервера БД, например 10.1.1.1
        'PORT': '',                          # порт сервера БД, оставьте пустым при использовании порта по умолчанию
    }
}
</code></pre>

Перезапустите службы брокера VDI:

```shell-session
# systemctl restart vdi.service vdiweb.service
```

Для инициализации базы данных выполните:

<pre class="language-shell-session"><code class="lang-shell-session"># systemctl stop vdi
<strong># cd /var/server
</strong># python3 manage.py migrate
# python3 manage.py createcachetable
# systemctl start vdi
</code></pre>

Убедитесь, что портал брокера VDI успешно открывается в браузере.

#### Дополнительные действия при переносе существующей БД <a href="#cleanup" id="cleanup"></a>

На портале брокера VDI перейдите в панель администрирования, проверьте наличие данных перенесенной конфигурации (настройки сервис-провайдеров, аутентификаторов, транспортов, сервис-пулов и т.д.).

Удалите файл резервной копии с сервера БД, выполнив команду:

```shell-session
# rm /tmp/udsdb.bak
```

Удалите файл резервной копии и отключите более не используемый локальный сервис PostgreSQL на брокере VDI, выполнив команды:

```shell-session
# rm /tmp/udsdb.bak
# systemctl stop postgresql.service
# systemctl disable postgresql.service
```

### Шифрование трафика между брокером VDI и СУБД

В файл `/etc/postgresql/13/main/pg_hba.conf` внесите соответствующую запись с адресом или подсетью брокера(в примере `10.1.1.0/24`):

```
# IPv4 remote connections:
hostssl    all             all             10.1.1.0/24           md5
```

Для применения новой конфигурации перезапустите службу PostgreSQL:

```shell-session
# systemctl restart postgresql.service
```

Отредактируйте файл настроек брокера `/var/server/server/settings.py`, в блок `DATABASES` в секции `OPTIONS` внесите  запись `'sslmode': 'require',`

```
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'OPTIONS': {
            'isolation_level': 'read committed',
            'sslmode': 'require',
        },
        'NAME': 'udsdb',                     # имя БД, по умолчанию udsdb
        'USER': 'udsdbadm',                  # имя пользователя БД, по умолчанию udsdbadm
        'PASSWORD': 'password',              # пароль пользователя БД, как был задан в мастере установки сервера БД
        'HOST': '10.1.1.1',                  # IP адрес сервера БД, например 10.1.1.1
        'PORT': '',                          # порт сервера БД, оставьте пустым при использовании порта по умолчанию
    }
}
```

Перезапустите службы брокера VDI:

```shell-session
# systemctl restart vdi.service vdiweb.service
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kb.pvhostvm.ru/hostvm-vdi/hostvm-vdi-installation-guide/vdi-db/postgresql.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
