Решаю задачу контейнеризации проекта на Битрикс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? Какие еще настройки необходимо выполнить? Кто-нибудь решал подобную задачу?