Задача: Так как с 30 июня 2024 года операционная система CentOS-7 полностью снята с поддержки и не будет получать обновлений безопасности, принято решение создать аналог "Битрикс веб окружение" на 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.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". Возможно не учел каких-то нюансов, пишите вопросы и предложения по улучшению в комментариях.