Задать вопрос

Как настроить Push & Pull при докеризации приложения на Битрикс24?

Решаю задачу контейнеризации проекта на Битрикс24. Решение: "1С-Битрикс: Корпоративный портал 25.100.400".
Столкнулся с проблемой настройки сервера очередей Push & Pull. При выполнении проверки в разделе "Проверка системы" получаю ошибку:
Результат теста: Ошибка! Не удалось подключиться к модулю nginx-push-stream отправки мгновенных сообщений
.

Как выглядит архитектура локально
Есть контейнер с приложением app, который содержит все необходимые модули и ядро битрикс. Контейнер с Redis на базе redis:8-alpine и контейнер push-server. На локальной машине также поднят контейнер с traefik, благодаря которому получаю доступ к приложению по адресу dev.local.
Push & pull устанавливаю, следуя инструкции https://dev.1c-bitrix.ru/learning/course/index.php....
Сервис в docker-compose:
push-server:
    build:
      context: ./docker/push-server
      dockerfile: Dockerfile
    restart: always
    networks:
      - push-net
      - traefik_net
    environment:
      # Bitrix Push-Server config
      PUSH_SERVER_DEBUG: "1"
      PUSH_SERVER_LOG_STDOUT: "true"
      PUSH_SERVER_SECURITY_KEY: ${PUSH_SERVER_SECURITY_KEY}
      PUSH_SERVER_RUN_DIR: /run/push-server
      # Подключение к Redis
      PUSH_SERVER_REDIS_HOST: redis
      PUSH_SERVER_REDIS_PORT: "6379"
      PUSH_SERVER_REDIS_DB: "0"
      PUSH_SERVER_GROUP: ${PUSH_SERVER_GROUP:-bitrix}
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=traefik_net"

      # WebSocket (subws)
      - "traefik.http.routers.push-server-subws.rule=Host(`dev.local`) && PathPrefix(`/bitrix/subws/`)"
      - "traefik.http.routers.push-server-subws.entrypoints=web"
      - "traefik.http.routers.push-server-subws.service=push-server-sub"
      - "traefik.http.services.push-server-sub.loadbalancer.server.port=8895"

      # WebSocket (sub)
      - "traefik.http.routers.push-server-sub.rule=Host(`dev.local`) && PathPrefix(`/bitrix/sub/`)"
      - "traefik.http.routers.push-server-sub.entrypoints=web"
      - "traefik.http.routers.push-server-sub.service=push-server-sub"
      - "traefik.http.services.push-server-sub.loadbalancer.server.port=8895"

      # HTTP pub
      - "traefik.http.routers.push-server-pub.rule=Host(`dev.local`) && PathPrefix(`/bitrix/pub/`)"
      - "traefik.http.routers.push-server-pub.entrypoints=web"
      - "traefik.http.routers.push-server-pub.service=push-server-pub"
      - "traefik.http.services.push-server-pub.loadbalancer.server.port=8893"

      # HTTP rest
      - "traefik.http.routers.push-server-rest.rule=Host(`dev.local`) && PathPrefix(`/bitrix/rest/`)"
      - "traefik.http.routers.push-server-rest.entrypoints=web"
      - "traefik.http.routers.push-server-rest.service=push-server-pub"
      - "traefik.http.services.push-server-pub.loadbalancer.server.port=8893"
    depends_on:
      - redis

Содержимое Dockerfile:
FROM node:12-alpine

WORKDIR /opt/push-server

# Установка зависимостей для работы с файлами и пользователями
RUN apk add --no-cache bash shadow

# Скачиваем архив push-server с официального репозитория Bitrix
ADD https://repo.bitrix.info/vm/push-server-0.4.0.tgz /opt/push-server/push-server-0.4.0.tgz

# Устанавливаем push-server через npm
RUN npm install --production ./push-server-0.4.0.tgz

# Создаём пользователя bitrix и добавляем в существующую группу
RUN adduser -S -G bitrix bitrix

# Создаём необходимые директории и назначаем владельца bitrix
RUN mkdir -p /run/push-server /var/log/push-server /etc/sysconfig /opt/push-server/config \
    && chown -R bitrix:bitrix /run/push-server /var/log/push-server /etc/sysconfig /opt/push-server/config /opt/push-server

# Копируем entrypoint-скрипт
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

USER bitrix

ENTRYPOINT ["/entrypoint.sh"]

И, наконец, входной скрипт, выполняющийся при запуске контейнера:
#!/bin/bash
set -e

: "${PUSH_SERVER_SECURITY_KEY:=test-key}"
: "${PUSH_SERVER_RUN_DIR:=/tmp/push-server}"
: "${PUSH_SERVER_REDIS_HOST:=redis}"
: "${PUSH_SERVER_REDIS_PORT:=6379}"
: "${PUSH_SERVER_GROUP:=www-data}"
: "${PUSH_SERVER_PUB_PORT:=8893}"
: "${PUSH_SERVER_SUB_PORT:=8895}"

export DEBUG="push-server:*"
export NODE_ENV=development
export LOG_LEVEL=debug

cat > /opt/push-server/node_modules/push-server/config/config.json <<EOF
{
  "servers": [
    {
      "name": "pub",
      "port": $PUSH_SERVER_PUB_PORT,
      "routes": {
        "pub": "/bitrix/pub/",
        "rest": "/bitrix/rest/"
      }
    },
    {
      "name": "sub",
      "port": $PUSH_SERVER_SUB_PORT,
      "routes": {
        "sub": "/bitrix/subws/"
      }
    }
  ],
  "security": {
    "key": "$PUSH_SERVER_SECURITY_KEY"
  },
  "storage": {
    "type": "redis",
    "host": "$PUSH_SERVER_REDIS_HOST",
    "port": $PUSH_SERVER_REDIS_PORT
  },
  "cloudMode": false,
  "debug": {
    "ip": ["127.0.0.1", "::1"],
    "trustProxy": true,
    "level": "debug"
  },
  "limits": {
    "maxPayload": 1048576,
    "maxConnPerChannel": 100,
    "maxMessagesPerRequest": 100,
    "maxChannelsPerRequest": 100
  }
}
EOF

exec node /opt/push-server/node_modules/push-server/server.js


По итогу, в логах контейнера я вижу следующий вывод:
2025-05-22 04:29:53.110 pub listening at http://:::8893 PID: 1
2025-05-22T04:29:53.113893469Z 2025-05-22 04:29:53.113 sub listening at http://:::8895 PID: 1

Значит, сервис слушает на нужных мне портах 8893 и 8895. Проксированием в контейнер занимается traefik.
Заходя в админку приложения, я вижу, как первым делом выполняется запрос ws://dev.local/bitrix/subws/?CHANNEL_ID=&binaryMod.... Запрос завершается статусом 101 Switching Protocols.
В настройках модуля в админке я указал опцию "Виртуальная машина 7.3 - 7.5 (Bitrix Push server 2.0)".
Тем не менее, при выполнении проверки, вижу ошибку:

Результат теста: Ошибка! Не удалось подключиться к модулю nginx-push-stream отправки мгновенных сообщений

Почему битрикс по прежнему пытается использовать nginx-push-stream? Какие еще настройки необходимо выполнить? Кто-нибудь решал подобную задачу?
  • Вопрос задан
  • 65 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы