Развернуть базу данных PostgreSQL (Linux)

Продукты
Все продукты

Для установки Creatio вы можете использовать следующие конфигурации баз данных:

  • удаленная СУБД (рекомендуется);

  • локальный сервер PostgreSQL.

Если у вас уже настроен сервер PostgreSQL, то шаг I можно пропустить.

Если у вас уже есть пользователь с правами администратора для авторизации, создания и изменения баз данных, то шаг II можно пропустить.

I. Установить PostgreSQL 

PostgreSQL недоступен в большинстве стандартных репозиториев. Чтобы установить PostgreSQL на Linux:

  1. Войдите в систему как администратор (root):
     

    sudo su
  2. Добавьте репозиторий PostgreSQL:
    echo -e "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -sc)-pgdg main" > /etc/apt/sources.list.d/pgdg.list
    
  3. Импортируйте ключ подписи к репозиторию PostgreSQL:
    wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
    
  4. Обновите список пакетов:
    apt-get update
    
  5. Установите PostgreSQL
    apt-get install -y postgresql-12
    
  6. Выйдите из root-сессии:

    exit

На заметку. Подробнее о возможности создания кластеров читайте в документации PostgreSQL.

II. Создать пользователя PostgreSQL 

Установленный PostgreSQL требует дополнительной настройки, прежде чем вы перейдете к развертыванию Creatio. После первичной установки PostgreSQL вам необходимо создать для него пользователя, который сможет подключаться к базе данных через логин и пароль и будет иметь права на создание и обновление баз данных. По умолчанию такого пользователя в PostgreSQL нет.

Рекомендуется создать следующих пользователей PostgreSQL:

  • Пользователь с ролью ”admin” и неограниченными полномочиями на уровне сервера базы данных — нужен для восстановления базы данных и настройки доступа к ней.
  • Обычный пользователь с ограниченными правами на уровне сервера. используется для настройки безопасного подключения Creatio к базе данных через аутентификацию средствами PostgreSQL.

Если у вас в PostgreSQL уже есть администратор и пользователь с ограниченными правами на уровне сервера базы данных, то данный шаг можно пропустить.

Чтобы создать пользователя PostgreSQL:

  1. Войдите как postgres:

    sudo su - postgres
  2. Откройте оболочку PostgreSQL:
    psql
    
  3. Создайте пользователя pg_sysadmin, которому на уровне сервера будут предоставлены права администратора либо набор наиболее важных привилегий:
    CREATE USER pg_sysadmin;
    pg_sysadmin — псевдоним, который необходимо заменить актуальным именем пользователя с правами администратора на уровне сервера. Нужен для восстановления базы данных и настройки доступа к ней.
  4. Настройте для пользователя pg_sysadmin права администратора:

    ALTER ROLE pg_sysadmin WITH SUPERUSER;

    В качестве альтернативы вы также можете предоставить ему только наиболее важные привилегии вместо прав администратора.

    GRANT CREATE DATABASE TO pg_sysadmin;
    GRANT ALTER DATABASE TO pg_sysadmin;

    Важно. Если не предоставить пользователю pg_sysadmin прав администратора или необходимых привилегий на уровне сервера, это может привести к ошибкам в процессе восстановления базы данных.

  5. Разрешите pg_sysadmin авторизацию:
     
    ALTER ROLE pg_sysadmin WITH LOGIN;
    
  6. Настройте пароль для pg_sysadmin:

    ALTER ROLE pg_sysadmin WITH PASSWORD 'pg_syspassword';

    pg_password— укажите пароль пользователя pg_sysadmin для подключения к серверу PostgreSQL.

  7. Создайте нового пользователя с ограниченными правами на уровне сервера базы данных:
    CREATE USER pg_user;
    pg_user — псевдоним, который необходимо заменить именем пользователя с ограниченными правами на уровне сервера базы данных. Нужен для подключения к базе данных Creatio.
  8. Разрешите pg_user авторизацию:

    ALTER ROLE pg_user WITH LOGIN;
    
  9. Настройте пароль для pg_user:

    ALTER ROLE pg_user WITH PASSWORD 'pg_password';

    pg_password — пароль пользователя pg_user для подключения к серверу PostgreSQL.

  10. Выйдите из оболочки PostgreSQL.

    \q
  11. Выйдите из своей сессии:

    exit

III. Восстановить из бэкапа базу данных PostgreSQL 

Для восстановления базы данных из резервной копии необходимы утилиты psql и pg_restore. Они входят в пакет postgresql-client-common.

Если вы устанавливаете локально postgresql-12 с использованием apt-get, то APT установит postgresql-client-common как зависимость postgresql-12.

Если вы планируете использовать удаленную базу данных PostgreSQL, не устанавливая СУБД PostgreSQL на вашем сервере, то установите пакет postgresql-client-common вручную:

sudo apt-get install postgresql-client-common

Чтобы развернуть базу данных из бэкапа:

  1. Установите пароль подключения к серверу БД в переменную окружения:

    export PGPASSWORD=pg_syspassword

    pg_syspassword — укажите пароль пользователя с правами администратора или привилегиями “CREATE DATABASE”.

  2. Создайте базу данных, в которую будет выполнено восстановление резервной копии:
    psql --host pg_server_address --port pg_server_port --username=pg_sysadmin --dbname=pg_dbname -–command "CREATE DATABASE pg_dbname_ceatio WITH OWNER = pg_user ENCODING = 'UTF8' CONNECTION LIMIT = -1"
    pg_server_address — укажите адрес сервера PostgreSQL.
    pg_server_port — укажите порт сервера PostgreSQL.
    pg_sysadmin — укажите имя пользователя postgres для подключения к серверу PostgreSQL. Пользователь должен являться системным администратором (Superuser) или иметь права на создание базы данных (команда "CREATE DATABASE").
    pg_user — псевдоним, который необходимо заменить именем пользователя с ограниченными правами на уровне сервера базы данных. Нужен для подключения к базе данных Creatio. Вы можете использовать для этого любого пользователя, не имеющего прав администратора на уровне сервера. Чтобы изменить пользователя, от имени которого выполняется подключение, следуйте инструкциям, изложенным в шаге IV данного руководства.
    pg_dbname — укажите имя базы данных PostgreSQL, к которой необходимо подключиться для выполнения команды. Для корректного выполнения команды необходимо указать имя существующей базы данных.

    На заметку. Если вы еще не создали базу данных или попытка подключения завершается ошибкой “FATAL: database "pg_dbname" does not exist”, то воспользуйтесь БД “template1”, которая создается в PostgreSQL по умолчанию.

    pg_dbname_creatio — укажите имя базы данных, которую будет использовать приложение Creatio. База данных будет создана после успешного выполнения команды.
  3. Если вы используете AWS RDS:

    1. Скачайте скрипт ChangeTypesOwner.sql.

    2. Замените в скрипте значение “postgres” на актуальное имя пользователя Postgres.

    3. Выполните обновленный скрипт ChangeTypesOwner.sql.

  4. Перейдите в папку приложения:

    cd /path/to/application/directory/

    /path/to/application/directory/ — путь к папке, в которую распакован архив с установочными файлами Creatio.

  5. Перейдите в папку БД:

    cd db
  6. Восстановите базу данных из бэкапа:

    pg_restore --host pg_server_address --port pg_server_port --username=pg_sysadmin --dbname=pg_dbname_creatio --no-owner --no-privileges /path/to/db.backup

    pg_server_address — укажите адрес сервера PostgreSQL.
    pg_server_port — укажите порт сервера PostgreSQL.
    pg_sysadmin — укажите имя пользователя postgres для подключения к серверу PostgreSQL. Пользователь должен являться системным администратором (Superuser) или иметь максимальные права на уровне базы данных pg_dbname_creatio.
    pg_dbname_creatio — имя БД PostgreSQL, в которую будут добавлены таблицы резервной копии. Используйте имя базы данных, указанное в команде "CREATE DATABASE"  на шаге 2.
    /path/to/db.backup — путь к файлу с базой данных Creatio db.backup.

  7. Скачайте файл CreateTypeCastsPostgreSql.sql.
  8. Выполните преобразование типов:

    psql --host=pg_server_address --port=pg_server_port --username=pg_sysadmin --dbname=pg_dbname_creatio --file=/path/to/CreateTypeCastsPostgreSql.sql

    pg_server_address — укажите адрес сервера PostgreSQL.
    pg_server_port — укажите порт сервера PostgreSQL.
    pg_sysadmin — укажите имя пользователя postgres для подключения к серверу PostgreSQL. Пользователь должен являться системным администратором (Superuser) или иметь максимальные права на уровне базы данных Сreatio.
    pg_dbname_creatio — имя БД, в контексте которой происходит выполнение инструкций.
    /path/to/CreateTypeCastsPostgreSql.sql — путь к сохраненному ранее файлу CreateTypeCastsPostgreSql.sql.

В результате база данных Creatio будет восстановлена из резервной копии. 

IV. Изменить владельца базы данных (опционально) 

В Creatio существует возможность при восстановлении из резервной копии заменить владельца БД и ее объектов на пользователя, не являющегося системным администратором (не Superuser). Вам потребуется скрипт ChangeDbObjectsOwner. Для  Postgres версии 10 и ниже: Скачать скрипт. Для  Postgres 11 и выше: Скачать скрипт.

Чтобы восстановить БД от имени пользователя, не являющегося администратором:

  1. Замените владельца БД:
    psql --host pg_server_address --port pg_server_port --username=pg_sysadmin --dbname=pg_dbname –-command "ALTER DATABASE pg_dbname_creatio OWNER TO pg_user"
    pg_server_address — укажите адрес сервера PostgreSQL.
    pg_server_port — укажите порт сервера PostgreSQL.
    pg_sysadmin — укажите имя пользователя postgres для подключения к серверу PostgreSQL. Пользователь должен являться администратором (Superuser) или иметь привилегии “ALTER DATABASE”.
    pg_user — псевдоним, который необходимо заменить актуальным именем пользователя, который назначается новым владельцем БД. Под логином этого пользователя будет осуществляться подключение приложения к БД.
    pg_dbname_creatio — имя БД, владелец которой заменяется.
  2. Замените владельца объектов БД:
    psql --host pg_server_address --port pg_server_port --username=pg_sysadmin --dbname=pg_dbname_creatio --file=/path/to/ChangeDbObjectsOwner.sql --variable owner=pg_user --variable ON_ERROR_STOP=1
    pg_server_address — укажите адрес сервера PostgreSQL.
    pg_server_port — укажите порт сервера PostgreSQL.
    pg_sysadmin — укажите имя пользователя postgres для подключения к серверу PostgreSQL. Пользователь должен являться системным администратором (Superuser) или владельцем базы данных Сreatio.
    pg_user — псевдоним, который необходимо заменить актуальным именем пользователя, который назначен новым владельцем БД. Под логином этого пользователя будет осуществляться подключение приложения к БД.
    pg_dbname_creatio — имя БД, владелец которой заменяется.
    /path/to/ChangeDbObjectsOwner.sql — путь к сохраненному ранее файлу toChangeDbObjectsOwner.sql.

Вы можете пропустить этот шаг, и в таком случае владельцем БД и ее объектов останется пользователь, от имени которого запускалась команда pg_restore. Обычно это пользователь postgres.