# Развёртывание на текущем cPanel

Рекомендуемая структура:

```text
/home/response/telegram-amocrm.response.by/
/home/response/.secrets/telegram-amocrm.env
```

Секреты не должны находиться в document root.

## 1. База

Создайте отдельную MySQL/MariaDB базу и пользователя. Заполните `DB_*` в env.

## 2. Telegram API

На `my.telegram.org` создайте собственное приложение и получите:

```env
TELEGRAM_API_ID=...
TELEGRAM_API_HASH=...
```

Не используйте чужие `api_id/api_hash`.

## 3. Env

```bash
mkdir -p /home/response/.secrets
cp .env.example /home/response/.secrets/telegram-amocrm.env
chmod 700 /home/response/.secrets
chmod 600 /home/response/.secrets/telegram-amocrm.env
```

Сгенерируйте независимые ключи:

```bash
openssl rand -hex 32  # SESSION_ENCRYPTION_KEY
openssl rand -hex 32  # ADMIN_API_KEY
openssl rand -hex 32  # WIDGET_API_KEY
openssl rand -hex 32  # WEBHOOK_SHARED_SECRET
```

## 4. Node.js App в cPanel

- Node.js: 20 или 22;
- Application root: `telegram-amocrm.response.by`;
- Application URL: нужный HTTPS-поддомен;
- Application startup file: `app_wrapper.cjs`;
- Environment variable:

```text
DOTENV_CONFIG_PATH=/home/response/.secrets/telegram-amocrm.env
```

Далее через SSH/Terminal:

```bash
cd /home/response/telegram-amocrm.response.by
npm install --omit=dev
npm run build
npm run migrate:prod
```

Для сборки TypeScript dev-зависимости нужны. Поэтому на shared-хостинге удобнее выполнить:

```bash
npm install
npm run build
npm run migrate:prod
npm prune --omit=dev
```

После этого нажмите **Restart Application**.

## 5. Проверка

```text
https://ВАШ-ДОМЕН/api/health
```

Откройте корень домена — там административная панель. Введите `ADMIN_API_KEY`, создайте QR и отсканируйте:

```text
Telegram → Настройки → Устройства → Подключить устройство
```

## 6. Проверка пригодности shared-хостинга

Оставьте `RUN_TELEGRAM_WORKER=1`, подключите тестовый аккаунт и проверьте:

- входящее сообщение появляется без HTTP-запроса к сайту;
- `/api/health` показывает подключённый аккаунт после нескольких часов простоя;
- процесс восстанавливается после Restart Application;
- нет нескольких параллельных экземпляров приложения.

Если Passenger засыпает или соединения периодически пропадают, перенесите весь проект либо только Node worker на небольшой VPS.

## 7. amoCRM

1. Создайте private/public integration с виджетом.
2. Загрузите `widget.zip`.
3. В настройках виджета задайте HTTPS URL шлюза и `WIDGET_API_KEY`.
4. Зарегистрируйте Chats API channel и получите `channel_id` и secret.
5. Получите Chats API account ID (`amojo_id`).
6. Заполните `AMO_CHAT_CHANNEL_ID`, `AMO_CHAT_SECRET`, `AMO_CHAT_ACCOUNT_ID`.
7. Вызовите `POST /api/admin/amo/connect-channel` с `ADMIN_API_KEY`.
8. Сохраните полученный `scope_id` как `AMO_CHAT_SCOPE_ID` и перезапустите приложение.
9. Укажите webhook URL:

```text
https://ВАШ-ДОМЕН/webhooks/amo/WEBHOOK_SHARED_SECRET
```

## 8. Обновление

```bash
npm install
npm run build
npm run migrate:prod
npm prune --omit=dev
```

Затем Restart Application в cPanel.
