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

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

Задача: Так как с 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"
Спустя пару месяцев, после написания этой заметки, битрикс выпустил окружение для CentOS9-Stream. Будет поддерживаться до 2027 года и является бета версией для будущей RHEL - используйте на свое усмотрение, но в целом не рекомендовал бы.

Битрикс веб окружение на 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 memcached php-memcache php-zip php-pspell php-xml nginx mariadb-server mariadb-common nodejs npm redis mc nano htop php-mail sendmail curl php-curl -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.4.0.tgz
npm install --production ./push-server-0.4.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". Возможно не учел каких-то нюансов, пишите вопросы и предложения по улучшению в комментариях.

Стоимость разработки на 1С-Битрикс:

Индивидуальная разработка магазина

от 500 000 руб. от 5-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Запуск сайта на готовом решении

от 100 000 руб. от 7-ми дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Мобильное приложение

от 500 000 руб. от 1-го месяца

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Сайт компании

от 350 000 руб. от 1-го месяца

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Инфресурс

от 400 000 руб. от 5-ти недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

Лечение сайтов от вирусов

от 40 000 руб. от 2-х дней

Выполню полную проверку сайта и окружения. В случае обнаружения вирусов проведу полный комплекс лечения проекта и закрытия лазеек.