CRM Битрикс-24 на веб-окружении под Ubuntu 24.04, c поддержкой PUSH и многосайтовости

Просмотров: 911

Задача: Так как с 30 июня 2024 года операционная система CentOS-7 полностью снята с поддержки и не будет получать обновлений безопасности, принято решение создать аналог "Битрикс веб окружение" на Ubuntu 24.04

Запуск CRM Битрикс-24 на кастомном веб-окружении под Ubuntu 24.04

В документации 1С-Битрикс есть инструкция по запуску аналога веб окружения на Debian-11. Но данная система будет поддерживаться до 2026 года. Я решил чем дольше будет поддерживаться система, тем лучше, поэтому выбрал Ubuntu LTS 24.04 (поддержка до 2032 года)

Важно! В принципе, на получившемся веб-окружении можно запускать и БУС версию 1С-Битрикс, но моя основная задача - заставить работать push-server, необходимый для CRM редакций. Для обычного БУС более чем подойдет запуск на панели управления сервером типа "Hestia CP"

Битрикс веб окружение на Ubuntu - основные приложения

Создайте пользователя "bitrix" (если его еще нет в системе), задайте ему надежный пароль:

useradd -m bitrix
passwd bitrix

Как правило, на арендованных серверах вам сразу выдается root доступ. Если устанавливаете ubuntu самостоятельно root изначально заблокирован, но при установке можете указать нового пользователя как "bitrix" и работать с sudo правами от его имени.

Для начала установим основные приложения, после ввода некоторых команд будет запрашиваться подтверждение (Y/n) всегда выбираем Y - соглашаясь со всем:

Устанавливаем все обновления:

apt update && apt upgrade

Разом устанавливаем Apache2, PHP (установится версия 8.3) с нужными модулями, NGINX, MARIADB, NODEJS, NPM, REDIS и вспомогательное ПО:

apt install apache2 php php-cli php-common php-gd php-ldap php-mbstring php-mysql php-opcache php-pear php-apcu php-mcrypt php-memcache php-zip php-pspell php-xml nginx mariadb-server mariadb-common nodejs npm redis mc nano htop php-mail sendmail acl -y

Да, в качестве сервера баз данных будем использовать MariaDB, она работает ощутимо быстрее чем MySQL. На тестовой установке MariaDB с 4Гб оперативной памяти выдает под 10 000 операций записи чтения в секунду против ~6000 у MySql

Меняем конфигурации всех приложений

Я подготовил конфигурации на виртуальной машине с 2 ядрами CPU и 4Гб оперативной памяти. Более тонко рекомендую подкручивать все настройки под ваше железо. Но и с этими настройками все заработает достаточно производительно.

Скачиваем и распаковываем архив: UBUNTU24_BX_ENV.zip. Внутри все структурировано по директориям находящимся в "/etc/"

Просто копируем все файлы, находящиеся в архиве, по аналогичным директориям в "/etc/"" с полной заменой файлов.

До настраиваем сервисы веб окружения

Команды можно выполнить все сразу, но лучше выполнять их по одной по строчно

Начнем с NGINX. Чтобы избежать проблем остановим apache, он скорее всего и не запущен еще, но все же). :

echo "127.0.0.1 push httpd" >> /etc/hosts
systemctl stop apache2
systemctl --now enable nginx

Далее Apache2:

a2dismod --force autoindex
a2enmod rewrite
systemctl --now enable apache2

Теперь MariaDB:

systemctl --now enable mariadb
systemctl restart mariadb

Нужно войти в консоль mysql и донастроить ее:

mysql_secure_installation

Попросит ввести пароль root базы данных, просто нажимаете Enter - пароля у root нет. Далее будет задан ряд вопросов, отвечаем так:

  • Switch to unix_socket authentication: выбираем "n"
  • Change the root password: выбираем "y" и дважды вводим пароль для root (его не забываем)
  • Remove anonymous users?: выбираем "y"
  • Disallow root login remotely?: выбираем "y"
  • Remove test database: выбираем "y"
  • Reloading privilege: выбираем "y"

Следующим донастраиваем REDIS:

echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf
sysctl vm.overcommit_memory=1

usermod -g bitrix redis
chown root:bitrix /etc/redis/ /var/log/redis/
[[ ! -d /etc/systemd/system/redis.service.d ]] && mkdir /etc/systemd/system/redis.service.d
echo -e '[Service]\nGroup=bitrix' > /etc/systemd/system/redis.service.d/custom.conf

Включаем и запускаем REDIS сервис:

systemctl daemon-reload
systemctl enable redis-server.service
systemctl restart redis-server.service

В принципе, у вас готово окружение, на котором можно запускать проекты на БУС. Но пока не заработают на ЦРМ.

Установка Certbot для LetsEncrypt на Ubuntu 24.04

Да, этот шаг можно было выполнить в самом начале, когда ставили основные приложения, но вынес в отдельный блок.

CertBot позволяет нам получать и автоматически обновлять LetsEncrypt SSL сертификаты для доменов. Устанавливаем:

apt install certbot python3-certbot-nginx

Выполняем команду конфигурации:

certbot --nginx

Попросит ввести email для уведомлений и принять лицензию (нажимаем Y пока вся лицензия не примется).

Далее в crontab (nano /etc/crontab) добавляем расписание. Каждый день в 00:00 certbot будет проверять сертификаты сайтов и обновлять по необходимости.

0 0 * * * /usr/bin/certbot renew --quiet

Настройка Push-server на Ubuntu 24.04

Скачиваем и устанавливаем push сервер. Установка займет минут 15, будет казаться что все зависло, но все в порядке, просто ждем:

cd /opt
wget https://bazarow.ru/upload/fo_all/push-server-0.3.0.tgz
npm install --production ./push-server-0.3.0.tgz

Далее выполняем:

ln -sf /opt/node_modules/push-server/etc/push-server /etc/push-server
cd /opt/node_modules/push-server
cp etc/init.d/push-server-multi /usr/local/bin/push-server-multi
mkdir /etc/sysconfig
cp etc/sysconfig/push-server-multi  /etc/sysconfig/push-server-multi
cp etc/push-server/push-server.service  /etc/systemd/system/
ln -sf /opt/node_modules/push-server /opt/push-server

Открываем файл по пути "nano /etc/sysconfig/push-server-multi" и в самый верх добавляем:

GROUP=bitrix
SECURITY_KEY="ЗДЕСЬ ПРИДУМЫВАЕМ ПАРОЛЬ ОЧЕНЬ ДЛИННЫЙ, СИМВОЛОВ НА 40"
RUN_DIR=/tmp/push-server
REDIS_SOCK=/var/run/redis/redis.sock

Пароль из параметра "SECURITY_KEY" вы будете использовать в настройках Push&Pull модуля 1С-Битрикс. Переназначить его позже будет очень трудоемко, вписывайте сразу что-то сложное и длинное.

Выполняем команды:

/usr/local/bin/push-server-multi configs pub
/usr/local/bin/push-server-multi configs sub

echo 'd /tmp/push-server 0770 bitrix bitrix -' > /etc/tmpfiles.d/push-server.conf
systemd-tmpfiles --remove --create

В "nano /etc/systemd/system/push-server.service" проверяем наличие таких строчек (если они не такие, редактируем - остальные не трогаем):

User=bitrix
Group=bitrix
ExecStart=/usr/local/bin/push-server-multi systemd_start
ExecStop=/usr/local/bin/push-server-multi stop

И еще две команды:

systemctl daemon-reload
systemctl --now enable push-server

Добавляем сайт заглушку в окружение

Этот сайт будет своего рода сайтом по умолчанию. Лучше всего его не использовать для установки реального сайта, просто он должен существовать в системе. Можно в его корне разместить index.php файл с некой заглушкой. Она будет открываться при прямом открытии сервера по http://IP_сервера. Выполняем команды:

mkdir /home/bitrix/www
cd /home/bitrix/
chown bitrix:bitrix /home/bitrix/www -R

Добавление файрвола, открытие нужных портов

Нужно установить файрвол, тем самым закрыть все порты и открыть только нужные. Устанавливаем UFW

apt install ufw
ufw enable

Открываем нужные порты (перечислены и нужные для push сервера):

ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 8890/tcp
ufw allow 8891/tcp
ufw allow 8893/tcp
ufw allow 8894/tcp
ufw allow 5222/tcp
ufw allow 5223/tcp

ufw allow ????/tcp

Последний порт придумайте сами, он будет использоваться для ssh вместо стандартного 22-го. Стандартный порт ssh меняем в "nano /etc/ssh/sshd_config", раскомментируем строчку "#Port 22" и меняем на нужный.

Полностью перезагружаем сервер:

reboot

Добавление сайтов в систему

Итак, мы хотим добавлять любое количество сайтов в наше окружение, для этого создаем sh скрипт:

nano /root/add_site.sh

С содержимым:

#!/bin/bash

# Запросить у пользователя название проекта
echo "Введите название проекта:"
read PROJECT_NAME

# Создать директорию для проекта
PROJECT_DIR="/home/bitrix/ext_www/$PROJECT_NAME"
if ! mkdir -p "$PROJECT_DIR"; then
    echo "Ошибка: не удалось создать директорию $PROJECT_DIR"
    exit 1
fi

# Установить права для директории
chown -R bitrix:bitrix "$PROJECT_DIR"

# Это не нужно, оставлено - вдруг пригодится
# chmod g+w "$PROJECT_DIR" -R

# Создать конфигурационный файл для Apache
APACHE_CONF="/etc/apache2/sites-available/$PROJECT_NAME.conf"

cat <<EOL > "$APACHE_CONF"
<VirtualHost *:8090>
    ServerName $PROJECT_NAME
    ServerAdmin webmaster@localhost
    DocumentRoot /home/bitrix/ext_www/$PROJECT_NAME

    ErrorLog \${APACHE_LOG_DIR}/error_log
    LogLevel warn
    CustomLog \${APACHE_LOG_DIR}/access.log combined

    <IfModule mod_rewrite.c>
        #Nginx should have "proxy_set_header HTTPS YES;" in location
        RewriteEngine On
        RewriteCond %{HTTP:HTTPS} =YES
        RewriteRule .* - [E=HTTPS:on,L]
    </IfModule>

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

    <DirectoryMatch .*\.svn/.*>
        Require all denied
    </DirectoryMatch>

    <DirectoryMatch .*\.git/.*>
        Require all denied
    </DirectoryMatch>

    <DirectoryMatch .*\.hg/.*>
        Require all denied
    </DirectoryMatch>

    <Directory /home/bitrix/ext_www/$PROJECT_NAME>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        DirectoryIndex index.php index.html index.htm
        Require all granted
    </Directory>

    <Directory /home/bitrix/ext_www/$PROJECT_NAME/bitrix/cache>
        AllowOverride none
        Require all denied
    </Directory>

    <Directory /home/bitrix/ext_www/$PROJECT_NAME/bitrix/managed_cache>
        AllowOverride none
        Require all denied
    </Directory>

    <Directory /home/bitrix/ext_www/$PROJECT_NAME/bitrix/local_cache>
        AllowOverride none
        Require all denied
    </Directory>

    <Directory /home/bitrix/ext_www/$PROJECT_NAME/bitrix/stack_cache>
        AllowOverride none
        Require all denied
    </Directory>

    <Directory /home/bitrix/ext_www/$PROJECT_NAME/upload>
        AllowOverride none
        AddType text/plain php,php3,php4,php5,php6,phtml,pl,asp,aspx,cgi,dll,exe,ico,shtm,shtml,fcg,fcgi,fpl,asmx,pht
        php_value engine off
    </Directory>

    <Directory /home/bitrix/ext_www/$PROJECT_NAME/upload/support/not_image>
        AllowOverride none
        Require all denied
    </Directory>

    <Directory /home/bitrix/ext_www/$PROJECT_NAME/bitrix/images>
        AllowOverride none
        AddType text/plain php,php3,php4,php5,php6,phtml,pl,asp,aspx,cgi,dll,exe,ico,shtm,shtml,fcg,fcgi,fpl,asmx,pht
        php_value engine off
    </Directory>

    <Directory /home/bitrix/ext_www/$PROJECT_NAME/bitrix/tmp>
        AllowOverride none
        AddType text/plain php,php3,php4,php5,php6,phtml,pl,asp,aspx,cgi,dll,exe,ico,shtm,shtml,fcg,fcgi,fpl,asmx,pht
        php_value engine off
    </Directory>
</VirtualHost>
EOL

# Активировать сайт в Apache
a2ensite "$PROJECT_NAME.conf"

# Перезапустить Apache
systemctl reload apache2

# Создать конфигурационный файл для Nginx
NGINX_CONF="/etc/nginx/sites-available/$PROJECT_NAME.conf"

cat <<EOL > "$NGINX_CONF"
server {
listen 80;
    server_name $PROJECT_NAME;

    proxy_set_header X-Real-IP \$remote_addr;
    proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
    proxy_set_header Host \$host;

    proxy_redirect ~^(http://[^:]+):\d+(/.+)\$ \$1\$2;
    proxy_redirect ~^(https://[^:]+):\d+(/.+)\$ \$1\$2;

    set \$docroot "/home/bitrix/ext_www/$PROJECT_NAME";

    index index.php;
    root "/home/bitrix/ext_www/$PROJECT_NAME";

    # BXTEMP - personal settings
    include conf.d/bx_temp.conf;

    # Include parameters common to all websites
    include conf.d/bitrix.conf;
}
EOL

# Создать символическую ссылку для Nginx
ln -s "$NGINX_CONF" /etc/nginx/sites-enabled/

# Получить и применить сертификат для домена с помощью Certbot
certbot --nginx -d "$PROJECT_NAME"

# Перезапустить Nginx
systemctl reload nginx

Делаем его исполняемым:

chmod +x /root/add_site.sh

И запускаем, предварительно не забудьте направить домен на сервер:

/root/add_site.sh
  • Скрипт предложит вам ввести домен сайта
  • Cоздаст под него директорию в "/home/bitrix/ext_www/ДОМЕН"
  • Получит и применит сертификат (сделает авторедирект с http на https)

Вам осталось загрузить файл bitrixsetup.php в директорию сайта или закинуть резервную копию уже работающего сайта в "/home/bitrix/ext_www/ДОМЕН"

Видео: кастомное веб-окружение с поддержкой push-server

Полная версия на boosty:
CRM Битрикс-24 на Ubuntu 24.04

Важные замечания:

1. Проверка системы будет выдавать вам красное оповещение:
Ошибка! Для гарантированной работы "1С-Битрикс24" необходимо его устанавливать на веб-окружении Битрикс, у вас используется собственное серверное окружение.
От этого не избавиться.

2. Работы с сайтом выполняйте под пользователем bitrix - так вы не сломаете права на файлы и папки.

3. Все сделанное протестировано в течении двух недель на активно используемом "Битрикс-24". Возможно не учел каких-то нюансов, пишите вопросы и предложения по улучшению в комментариях.

Михаил Базаров 03.07.2024
После запуска портала в .settings.php добавляем
Код
'pull' => Array(
    'value' =>  array(
        'path_to_listener' => 'http://#DOMAIN#/bitrix/sub/',
        'path_to_listener_secure' => 'https://#DOMAIN#/bitrix/sub/',
        'path_to_modern_listener' => 'http://#DOMAIN#/bitrix/sub/',
        'path_to_modern_listener_secure' => 'https://#DOMAIN#/bitrix/sub/',
        'path_to_mobile_listener' => 'http://#DOMAIN#:8893/bitrix/sub/',
        'path_to_mobile_listener_secure' => 'https://#DOMAIN#:8894/bitrix/sub/',
        'path_to_websocket' => 'ws://#DOMAIN#/bitrix/subws/',
        'path_to_websocket_secure' => 'wss://#DOMAIN#/bitrix/subws/',
   'path_to_publish' => 'http://ИМЯ_ВАШЕГО_СЕРВЕРА:8895/bitrix/pub/',
        'path_to_publish_web' => 'http://#DOMAIN#/bitrix/rest/',
        'path_to_publish_web_secure' => 'https://#DOMAIN#/bitrix/rest/',
        'nginx_version' => '4',
        'nginx_command_per_hit' => '100',
        'nginx' => 'Y',
        'nginx_headers' => 'N',
        'push' => 'Y',
        'websocket' => 'Y',
        'signature_key' => 'ПРИДУМАННЫЙ ПАРОЛЬ ОЧЕНЬ ДЛИННЫЙ, СИМВОЛОВ НА 40',
        'signature_algo' => 'sha1',
        'guest' => 'N',
    ),
),

Обратите внимание на строку
'path_to_publish' => 'http://ИМЯ_ВАШЕГО_СЕРВЕРА:8895/bitrix/pub/',
Имя сервера можно узнать введя команду
Код
hostname

Перезапускаем Apache и push-server.

Если хотите что бы сайт работал используя http2 добавляем в конфигурацию домена "http2", в блок
Код
listen 443 ssl http2

Если не забуду, добавлю это в скрипт добавления нового сайта.
Алекс 16.07.2024
Одни сплошные ошибки! Ничего не работает. Для кого инструкция не понятно. Если чисто для себя то да нормально наверно! Для начинающих это вообще не инструкция, половина команд выдает ошибки. Раписывать тут их не будет потому что понимаю что ответов не будет
Михаил Базаров 16.07.2024
Что конкретно не получается?
Буквально час назад развернул окружение просто следуя своей же заметке. Ни чего нового не добавлял. Ни одной ошибки не замечено.
Да и в целом уже раз 5 это все поделал, для клиентов.

Но, инструкция однозначно не для начинающих! Нужно понимать что делаете.
Олег 18.07.2024
 Михаил, добрый день. В моем конкретно случае сервер находится за NAT и, соответственно, сертификат Let's encrypt выпустить не представляется возможным. В логах push-сервера ошибок нет, на сайте связь с сервером не теряется (не появляется красная полоса), но не приходят уведомления о новых сообщениях. В проверке системы пишет, что push and pull работает не правильно. Подозреваю, что дело в отсутствии сертификата, т.к. отличие от Вашей статьи только в этом. Если разворачиваю сервер с "белым" ip, то все нормально без ошибок.