# 8. Встановлення та конфігурація серверу баз даниз та архівуваня

Дані журналу повідомлень зберігаються в базі даних ШБО під час обміну повідомленнями. Відповідно до схеми розгортання локальних компонентів промислового середовища, зазначена база даних має зберігатися окремо, на сервері баз даних та архівування в захищеному сегменті мережі. Встановлення та налаштування серверу баз даних та архівування виконується Адміністратором локальних компонентів (системним адміністратором).

# 8.1. Встановлення та конфігурація серверу баз даних та архівування

<span lang="UK">Перед початком встановлення віртуальна машина (або фізичний сервер) повинні бути попередньо налаштовані згідно розділів 5.1 та 5.2 даної інструкції.</span>

<p class="callout info"><span lang="UK">**Примітка.** </span><span lang="UK">Додатково на зазначеному сервері може бути інстальовано засіб перевірки повідомлень згідно розділу 9 даної інструкції.</span></p>

<p class="callout info">**<span lang="UK">Примітка.</span>**<span lang="UK"> Передбачається, що доступ до бази даних з шлюзу безпечного обміну попередньо сконфігуровано, в тому числі, на рівні мережі.</span></p>

<span lang="UK">Сервер баз даних та архівування являє собою СКБД PostgreSQL. Для її встановлення на сервер баз даних та архівування необхідно:</span>

<span lang="UK">1. Закрити доступ до сторонніх репозиторіїв за допомогою виконання наступної команди:</span>

```
sudo sed -i 's/^[A-Za-z0-9]/#&/' /etc/apt/sources.list
```

<span lang="UK">2. Додати у операційну систему репозиторій з пакетами системи «Трембіта» за допомогою виконання наступної команди:</span>

```
echo 'deb https://project-repo.trembita.gov.ua:8081/repository/ss-1.12.6/ bionic main' | sudo tee -a /etc/apt/sources.list
```

<span lang="UK">Перевірити результат виконання команд можна за допомогою текстового редактора nano, відкривши файл на редагування за допомогою виконання наступної команди:</span>

```
sudo nano /etc/apt/sources.list
```

<span lang="UK">3. Додати GPG ключ репозиторію за допомогою виконання наступної команди:</span>

```
sudo wget -O - https://project-repo.trembita.gov.ua:8081//public-keys/public.key.txt | sudo apt-key add -
```

<span lang="UK">Якщо команду виконано успішно, буде виведено повідомлення «ОК».</span>

<span lang="UK">4. Встановити ПЗ СКБД PostgreSQL на сервері баз даних та архівування за допомогою послідовного виконання наступних команд:</span>

```
sudo apt update
sudo apt install -y postgresql
```

<span lang="UK">5. Створити користувача бази даних на сервері баз даних та архівування за допомогою послідовного виконання наступних команд від імені користувача postgres:</span>

```
sudo -s
su postgres
createuser -P <msglog_user>
```

<span lang="UK">де **&lt;msglog\_user&gt;** – логін нового користувача СКБД.</span>

<span lang="UK">6. Двічі ввести пароль для користувача &lt;msglog\_user&gt;.</span>

<span lang="UK">7. Створити базу даних за допомогою виконання наступної команди від імені користувача postgres:</span>

```
createdb <msglog_db> -O <msglog_user> -E UTF-8
```

<span lang="UK">де **&lt;msglog\_db&gt;** – назва бази даних.</span>

<span lang="UK">**&lt;msglog\_user&gt;** – логін нового користувача якого було створено на попередньому кроці.</span>

<span lang="UK">8. Налаштувати дозволи на підключення до сервера баз даних та архівування з ШБО, для чого необхідно виконати наступні дії:</span>

<span lang="UK">- </span><span lang="UK">Здійснити вихід із сесії користувача postgres на сервері баз даних та архівування за допомогою виконання наступної команди:</span>

```
exit
```

  
<span lang="UK">[![Picture8_2.png](https://docs.trembita.gov.ua/uploads/images/gallery/2024-05/scaled-1680-/CZpNxXgoWcG384Rm-picture8-2.png)](https://docs.trembita.gov.ua/uploads/images/gallery/2024-05/CZpNxXgoWcG384Rm-picture8-2.png)</span>

<span lang="UK">- </span><span lang="UK">Здійснити вихід з привілейованого режиму командного рядка, так само за допомогою команди exit:</span>

```
exit
```

<span lang="UK">[![Picture8_3.png](https://docs.trembita.gov.ua/uploads/images/gallery/2024-05/scaled-1680-/aBcDgd0wYSL5bcYm-picture8-3.png)](https://docs.trembita.gov.ua/uploads/images/gallery/2024-05/aBcDgd0wYSL5bcYm-picture8-3.png)</span>

<span lang="UK">- </span><span lang="UK">Відкрити на редагування файл /etc/postgresql/10/main/pg\_hba.conf, який містить налаштування прав доступу, за допомогою команди:</span>

```
sudo nano /etc/postgresql/10/main/pg_hba.conf
```

<span lang="UK">- </span><span lang="UK">Додати у кінець відкритого файлу наступний рядок:</span>

```
host <msglog_db>    <msglog_user>  <IP_адреса_ШБО>/32    md5
```

<span lang="UK">де</span> **<span lang="UK">&lt;msglog\_</span>db<span lang="UK">&gt;</span>**<span lang="UK">- назва бази даних.</span>

<span lang="UK">**&lt;msglog\_user&gt;**- логін нового користувача якого було створено вище.</span>

**<span lang="RU">&lt;</span><span lang="UK">IP\_адреса\_ШБО</span><span lang="RU">&gt;</span>** <span lang="UK">- ІР-адреса ШБО, до якого буде підключений сервер баз даних та архівування</span> <span lang="UK">згідно мережевої схеми.</span>

<span lang="UK">- </span><span lang="UK">Закрити редактор, натиснувши комбінацію клавіш «Ctrl+X», далі буде показано повідомлення про підтвердження на збереження змін - необхідно натиснути «Y», а потім </span><span lang="UK">«Enter» для збереження.</span>

<span lang="UK">- </span><span lang="UK">Відкрити на редагування файл /etc/postgresql/10/main/postgresql.conf за допомогою наступної команди:</span>

```
sudo nano /etc/postgresql/10/main/postgresql.conf
```

<span lang="UK">[![Picture8_4.png](https://docs.trembita.gov.ua/uploads/images/gallery/2024-05/scaled-1680-/zy34675hO47ko06p-picture8-4.png)](https://docs.trembita.gov.ua/uploads/images/gallery/2024-05/zy34675hO47ko06p-picture8-4.png)</span>

<span lang="UK">- </span><span lang="UK">Знайти у файлі рядок з параметром «listen\_addresses», розкоментувати його (видалити символ «</span><span lang="RU">\#</span><span lang="UK">»</span> <span lang="RU">на початку рядка)</span><span lang="UK"> та замінити значення:</span>

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

<span lang="RU">на</span>:

```
listen_addresses = '*'         # what IP address(es) to listen on;
```

[![Picture8_5.png](https://docs.trembita.gov.ua/uploads/images/gallery/2024-05/scaled-1680-/fOGG9OOaoIS5xvlv-picture8-5.png)](https://docs.trembita.gov.ua/uploads/images/gallery/2024-05/fOGG9OOaoIS5xvlv-picture8-5.png)

<p class="callout info">**<span lang="UK">Примітка.</span>**<span lang="UK"> Зазначені зміни внесені для того, щоб дозволити СКБД PostgreSQL приймати мережеві підключення.</span></p>

<span lang="UK">- </span><span lang="UK">Закрити редактор, натиснувши комбінацію клавіш «Ctrl+X», далі буде показано повідомлення про підтвердження на збереження змін - необхідно натиснути «Y», а потім </span><span lang="UK">«Enter»</span><span lang="UK"> для збереження.</span>

<span lang="UK">- </span><span lang="UK">Перезавантажити сервіс postgresql за допомогою наступної команди:</span>

```
sudo service postgresql restart
```

<span lang="UK">Перевірити коректність налаштувань можна за допомогою команди:</span>

```
sudo netstat -lnpt|grep 5432
```

<span lang="UK">На екрані буде відображено повідомлення, яке має містити два рядки, один з яких повинен мати значення: 0.0.0.0:5432</span>

<span lang="UK">[![Picture8_6.png](https://docs.trembita.gov.ua/uploads/images/gallery/2024-05/scaled-1680-/wb1hG4jXbP7IIbFz-picture8-6.png)](https://docs.trembita.gov.ua/uploads/images/gallery/2024-05/wb1hG4jXbP7IIbFz-picture8-6.png)</span>

# 8.2.Налаштування підключення ШБО до серверу баз даних та архівування

<span lang="UK">Для перевірки підключення шлюзу безпечного обміну до віддаленої бази даних необхідно:</span>

<span lang="UK">1. </span><span lang="UK">Увійти до командної консолі ШБО </span>

<span lang="UK">2. </span><span lang="UK">Виконати команду:</span>

```
psql -h <IP_адреса_сервера_баз_даних_та_архівування> -U <msglog_user> <msglog_db>
```

<span lang="UK">де</span> <span lang="UK">&lt;</span>**<span lang="RU">IP</span><span lang="UK">\_адреса\_сервера\_баз\_даних\_та\_архівування</span>**<span lang="UK">**&gt;** - ІР-адреса сервера баз даних та архівування, до якого буде підключений ШБО згідно мережевої схеми;</span>

<span lang="UK">**&lt;msglog\_user&gt;**- логін користувача СКБД якого було створено раніше;</span>

**<span lang="UK">&lt;msglog\_</span>db<span lang="UK">&gt;</span>**<span lang="UK">- назва бази даних.</span>

<span lang="UK">3. </span><span lang="UK">Ввести пароль користувача msglog\_user. Якщо доступ налаштовано коректно, має бути відображено командний рядок СКБД:</span>

```
 psql (9.3.9)
SSL connection (cipher: DHE-RSA-AES256-GCM-SHA384, bits: 256)
Type "help" for help.
msglog_db=>
```

[![Picture8_7.png](https://docs.trembita.gov.ua/uploads/images/gallery/2024-05/scaled-1680-/Z7ggXTilVIBSPSBf-picture8-7.png)](https://docs.trembita.gov.ua/uploads/images/gallery/2024-05/Z7ggXTilVIBSPSBf-picture8-7.png)

<span lang="RU">4. </span><span lang="UK">Вийти з командного рядка СКБД, ввівши наступну команду та натиснувши клавішу "Enter":</span>

```
\q
```

<span lang="UK">5. </span><span lang="UK">Зупинити сервіс uxp-proxy на ШБО для переконфігурації за допомогою наступної команди:</span>

```
sudo service uxp-proxy stop
```

<span lang="UK">6. </span><span lang="UK">Налаштувати параметри підключення бази даних для отримання зашифрованих з’єднань у файлі /etc/uxp/db.properties, відкривши його на редагування:</span>

```
sudo nano /etc/uxp/db.properties
```

<span lang="UK">7. </span><span lang="UK">Внести зміни у блок параметрів, що починаються з uac-messagelog, вказавши значення параметрів **&lt;"IP\_адреса\_сервера\_баз\_даних\_та\_архівування"&gt;** та **&lt;"Пароль\_користувача\_msglog\_user"&gt;** згідно мережевої схеми </span>

```
uac-messagelog.hibernate.jdbc.use_streams_for_binary = true
uac-messagelog.hibernate.dialect = ee.ria.xroad.common.db.CustomPostgreSQLDialect
uac-messagelog.hibernate.connection.driver_class = org.postgresql.Driver
uac-messagelog.hibernate.connection.url = jdbc:postgresql://<IP_адреса_сервера_баз_даних_та_архівування>:5432/msglog_db?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory&
uac-messagelog.hibernate.connection.username = msglog_user
uac-messagelog.hibernate.connection.password = <Пароль_користувача_msglog_user>
```

[![Picture8_8.png](https://docs.trembita.gov.ua/uploads/images/gallery/2024-05/scaled-1680-/gVaQ4FlgXFaux5b3-picture8-8.png)](https://docs.trembita.gov.ua/uploads/images/gallery/2024-05/gVaQ4FlgXFaux5b3-picture8-8.png)

<span lang="UK">8. </span><span lang="UK">Заповнити схему бази даних, перевстановивши пакет uxp-addon-uac (він також запустить службу uxp-proxy) шляхом виконання наступної команди:</span>

```
sudo apt-get install --reinstall uxp-addon-uac
```

# 8.3 Налаштування перенесення архівних файлів на сервер баз даних та архівування

<span lang="UK">Для забезпечення довгострокового збереження архівів повідомлень, прийнятих/переданих через ШБО, необхідно налаштувати процедуру архівування журналу повідомлень до сервера баз даних та архівування. Налаштування виконується Адміністратором локальних компонентів (системним адміністратором).</span>

<span lang="UK">На ШБО архівні файли (ZIP-контейнери) знаходяться у директорії, що вказана параметром конфігурації archive-path.</span>

<span lang="UK">Імена архівних файлів виражені у форматі mlog-XYZ.zip, де:</span>

<span lang="UK">- </span><span lang="UK">X – часовий покажчик (час UTC у форматі YYYYMMDDHHmmss) першого запису журналу повідомлень,</span>

<span lang="UK">- </span><span lang="UK">Y – позначка часу останнього запису журналу повідомлень (записи обробляються в хронологічному порядку),</span>

<span lang="UK">- </span><span lang="UK">Z – довільна буквено-цифрова послідовність довжиною 10 символів.</span>

<span lang="UK">Прикладом назви архівного файлу є:</span>

<span lang="UK">mlog-20150504152559-20150504152559-a7JS05XAJC.zip</span>

<span lang="UK">Інсталяційний пакет ШБО містить допоміжний скрипт /usr/share/uxp/scripts/archive-http-transporter.sh, призначений для передачі архівних файлів. Цей скрипт використовує протокол HTTP/HTTPS (метод POST, ім’я форми - файл) для передачі архівних файлів з ШБО на сервер баз даних та архівування.</span>

<span lang="UK">Для налаштування перенесення архівних файлів на сервер баз даних та архівування необхідно:</span>

<span lang="UK">1. Увійти до командної консолі ШБО.</span>

<span lang="UK">2. Відкрити на редагування файл /etc/uxp/conf.d/local.ini за допомогою виконання наступної команди:</span>

```
sudo nano /etc/uxp/conf.d/local.ini
```

<span lang="UK">3. Додати наступний рядок до файлу:</span>

```
archive-transfer-command=/usr/share/uxp/scripts/archive-http-transporter.sh -r http://IP_адреса_сервера_баз_даних_та_архівування/cgi-bin/upload.pl
```

<span lang="UK">де </span>**<span lang="RU">&lt;</span><span lang="UK">IP\_адреса\_сервера\_баз\_даних\_та\_архівування</span>**<span lang="RU">**&gt;** </span><span lang="UK">-</span> <span lang="UK">відповідна IP-адреса сервера баз даних та архівування.</span>

[![Picture8_9.png](https://docs.trembita.gov.ua/uploads/images/gallery/2024-05/scaled-1680-/5n5HTSVIBa1KFbfz-picture8-9.png)](https://docs.trembita.gov.ua/uploads/images/gallery/2024-05/5n5HTSVIBa1KFbfz-picture8-9.png)

<span lang="RU">4. </span><span lang="UK">Закрити редактор, натиснувши комбінацію клавіш «Ctrl+X», буде показано повідомлення про підтвердження на збереження змін - необхідно натиснути «Y», а потім </span><span lang="UK">«Enter» для збереження.</span>

<span lang="RU">5. </span><span lang="UK">Увійти до командної консолі серверу баз даних та архівування</span>

<span lang="UK">6. Послідовно виконати наступні команди:</span>

```
sudo apt install apache2 libapache2-mod-perl2 libcgi-session-perl
sudo systemctl restart apache2
sudo a2enmod cgi
sudo mkdir /var/log/uxp_message_log_archive
sudo chown root:www-data /var/log/uxp_message_log_archive
sudo chmod 570 /var/log/uxp_message_log_archive
sudo mkdir /var/www/perl
```

<span lang="UK">7. Відкрити на редагування файл /etc/apache2/sites-enabled/000-default.conf за допомогою наступної команди:</span>

```
sudo nano /etc/apache2/sites-enabled/000-default.conf
```

<span lang="UK">8. Додати наступний блок конфігурації перед тегом &lt;/VritualHost&gt;:</span>

```
        ScriptAlias /cgi-bin/ /var/www/perl/
        <Directory /var/www/perl/>
                Options ExecCGI
                AddHandler cgi-script cgi pl
        </Directory>
```

<span lang="UK">[![Picture8_10.png](https://docs.trembita.gov.ua/uploads/images/gallery/2024-05/scaled-1680-/eJqs9yUaTMpD9LYH-picture8-10.png)](https://docs.trembita.gov.ua/uploads/images/gallery/2024-05/eJqs9yUaTMpD9LYH-picture8-10.png)</span>

<span lang="UK">9 Створити та відкрити на редагування файл /var/www/perl/upload.pl за допомогою наступної команди:</span>

```
sudo nano /var/www/perl/upload.pl
```

<span lang="UK">10. Додати наступні рядки:</span>

```
#!/usr/bin/perl -w
use CGI;
use Fcntl;
use strict;
use constant FILE_FIELD => "file";
my $q = new CGI;
# Error handling.
sub err {
    # HTTP-header with error status.
    print $q->header(-status => "500 @_");
    die @_;
}
# Directory where to archive posted files.
my $FILESTORE = '/var/log/uxp_message_log_archive';
# Create archive directory if not exists.
(! -d $FILESTORE) &&
    (mkdir $FILESTORE || err("Cannot create directory $FILESTORE"));
# Get file from request.
my $filename = $q->param(FILE_FIELD) || err("Invalid query: missing file name");
my $filehandle = $q->upload(FILE_FIELD);
# Write file from request.
my $buffer;
my $bytesread;
sysopen (OUT, "$FILESTORE/$filename", O_WRONLY | O_EXCL | O_CREAT) ||
        err("Cannot open file '$FILESTORE/$filename': $!");
while ((defined($bytesread = read($filehandle, $buffer, 0xffff)) ||
        err("Cannot read posted file: $!")) && $bytesread) {
    print OUT $buffer;
}
close OUT;
unlink($filehandle);
close($filehandle);
# HTTP header with OK status.
print $q->header();
exit 0;
```

<span lang="UK">11. Закрити редактор, натиснувши комбінацію клавіш «Ctrl+X», далі буде показано повідомлення про підтвердження на збереження змін - необхідно натиснути «Y», а потім </span><span lang="UK">«Enter» для збереження.</span>

<span lang="UK">12. Налаштувати права доступу до файлу /var/www/perl/upload.pl за допомогою наступної команди:</span>

```
sudo chmod +x /var/www/perl/upload.pl
```

<span lang="UK">13. Перезавантажити службу apache2 за допомогою наступної команди:</span>

```
sudo service apache2 restart
```

<p class="callout info"><span lang="UK"> </span>**<span lang="UK">Примітка.</span>**<span lang="UK"> Архівний файл успішно перенесений, коли сервер баз даних та архівування повертає код статусу HTTP 200.</span></p>