Настройка NodeJS для push-уведомлений Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка NodeJS для push-уведомлений Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1173
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    745
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка NodeJS для push-уведомлений Битрикс

Long Polling через PHP держит по одному PHP-процессу (или FPM worker) на каждое открытое соединение. При 500 одновременных пользователях — 500 занятых воркеров, которые просто ждут событий и не делают ничего полезного. PHP-FPM под такой нагрузкой упирается в лимиты пула. NodeJS решает эту проблему: один Node-процесс обрабатывает тысячи соединений через event loop без блокировки.

Архитектура: NodeJS как Push-сервер

NodeJS push-сервер от Битрикс — это готовый пакет push-server, который входит в состав Bitrix VM или устанавливается отдельно. Он принимает события от PHP через HTTP API, хранит очередь в Redis и доставляет клиентам через WebSocket или SSE.

PHP → HTTP POST → NodeJS push-server ← WebSocket/SSE → браузеры
                        ↕
                     Redis

Установка NodeJS push-server

На Bitrix VM push-server уже установлен. На чистом сервере:

# Установка NodeJS LTS
curl -fsSL https://rpm.nodesource.com/setup_20.x | bash -
yum install -y nodejs

# Или для Ubuntu
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs

# Скачать push-server из репозитория Битрикс
# (пакет доступен подписчикам BitrixEnv или в составе Bitrix VM)
# Обычно располагается по пути:
ls /opt/push-server/

Типовая структура:

/opt/push-server/
  app.js          — точка входа
  config.json     — конфигурация
  node_modules/   — зависимости

Конфигурация push-server

Файл /opt/push-server/config.json:

{
  "server": {
    "http": {
      "port": 9010,
      "host": "127.0.0.1"
    },
    "websocket": {
      "port": 9011,
      "host": "0.0.0.0"
    }
  },
  "security": {
    "key": "your_secret_key_here",
    "cors": ["https://example.ru", "https://www.example.ru"]
  },
  "redis": {
    "host": "127.0.0.1",
    "port": 6379,
    "database": 1
  },
  "log": {
    "level": "warn",
    "file": "/var/log/push-server/app.log"
  },
  "cluster": {
    "workers": 2
  }
}

Порт 9010 — HTTP API для PHP (localhost only). Порт 9011 — WebSocket для браузеров (публичный, через Nginx прокси).

Systemd unit для push-server

cat > /etc/systemd/system/push-server.service << 'EOF'
[Unit]
Description=Bitrix Push Server
After=network.target redis.service

[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/push-server
ExecStart=/usr/bin/node app.js --config config.json
Restart=on-failure
RestartSec=5
StandardOutput=journal
StandardError=journal
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable push-server
systemctl start push-server

Nginx прокси для WebSocket

Браузеры не должны подключаться к NodeJS напрямую — нужен Nginx как прокси с SSL-терминацией:

# В блоке server для HTTPS
location /bitrix/subws/ {
    proxy_pass http://127.0.0.1:9011;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_read_timeout 86400;  # 24 часа для WebSocket
    proxy_send_timeout 86400;
}

location /bitrix/pub/ {
    proxy_pass http://127.0.0.1:9010;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_buffering off;
    proxy_cache off;
    proxy_read_timeout 25;
}

Настройка в Битрикс

В административной панели — «Настройки» → «Push and Pull» → вкладка «Сервер»:

  • Push-сервер: http://127.0.0.1:9010
  • Pull-сервер (публичный): https://example.ru/bitrix/pub/
  • WebSocket-сервер (публичный): wss://example.ru/bitrix/subws/
  • Ключ безопасности: тот же, что в config.json

Или через PHP-код:

\Bitrix\Main\Config\Option::set('pull', 'PUSH_SERVER_URL', 'http://127.0.0.1:9010');
\Bitrix\Main\Config\Option::set('pull', 'PULL_SERVER_URL', 'https://example.ru/bitrix/pub/');
\Bitrix\Main\Config\Option::set('pull', 'SERVER_ENABLED', 'Y');
\Bitrix\Main\Config\Option::set('pull', 'PUSH_SECURITY_KEY', 'your_secret_key_here');

Проверка соединения

# HTTP API доступен
curl -s http://127.0.0.1:9010/server/ping
# Ответ: {"result":"pong"}

# WebSocket через wscat
npm install -g wscat
wscat -c wss://example.ru/bitrix/subws/

# Логи push-server
journalctl -u push-server -f

Мониторинг активных соединений

# Количество WebSocket-соединений
curl -s http://127.0.0.1:9010/server/stat | python3 -m json.tool

# Ответ содержит: connections_count, channels_count, memory_usage

Если connections_count растёт без остановки и не снижается — утечка соединений. Проверить логи на ошибки отключения клиентов.