Перенос базы данных на выделенный сервер

Если вы хотите разместить базу данных отдельно от службы Staffcop и веб-интерфейса, подготовьте сервер БД и подключите к нему сервер Staffcop.

Работы на сервере БД

Установите ПО

  1. Установите чистый Ubuntu Server версии 20 или 22.

  2. Обновите пакеты в системе:

sudo apt update && sudo apt upgrade
  1. Установите пакеты для установки БД:

sudo apt install dirmngr ca-certificates software-properties-common apt-transport-https lsb-release curl -y
  1. Добавьте ключи к репозиторию PostgreSQL:

curl -fSsL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/postgresql.gpg > /dev/null
  1. Добавьте репозиторий:

echo deb [arch=amd64,arm64,ppc64el signed-by=/usr/share/keyrings/postgresql.gpg] http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main | sudo tee /etc/apt/sources.list.d/postgresql.list
  1. Обновите списки репозиториев в пакетном менеджере:

sudo apt update
  1. Установите PostgreSQL 15:

sudo apt install postgresql-client-15 postgresql-15 -y

Создайте пользователя

  1. Найдите пароль на сервере Staffcop с помощью команды:

cat /etc/staffcop/config | grep PASSWORD
  1. Скопируйте пароль. Он будет в кавычках, например:

'PASSWORD': '05ce255df14c3308143737316139b77',
  1. Вставьте пароль в команду вместо пароль и выполните ее на сервере БД:

sudo -u postgres psql -c "create user staffcop with password 'пароль';"

Пример:

sudo -u postgres psql -c "create user staffcop with password '05ce255df14c3308143737316139b77';"

Измените конфигурацию

  1. Откройте файл конфигурации /etc/postgresql/15/main/postgresql.conf для редактирования.

В примере используется Vim, но подойдет любой редактор:

sudo vim /etc/postgresql/15/main/postgresql.conf

Найдите строку:

#listen_addresses = 'localhost,00.00.00.000'             # what IP address(es) to listen on;

Уберите в строке символ # в начале строки и добавьте IP, по которому Staffcop будет обращаться на сервер БД.

Примечание

Важно указать именно IP-адрес сервера базы данных. Этот адрес определяет интерфейс, через который сервер принимает запросы. Он не связан с IP-адресом, с которого приходят запросы.

Сохраните изменения и выйдите из редактора.

  1. Откройте файл /etc/postgresql/15/main/pg_hba.conf для редактирования:

sudo vim /etc/postgresql/15/main/pg_hba.conf

В конец файла добавьте:

host    all             all             {ip сервера Staffcop}/{маска}        md5

Например, если 00.00.00.000 – IP-адрес сервера Staffcop и 32 – маска подсети:

host    all             all            00.00.00.000/32         md5
  1. Перезагрузите PostgreSQL для применения изменений:

sudo systemctl restart postgresql

Работы на сервере Staffcop

Перенесите базу данных

Примечание

Если на сервере нет данных, пропустите этот шаг и перейдите к разделу Создайте базу данных.

  1. Выключите сервер Staffcop:

staffcop stop
  1. Создайте бэкап командой:

staffcop backup_db
  1. Перенесите резервную копию из каталога /var/lib/staffcop/staffcop_backup/staffcop-db.dump на сервер базы данных.

  2. Запустите восстановление БД на удаленном сервере:

sudo -u postgres pg_restore --verbose --clean --create --format=c {путь до файла бекапа} -d postgres

Например:

sudo -u postgres pg_restore --verbose --clean --create --format=c /home/staffcop-db.dump -d postgres

Создайте базу данных

  1. На сервере БД подключитесь к PostgreSQL:

sudo -u postgres psql
  1. Создайте базу данных:

CREATE DATABASE staffcop WITH OWNER = staffcop ENCODING = 'UTF8' LC_COLLATE = 'ru_RU.UTF-8' LC_CTYPE = 'ru_RU.UTF-8' TEMPLATE = template0;
  1. Выберите созданную базу и создайте необходимые расширения:

\c staffcop
CREATE EXTENSION pg_trgm;
CREATE EXTENSION ltree;
CREATE EXTENSION cube;
CREATE EXTENSION dblink;
CREATE EXTENSION pgcrypto;
  1. Скопируйте все файлы из директории /usr/share/staffcop/data/ispell/ на сервере Staffcop в директорию /usr/share/postgresql/15/tsearch_data/.

Например, с помощью команды scp:

scp -r user@10.10.10.1:/usr/share/staffcop/data/ispell/* user@10.10.10.2:/usr/share/postgresql/15/tsearch_data/

где user@10.10.10.1– имя пользователя и ip-адрес сервера Staffcop, а user@10.10.10.2 – имя пользователя и адрес сервера с базой данных.

  1. Инициализируйте БД на сервере Staffcop:

staffcop init
  1. Готово! База данных перенесена на выделенный сервер.

Подключите базу данных

  1. Выключите сервер Staffcop:

staffcop stop
  1. Откройте файл конфигурации Staffcop /etc/staffcop/config:

sudo vim /etc/staffcop/config

Найдите блок:

DATABASES = {
   'default': {
       'ENGINE': 'django.db.backends.postgresql_psycopg2',
       'NAME': 'staffcop',
       'USER': 'staffcop',
       'PASSWORD': '05ce255df14c3308143737316139b77',
       'HOST': '',
       'PORT': '',
   }
}

Укажите в HOST и PORT адрес и порт удаленного сервера PostgreSQL, например:

DATABASES = {
   'default': {
       'ENGINE': 'django.db.backends.postgresql_psycopg2',
       'NAME': 'staffcop',
       'USER': 'staffcop',
       'PASSWORD': '05ce255df14c3308143737316139b77',
       'HOST': '10.10.13.243',
       'PORT': '5432',
   }
}
  1. Отключите автоматический запуск БД на сервере Staffcop:

sudo systemctl stop postgresql
sudo systemctl disable postgresql
  1. Проверьте подключение к БД:

staffcop sql

Если нет ошибок и вы видите приглашение от PostgreSQL (staffcop=>), подключение прошло успешно.

Выйдите из приглашения:

\q
  1. Инициализируйте БД:

staffcop init
  1. Готово! База данных перенесена на выделенный сервер.