Развертывание Битрикс24 на Debian и Ubuntu: полная инструкция
Инструкция описывает установку Битрикс24 на системы DEB так, чтобы среда максимально напоминала Bitrix VM (доступна только для RPM). В итоге получим:
- Серверную инфраструктуру под портал Битрикс24.
- Интерактивное меню Bitrix VM, вызываемое по SSH.
- Прохождение встроенной технической проверки портала.
Подготовка системы
1. Пакеты
apt update
apt install perl curl git ssl-cert cron locales poppler-utils catdoc unzip rsync pwgen make build-essential sudo ansible
где:
perl— интерпретатор для скриптов портала;curl— HTTP-запросы;git— работа с git-репозиториями;ssl-cert— автоматическое создание SSL-сертификатов;cron— задания по расписанию;locales— языковые наборы;poppler-utils— работа с PDF;catdoc— чтение Word/Excel;unzip— распаковка zip;rsync— синхронизация каталогов;pwgen— генератор паролей;make,build-essential— сборка;sudo— повышенные привилегии;ansible— нужен части меню Битрикс.
Коллекции Ansible:
ansible-galaxy collection install community.general
ansible-galaxy collection install ansible.posix
2. Локализация
dpkg-reconfigure locales
При ошибке locale-gen: команда не найдена — перезайдите через su -.
В меню выбираем en_US.UTF-8.
echo "LANG=en_US.UTF-8" > /etc/default/locale
echo "LC_ALL=en_US.UTF-8" >> /etc/default/locale
echo "LC_ALL="en_US.UTF-8"" >> /etc/environment
3. Конфигурационные файлы
Разработчик предоставляет готовые конфиги для Debian:
curl -sLO https://dev.1c-bitrix.ru/docs/chm_files/debian.zip
unzip debian.zip && rm -f debian.zip
4. Брандмауэр
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
apt install iptables-persistent
netfilter-persistent save
Для продакшена используйте HTTPS (443).
Настройка веб-среды
Битрикс24 использует связку PHP + MySQL + NGINX + Apache.
PHP
На момент обновления инструкции Битрикс хорошо работает с PHP 8.2.
apt install lsb-release ca-certificates apt-transport-https software-properties-common gnupg2
Debian:
echo "deb https://mirror.yandex.ru/debian/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
Ubuntu:
add-apt-repository ppa:ondrej/php
apt update
export PHP_VER=8.2
apt install php${PHP_VER} php${PHP_VER}-cli php${PHP_VER}-common php${PHP_VER}-gd php${PHP_VER}-ldap php${PHP_VER}-mbstring php${PHP_VER}-mysql php${PHP_VER}-opcache php${PHP_VER}-curl php${PHP_VER}-redis php-pear php${PHP_VER}-apcu php${PHP_VER}-zip php${PHP_VER}-pspell php${PHP_VER}-xml --no-install-recommends
Расширение mcrypt удалено из PHP 7.2+ и недоступно в 8.2 — не используйте его.
Переносим конфиги PHP:
rsync -a ./debian/php.d/ /etc/php/${PHP_VER}/mods-available/
СУБД
Для Битрикс рекомендуется MySQL.
curl -sLO https://dev.mysql.com/get/mysql-apt-config_0.8.35-1_all.deb
dpkg -i mysql-apt-config_*_all.deb
apt update
apt install mysql-server
Система попросит пароль root — вводим дважды.
rsync -a ./debian/mysql/ /etc/mysql/
echo 'innodb_strict_mode = off' >> /etc/mysql/my-bx.d/zbx-custom.cnf
echo 'sync_binlog = 0' >> /etc/mysql/my-bx.d/zbx-custom.cnf
где:
innodb_strict_mode = off— отключает строгий режим InnoDB (нужно для скриптов Битрикс);sync_binlog = 0— отключает синхронизацию бинарного журнала с диском.
vi /etc/mysql/my.cnf
Комментируем строку:
#!includedir /etc/mysql/mariadb.conf.d/
systemctl restart mysql
NGINX
apt install nginx
rsync -a ./debian/nginx/ /etc/nginx/
rm -f /etc/nginx/sites-enabled/default
ln -s /etc/nginx/sites-available/rtc.conf /etc/nginx/sites-enabled/rtc.conf
ln -s /etc/nginx/sites-available/default.conf /etc/nginx/sites-enabled/default.conf
vi /etc/hosts
Добавляем:
127.0.0.1 localhost push httpd
В конфигах Nginx от разработчика для push и apache используются имена хостов push и httpd — их нужно добавить в hosts.
nginx -t
systemctl restart nginx
Apache
apt install apache2
rsync -a ./debian/apache2/ /etc/apache2/
ln -sf /etc/php/${PHP_VER}/mods-available/zbx-bitrix.ini /etc/php/${PHP_VER}/apache2/conf.d/99-bitrix.ini
ln -sf /etc/php/${PHP_VER}/mods-available/zbx-bitrix.ini /etc/php/${PHP_VER}/cli/conf.d/99-bitrix.ini
a2dismod --force autoindex
a2enmod rewrite remoteip
a2dismod mpm_event
a2enmod mpm_prefork
a2enmod php${PHP_VER}
где:
autoindex— генерирует список файлов каталога по URL; отключаем;rewrite— преобразование URL;remoteip— получение реального IP клиента за прокси;mpm_event— не поддерживает PHP (используемmpm_prefork).
vi /etc/apache2/mods-enabled/remoteip.conf
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1
mkdir -p /var/www/html/bx-site
mkdir /etc/systemd/system/apache2.service.d
vi /etc/systemd/system/apache2.service.d/privtmp.conf
[Service]
PrivateTmp=false
PrivateTmp=false — иначе каждый процесс Apache хранит сессию в отдельном каталоге, что ломает авторизацию.
systemctl daemon-reload
apachectl -t
systemctl restart apache2
Портал
Подготовка среды
Генерируем 24-символьную последовательность:
echo $(date +%s | sha256sum | base64 | head -c 24)
Например: OWZkMDQ0ZjRlNzM4YjYzMzQy. Сохраните её — это crypto_key.
vi /root/.my.cnf
[client]
user=root
password="root_password123"
Пароль — тот, что задан при установке СУБД.
mysql
> CREATE DATABASE bitrix;
> CREATE USER bitrix@localhost;
> ALTER USER 'bitrix'@'localhost' IDENTIFIED BY 'bitrix_password123';
> GRANT all ON bitrix.* to bitrix@localhost;
> FLUSH PRIVILEGES;
> quit
Загрузка и настройка портала
cd /var/www/html/bx-site
curl -sLO https://www.1c-bitrix.ru/download/scripts/bitrixsetup.php
curl -sLO https://www.1c-bitrix.ru/download/scripts/restore.php
bitrixsetup.php — развернуть новый портал, restore.php — восстановить из бэкапа.
mkdir -p bitrix/php_interface
vi bitrix/php_interface/dbconn.php
<?
define("DBPersistent", false);
$DBType = "mysql";
$DBHost = "localhost";
$DBLogin = "bitrix";
$DBPassword = "bitrix_password123";
$DBName = "bitrix";
$DBDebug = false;
$DBDebugToFile = false;
define("DELAY_DB_CONNECT", true);
define("CACHED_b_file", 3600);
define("CACHED_b_file_bucket_size", 10);
define("CACHED_b_lang", 3600);
define("CACHED_b_option", 3600);
define("CACHED_b_lang_domain", 3600);
define("CACHED_b_forum", 3600);
?>
vi bitrix/.settings.php
<?php
return array (
'utf_mode' => array('value' => true, 'readonly' => true),
'cache_flags' => array(
'value' => array('config_options' => 3600, 'site_domain' => 3600),
'readonly' => false,
),
'cookies' => array(
'value' => array('secure' => false, 'http_only' => true),
'readonly' => false,
),
'exception_handling' => array(
'value' => array(
'debug' => false,
'handled_errors_types' => 4437,
'exception_errors_types' => 4437,
'ignore_silence' => false,
'assertion_throws_exception' => true,
'assertion_error_type' => 256,
'log' => array('settings' => array(
'file' => '/var/log/php/exceptions.log',
'log_size' => 1000000,
)),
),
'readonly' => false,
),
'crypto' => array(
'value' => array('crypto_key' => "OWZkMDQ0ZjRlNzM4YjYzMzQy"),
'readonly' => true,
),
'connections' => array(
'value' => array(
'default' => array(
'className' => 'BitrixMainDBMysqliConnection',
'host' => 'localhost',
'database' => 'bitrix',
'login' => 'bitrix',
'password' => 'bitrix_password123',
'options' => 2,
),
),
'readonly' => true,
),
);
?>
Замените crypto_key на сгенерированную последовательность и password — на пароль пользователя bitrix.
chown -R www-data:www-data /var/www/html/bx-site
Меню командной строки (эмуляция Bitrix VM)
Используем проект DebianLikeBitrixVM:
git clone --depth 1 --filter=blob:none --sparse https://github.com/EduardRe/DebianLikeBitrixVM.git "/root/DebianLikeBitrixVM"
cd /root/DebianLikeBitrixVM
git sparse-checkout set vm_menu
mv -f vm_menu /root
cd /root
rm -rf DebianLikeBitrixVM
chmod +x /root/vm_menu/menu.sh
ln -s /root/vm_menu/menu.sh /root/menu.sh
Развертывание портала
/root/menu.sh
Выбираем пункт 5) Enable Bitrix VM emulating — Битрикс будет считать, что работает на Bitrix VM.
Открываем http://<IP-сервера>/bitrixsetup.php:
- Меняем язык на русский → Установить;
- Выбираем дистрибутив (1С-Битрикс24) и версию → Загрузить;
- Принимаем лицензию → Далее;
- На «Регистрация продукта» можно снять галочку;
- Создаём учётную запись администратора → Далее;
- Настройка Битрикс24 → Установить → Перейти в Битрикс24.
Настройка HTTPS
vi /etc/nginx/conf.d/bitrix.conf
Добавляем в конец:
location ~ /.well-known {
root /usr/share/nginx/html;
allow all;
}
nginx -t && nginx -s reload
apt install certbot
certbot certonly --webroot --agree-tos --email postmaster@imaxis.ru --webroot-path /usr/share/nginx/html/ -d bitrix.imaxis.ru
Сертификат для домена bitrix.imaxis.ru.
vi /etc/nginx/sites-enabled/default.conf
Меняем:
server {
listen 80 default_server;
на:
server {
listen 443 ssl default_server;
Добавляем пути сертификатов:
ssl_certificate /etc/letsencrypt/live/bitrix.imaxis.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/bitrix.imaxis.ru/privkey.pem;
И новый блок редиректа:
server {
listen 80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
nginx -t && nginx -s reload
vi bitrix/php_interface/dbconn.php
Добавляем:
$_SERVER["HTTPS"] = "on";
Сообщаем Битриксу, что запрос пришёл на 443.
Кэширование через Redis
apt install redis
vi /etc/redis/redis.conf
pidfile /run/redis/redis-server.pid
dir /var/lib/redis
unixsocket /var/run/redis/redis-server.sock
echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf
sysctl -p
usermod -g www-data redis
chown root:www-data /etc/redis/ /var/log/redis/
mkdir -p /etc/systemd/system/redis.service.d
vi /etc/systemd/system/redis.service.d/override.conf
[Service]
Group=www-data
PIDFile=/run/redis/redis-server.pid
systemctl daemon-reload
systemctl restart redis
vi /var/www/html/bx-site/bitrix/.settings_extra.php
<?php
return array(
'cache' => array(
'value' => array(
'type' => array(
'class_name' => 'BitrixMainDataCacheEngineRedis',
'extension' => 'redis'
),
'redis' => array(
'host' => '127.0.0.1',
'port' => '6379',
),
'sid' => $_SERVER["DOCUMENT_ROOT"] . "#01"
),
),
);
?>
Локальный PUSH-сервер
export NODE_VER=20
curl -sL https://deb.nodesource.com/setup_${NODE_VER}.x | bash -
apt install nodejs
echo $(date +%s | sha256sum | base64 | head -c 24)
export PUSH_KEY="MWM4YjRlZDFiNWIyYWY2Mjg1"
cd /opt
curl -sLO https://repo.bitrix.info/vm/push-server-0.3.0.tgz
npm install --production ./push-server-0.3.0.tgz
rm -f ./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 -p /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
useradd -g www-data bitrix
Конфигурация push-сервера:
cat > /etc/sysconfig/push-server-multi <<EOF
GROUP=www-data
SECURITY_KEY="${PUSH_KEY}"
RUN_DIR=/tmp/push-server
REDIS_SOCK=/var/run/redis/redis-server.sock
WS_HOST=127.0.0.1
EOF
/usr/local/bin/push-server-multi configs pub
/usr/local/bin/push-server-multi configs sub
Ошибка /etc/rc.d/init.d/functions: No such file or directory — ожидаема, игнорируем.
echo 'd /tmp/push-server 0770 bitrix www-data -' > /etc/tmpfiles.d/push-server.conf
systemd-tmpfiles --remove --create
mkdir -p /var/log/push-server
chown bitrix:www-data /var/log/push-server
sed -i 's|User=.*|User=bitrix|;s|Group=.*|Group=www-data|;s|ExecStart=.*|ExecStart=/usr/local/bin/push-server-multi systemd_start|;s|ExecStop=.*|ExecStop=/usr/local/bin/push-server-multi stop|' /etc/systemd/system/push-server.service
systemctl enable push-server
systemctl start push-server
systemctl status push-server
В /var/www/html/bx-site/bitrix/.settings.php добавляем блок настроек pull:
'pull_s1' => 'BEGIN GENERATED PUSH SETTINGS. DON'T DELETE COMMENT!!!!',
'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://127.0.0.1:8895/bitrix/pub/',
'nginx_version' => '4',
'nginx_command_per_hit' => '100',
'nginx' => 'Y',
'nginx_headers' => 'N',
'push' => 'Y',
'websocket' => 'Y',
'signature_key' => '${PUSH_KEY}',
'signature_algo' => 'sha1',
'guest' => 'N',
),
),
'pull_e1' => 'END GENERATED PUSH SETTINGS. DON'T DELETE COMMENT!!!!',
Опции разделяются запятыми — проверяйте, что строка выше заканчивается запятой.
Проверка системы
Страница Настройки → Инструменты → Проверка системы. Разберём частые замечания.
1. Работа с сокетами
Основная проверка. Нужно:
- Перейти на HTTPS с корректным сертификатом;
- Обновить корневые сертификаты.
curl https://bitrix.imaxis.ru
Должны получить HTML страницы, а не ошибку.
2. Агенты на cron
crontab -e -u bitrix
* * * * * /usr/bin/php -f /var/www/html/bx-site/bitrix/modules/main/tools/cron_events.php
В Битриксе: Настройки → Инструменты → Командная PHP-строка:
COption::SetOptionString("main", "agents_use_crontab", "Y");
COption::SetOptionString("main", "check_agents", "Y");
3. Быстрая работа с файлами
Настройки → Настройки продукта → Настройка модулей → «Главный модуль» → «Файлы» → галочка Быстрая отдача файлов через Nginx → Применить.
4. Время на БД и веб-сервере
vi /var/www/html/bx-site/bitrix/php_interface/dbconn.php
date_default_timezone_set("Europe/Moscow");
timedatectl | grep "Time zone"
5. Почтовые уведомления
Настройка отправки почты — отдельная тема (SMTP/msmtp), см. документацию Битрикс.
Скачивание файлов одним архивом (mod_zip)
nginx -v
cd /tmp/
curl -sLO https://nginx.org/download/nginx-1.24.0.tar.gz
tar -zxf nginx-*.tar.gz
cd nginx-1.24.0
git clone https://github.com/evanmiller/mod_zip.git
apt install libpcre3 libpcre3-dev libxml2-dev libxslt1-dev libgd-dev libgeoip-dev libperl-dev
Смотрим опции сборки:
nginx -V
Копируем аргументы configure и добавляем --sbin-path и --add-module=./mod_zip:
./configure <аргументы из nginx -V> --sbin-path=/usr/sbin/nginx --add-module=./mod_zip
make
make install
systemctl restart nginx
Тонкости и подводные камни
php-mcryptудалён — в PHP 8.2 его нет; не включайте в список пакетов.PrivateTmp=false— без этого ломается авторизация Битрикс за Apache.mpm_prefork+ PHP —mpm_eventнесовместим с mod_php.hosts:push httpd— иначе Nginx не разрешит имена из конфигов разработчика.- MySQL 8 vs MariaDB — конфиги рассчитаны на MySQL; при MariaDB правьте
my.cnfи пути. innodb_strict_mode=off— нужен для скриптов портала.- crypto_key — уникальная случайная строка; не используйте пример из статьи.
dbconn.phpи.settings.php— пароль БД должен совпадать с созданным пользователем.- PUSH_KEY — должен совпадать в
sysconfigи.settings.php.
Шпаргалка
# пакеты
apt install perl curl git unzip rsync pwgen make build-essential ansible locales
# PHP 8.2
add-apt-repository ppa:ondrej/php && apt install php8.2 php8.2-{cli,gd,ldap,mbstring,mysql,opcache,curl,redis,apcu,zip,pspell,xml}
# MySQL
dpkg -i mysql-apt-config_*_all.deb && apt install mysql-server
# NGINX + Apache
apt install nginx apache2
# портал
mkdir -p /var/www/html/bx-site && cd /var/www/html/bx-site
curl -sLO https://www.1c-bitrix.ru/download/scripts/bitrixsetup.php
# https
certbot certonly --webroot -w /usr/share/nginx/html -d bitrix.imaxis.ru
# redis + push-server
apt install redis nodejs
Проверено на: Ubuntu 22.04/24.04, Debian 12 + PHP 8.2, MySQL 8, Bitrix24.
Дата: Сентябрь 2026.