Налаштування NodeJS для push-повідомлень Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування NodeJS для push-повідомлень Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування Node.js для push-сповіщень Bitrix

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

Архітектура: Node.js як Push-сервер

Node.js push-сервер від Bitrix — це готовий пакет push-server, який входить у склад Bitrix VM або встановлюється окремо. Він приймає события від PHP через HTTP API, зберігає чергу в Redis та доставляє клієнтам через WebSocket або SSE.

PHP → HTTP POST → Node.js push-server ← WebSocket/SSE → браузери
                        ↕
                     Redis

Установка Node.js push-server

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

# Установка Node.js 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 з репозиторію Bitrix
# (пакет доступний підписникам 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

Браузери не повинні підключатися до Node.js безпосередньо — потрібен 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;
}

Налаштування у Bitrix

У адміністративній панелі — «Налаштування» → «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 росте без зупинки та не знижується — витік з'єднань. Перевірте журнали на помилки відключення клієнтів.