# Запуск дополнительной копии модуля

На одном сервере Asterisk могут быть запущены несколько копий модуля. Они могут быть подключены к одной телефонии, но к разным CRM.

{% hint style="warning" %}
**Важно:**

1. Внутренние номера на порталах не должны пересекаться (иначе один звонок будет попадать в несколько порталов).
2. У каждой копии модуля должен быть свой конфиг-файл и свои сетевые порты для подключения к админке, а также получения команд из CRM.
3. У каждой копии модуля должен быть свой кастомизатор.
4. Лицензирование осуществляется по адресам порталов.
5. При запуске нескольких копий модуля на один и тот же портал возможно превышение лимита запросов API CRM (копии модуля не согласовывают между собой частоту запросов).
   {% endhint %}

{% hint style="info" %}
Изменения описаны для Itgrix\_bx. Для Itgrix\_amo всё так же, только пути будут содержать `itgrix_amo` вместо `itgrix_bx`.
{% endhint %}

## Шаги создания копии

### **1. Создаём второй конфиг**

Назовём его `/etc/itgrix_bx/config-1.json`

```
cp /etc/itgrix_bx/config{,-1}.json
```

В новом конфиге исправляем обязательно:

* `port, secure_port` другой порт отличный от 8077, 8078

Пример обновлённых значений:

```
"port": 8075,
"secure_port": 8076,
```

### **2. Создаём файл конфигурации для нового сервиса**

```
cp /etc/systemd/system/itgrix_bx{,-1}.service
```

В новом файле для systemd вносим следующие изменения:

* `Description` поменять на имя новой службы (`itgrix_bx-1`);
* В `ExecStart` добавить флаг `--config` с именем нового конфига, который был создан на шаге 2;
* В `ExecStart` поменять имя лог-файла на новое.

Пример обновлённых значений:

```
[Unit]
Description=itgrix_bx-1

[Service]
ExecStart=/bin/sh -c "/opt/itgrix_bx/itgrix_bx --config=/etc/itgrix_bx/config-1.json >> /var/log/itgrix_bx-1.log"
```

### 3. Регистрация второй службы модуля интеграции

Запустим исполняемый файл модуля с ключом --register-instances для того, чтобы модуль обнаружил дополнительную копию:

```
/opt/itgrix_bx/itgrix_bx --register-instances
```

### **4. Настроить ротацию лога**

Нужно создать отдельный файл лога `cp /var/log/itgrix_bx{,-1}.log` и поменять его владельца на пользователя, под которым будет стартовать служба.

В `/etc/logrotate.d/itgrix_bx` копируем всё содержимое с новым именем лога.

Новое содержимое файла:

```
/var/log/itgrix_bx.log {

# ротация раз в день. Возможные варианты daily, weekly, monthly, size (например size=1M)
daily

# сохраняется последние 5 ротированных файла
rotate 5

# сжимать ротируемый файл
compress

# сжимать предыдущий файл при следующей ротации
delaycompress

# отсутствие файла не является ошибкой
missingok

# не создаём новый файл, копируем содержимое и обнуляем старый
copytruncate
}

/var/log/itgrix_bx-1.log {

# ротация раз в день. Возможные варианты daily, weekly, monthly, size (например size=1M)
daily

# сохраняется последние 5 ротированных файла
rotate 5

# сжимать ротируемый файл
compress

# сжимать предыдущий файл при следующей ротации
delaycompress

# отсутствие файла не является ошибкой
missingok

# не создаём новый файл, копируем содержимое и обнуляем старый
copytruncate
}
```

### **5. Создаём второй кастомизатор**

Для первой копии модуля кастомизатор располагается в папке `/opt/itgrix_bx/customizer/`.

В файле `/opt/itgrix_bx/customizer/settings.json` ([начиная с версий Itgrix\_bx-3.9.0 и Itgrix\_amo-2.12.0](/custom_common/customizer-settings-update.md)) указаны конфиг и лог первой копии.

Для второй копии создаём папку `/opt/itgrix_bx/customizer-1/` и в файле `/opt/itgrix_bx/customizer-1/settings.json` прописываем конфиг и лог второй копии:

```json
{
  "configCrmField": "bitrix",
  "configPath": "/etc/itgrix_bx/config-1.json",
  "logPath": "/var/log/itgrix_bx-1.log",
  "requestTimeoutSec": 2
}
```

{% hint style="info" %}
Для Itgrix\_amo `"configCrmField": "amo"`, значения путей содержат `itgrix_amo`.
{% endhint %}

{% hint style="info" %}
**ДО** версий Itgrix\_bx-3.9.0 и Itgrix\_amo-2.12.0 настройки кастомизатора хранились в файле `/opt/itgrix_bx/customizer/Settings.php`:

```php
class Settings {
    const CONFIG_CRM_FIELD    = 'bitrix'; // Название поля в CONFIG_PATH
    const CONFIG_PATH  = '/etc/itgrix_bx/config-1.json';
    const LOG_PATH     = '/var/log/itgrix_bx-1.log';
}
```

{% endhint %}

Также в конфиге второй копии `/etc/itgrix_bx/config-1.json` нужно указать соответствующий кастомизатор:

```javascript
  "customizer": {
    ...
    "program_path": "/opt/itgrix_bx/customizer-1/customize.php",
    ...
  }
```

Теперь настраиваем кастомизации в `/opt/itgrix_bx/customizer-1/actions/` в соответствии с потребностями второй копии.

### **6. Запуск/стоп/рестарт/статус/автозапуск**

`systemctl start itgrix_bx-1`\
`systemctl stop itgrix_bx-1`\
`systemctl restart itgrix_bx-1`\
`systemctl status itgrix_bx-1`\
`systemctl enable itgrix_bx-1`\
`systemctl disable itgrix_bx-1`

### **7. Авторизуемся на портале**

При запущенной службе заходим в админку на страницу настройки CRM: `localhost:8075/config/master/crm`

Выполняем авторизацию.


---

# 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://docs.itgrix.ru/for-admins/zapusk-dopolnitelnoi-kopii-modulya.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.
