<commit_before># Налаштування


Розміщення

* При інсталяції через buildout
    в `./openprocurement.search.buildout/etc`
* При інсталяціїї debian пакета
    в `/etc/search-tenders`


Перелік файлів налаштувань

* [accesslog.conf](#accesslog) - налаштування формату логу пошукових запитів
* [circus.ini](#circus) -  налаштування менеджера процесів
* [ftpsync.ini](#ftpsync) - налаштування FTP синхронізації OCDS файлів
* [logrotate.conf](#logrotate) - правила ротації логів
* [search.ini](#search) - основний файл налаштувань
* [/etc/cron.d/search-tenders](#crontab) - періодичні операції


<a name="accesslog"></a>

## accesslog.conf

Встановлює розміщення і формат лог файлу пошукових запитів, додає до стандартного формату час виконання кожного запиту

```ini
accesslog = '/var/log/search_access.log'
access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s" %(L)s'
```

Документація по [gunicorn settings](http://docs.gunicorn.org/en/stable/settings.html#access-log-format)

Підключається в `circus.ini`


<a name="circus"></a>

## circus.ini

Circus запускає, моніторить роботу і перезапускає в разі аварійного завершення два основні сервіси:

1. Пошукове HTTP API, що запускається за допомогою gunicorn, приймає і обробляє пошукові запити, також видає статистику по `GET /heartbeat`
2. Індексуючий демон, що підтримує наповненя індексу в ElasticSearch, веде його перевірку і переіндексацію за розкладом

Документація [Circus Configuration](http://circus.readthedocs.io/en/latest/for-ops/configuration/)

Приклад налаштувань при інсталяції deb пакета

```ini
[circus]
; сокет для управління через circusctl
endpoint = ipc:///opt/search-tenders/var/circus_endpoint
logoutput = /var/log/search-tenders/circus.log
pidfile = /run/search-tenders.pid


; HTTP API для обробки пошукових запитів
; запускається через gunicorn
; налаштування http сервісу в search.ini
; налаштування gunicorn в accesslog.conf
[watcher:search_server]
cmd = /opt/search-tenders/bin/gunicorn
args = -c /etc/search-tenders/accesslog.conf --paste /etc/search-tenders/search.ini
working_dir = /opt/search-tenders/var
priority = 1
send_hup = True
; розміщення лог-файлів
stdout_stream.class = FileStream
stdout_stream.filename = /var/log/search-tenders/search_error.log
stderr_stream.class = FileStream
stderr_stream.filename = /var/log/search-tenders/search_error.log
; користувач з правами якого працює сервіс
uid = searchtenders
gid = searchtenders


; головний процес індексатора
; налаштування в search.ini
[watcher:index_worker]
cmd = /opt/search-tenders/bin/index_worker
args = /etc/search-tenders/search.ini
working_dir = /opt/search-tenders/var
warmup_delay = 1
priority = 2
copy_env = True
; розміщення лог-файлів
stdout_stream.class = FileStream
stdout_stream.filename = /var/log/search-tenders/index_info.log
stderr_stream.class = FileStream
stderr_stream.filename = /var/log/search-tenders/index_error.log
; користувач з правами якого працює сервіс
uid = searchtenders
gid = searchtenders
```

Типові налаштування рідко змінюються, є можливість додавати власні секції і таким чином


<a name="ftpsync"></a>

## ftpsync.ini

Використовувався до липня 2016, дозволяв отримувати вигрузку паперових продцедур з https://ips.vdz.ua/

```ini
[ftpsync]
; ip адреса FTP серверу
host = 10.20.30.40
; користувач і пароль FTP
user = edz_user
passwd = ****
; таймаут на мережеві операції
timeout = 120
; папка куди будуть завантажуватись файли
local_dir = /mnt/di2/ocds
; маска файлів що підпадають під синхронізацію
filematch = ocds-tender-*.json
```

<a name="logrotate"></a>

## logrotate.conf

Стандартний [logrotate синтаксис](https://linux.die.net/man/5/logrotate.conf)

Винесений окремо для можливості ротації лог-файлів в нестандартний час (рекомендується в 23:50)

```
/var/log/search-tenders/*.log
/opt/search-tenders/var/log/*.log {
    su root adm
    weekly
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    postrotate
        /etc/init.d/search-tenders reloadlogs
    endscript
}
```

Зверніть увагу на перезапуск після ротації за допомогою `reloadlogs`

Стандартний `reload` перехоплюється `systemd` і працює некоректно.


<a name="search"></a>

## search.ini

Основний файл налаштувань, містить в одному місці спільні налаштування для сервісів:

1. Пошукового HTTP API
2. Індексатора
3.  Додаткових утиліт
    - видалення старих індексів `clean_indexes`
    - перевірки наповнення індексів `test_index`
    - перевірки наявності останніх документів `test_search`
    - перервірки швидкості роботи `test_load`
    - перевірки назв організацій `update_orgs`


<a name="server_main"></a>

### Розділ [server:main]

Загальні налаштуванян gunicorn для пошукового HTTP API

Документація див. [gunicorn settings](http://docs.gunicorn.org/en/stable/settings.html)

```ini
[server:main]<commit_msg>docs/settings cosmetic list<commit_after># Налаштування


Розміщення

* При інсталяції через buildout
    в `./openprocurement.search.buildout/etc`
* При інсталяціїї debian пакета
    в `/etc/search-tenders`


Перелік файлів налаштувань

* [accesslog.conf](#accesslog) - налаштування формату логу пошукових запитів
* [circus.ini](#circus) -  налаштування менеджера процесів
* [ftpsync.ini](#ftpsync) - налаштування FTP синхронізації OCDS файлів
* [logrotate.conf](#logrotate) - правила ротації логів
* [search.ini](#search) - основний файл налаштувань
* [/etc/cron.d/search-tenders](#crontab) - періодичні операції


<a name="accesslog"></a>

## accesslog.conf

Встановлює розміщення і формат лог файлу пошукових запитів, додає до стандартного формату час виконання кожного запиту

```ini
accesslog = '/var/log/search_access.log'
access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s" %(L)s'
```

Документація по [gunicorn settings](http://docs.gunicorn.org/en/stable/settings.html#access-log-format)

Підключається в `circus.ini`


<a name="circus"></a>

## circus.ini

Circus запускає, моніторить роботу і перезапускає в разі аварійного завершення два основні сервіси:

1. Пошукове HTTP API, що запускається за допомогою gunicorn, приймає і обробляє пошукові запити, також видає статистику по `GET /heartbeat`
2. Індексуючий демон, що підтримує наповненя індексу в ElasticSearch, веде його перевірку і переіндексацію за розкладом

Документація [Circus Configuration](http://circus.readthedocs.io/en/latest/for-ops/configuration/)

Приклад налаштувань при інсталяції deb пакета

```ini
[circus]
; сокет для управління через circusctl
endpoint = ipc:///opt/search-tenders/var/circus_endpoint
logoutput = /var/log/search-tenders/circus.log
pidfile = /run/search-tenders.pid


; HTTP API для обробки пошукових запитів
; запускається через gunicorn
; налаштування http сервісу в search.ini
; налаштування gunicorn в accesslog.conf
[watcher:search_server]
cmd = /opt/search-tenders/bin/gunicorn
args = -c /etc/search-tenders/accesslog.conf --paste /etc/search-tenders/search.ini
working_dir = /opt/search-tenders/var
priority = 1
send_hup = True
; розміщення лог-файлів
stdout_stream.class = FileStream
stdout_stream.filename = /var/log/search-tenders/search_error.log
stderr_stream.class = FileStream
stderr_stream.filename = /var/log/search-tenders/search_error.log
; користувач з правами якого працює сервіс
uid = searchtenders
gid = searchtenders


; головний процес індексатора
; налаштування в search.ini
[watcher:index_worker]
cmd = /opt/search-tenders/bin/index_worker
args = /etc/search-tenders/search.ini
working_dir = /opt/search-tenders/var
warmup_delay = 1
priority = 2
copy_env = True
; розміщення лог-файлів
stdout_stream.class = FileStream
stdout_stream.filename = /var/log/search-tenders/index_info.log
stderr_stream.class = FileStream
stderr_stream.filename = /var/log/search-tenders/index_error.log
; користувач з правами якого працює сервіс
uid = searchtenders
gid = searchtenders
```

Типові налаштування рідко змінюються, є можливість додавати власні секції і таким чином


<a name="ftpsync"></a>

## ftpsync.ini

Використовувався до липня 2016, дозволяв отримувати вигрузку паперових продцедур з https://ips.vdz.ua/

```ini
[ftpsync]
; ip адреса FTP серверу
host = 10.20.30.40
; користувач і пароль FTP
user = edz_user
passwd = ****
; таймаут на мережеві операції
timeout = 120
; папка куди будуть завантажуватись файли
local_dir = /mnt/di2/ocds
; маска файлів що підпадають під синхронізацію
filematch = ocds-tender-*.json
```

<a name="logrotate"></a>

## logrotate.conf

Стандартний [logrotate синтаксис](https://linux.die.net/man/5/logrotate.conf)

Винесений окремо для можливості ротації лог-файлів в нестандартний час (рекомендується в 23:50)

```
/var/log/search-tenders/*.log
/opt/search-tenders/var/log/*.log {
    su root adm
    weekly
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    postrotate
        /etc/init.d/search-tenders reloadlogs
    endscript
}
```

Зверніть увагу на перезапуск після ротації за допомогою `reloadlogs`

Стандартний `reload` перехоплюється `systemd` і працює некоректно.


<a name="search"></a>

## search.ini

Основний файл налаштувань, містить в одному місці спільні налаштування для сервісів:

1. Пошукового HTTP API
2. Індексатора
3.  Додаткових утиліт

    - видалення старих індексів `clean_indexes`
    - перевірки наповнення індексів `test_index`
    - перевірки наявності останніх документів `test_search`
    - перервірки швидкості роботи `test_load`
    - перевірки назв організацій `update_orgs`


<a name="server_main"></a>

### Розділ [server:main]

Загальні налаштуванян gunicorn для пошукового HTTP API

Документація див. [gunicorn settings](http://docs.gunicorn.org/en/stable/settings.html)

```ini
[server:main]
{'fraction_non_alphanumeric': 0.1061937752042188, 'fraction_numerical': 0.006410919243097921, 'mean_word_length': 4.740059347181009, 'pattern_counts': {'":': 0, '<': 27, '<?xml version=': 0, '>': 27, 'https://': 4, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 2, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3899291', 'n_tokens_mistral': 4010, 'n_tokens_neox': 4533, 'n_words': 847}