2026-09-18
Развертывание Битрикс24 на Debian и Ubuntu: полная инструкция

Развертывание Битрикс24 на Debian и Ubuntu: полная инструкция

Инструкция описывает установку Битрикс24 на системы DEB так, чтобы среда максимально напоминала Bitrix VM (доступна только для RPM). В итоге получим:

  1. Серверную инфраструктуру под портал Битрикс24.
  2. Интерактивное меню Bitrix VM, вызываемое по SSH.
  3. Прохождение встроенной технической проверки портала.

Подготовка системы

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. Меняем язык на русский → Установить;
  2. Выбираем дистрибутив (1С-Битрикс24) и версию → Загрузить;
  3. Принимаем лицензию → Далее;
  4. На «Регистрация продукта» можно снять галочку;
  5. Создаём учётную запись администратора → Далее;
  6. Настройка Битрикс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. Работа с сокетами

Основная проверка. Нужно:

  1. Перейти на HTTPS с корректным сертификатом;
  2. Обновить корневые сертификаты.
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 + PHPmpm_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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *