Установка Битрикс в Docker на Ubuntu: полное руководство

CMS Битрикс — одна из самых популярных систем управления контентом в русскоязычном сегменте, предлагающая богатый функционал для создания интернет-магазинов, корпоративных сайтов и порталов. Её установка в Docker-контейнер открывает новые возможности: вы получаете изолированную среду, где все зависимости упакованы в единый пакет, что исключает конфликты версий и упрощает развертывание.

В этой статье мы подробно разберем каждый этап настройки — от подготовки окружения на Ubuntu до финального запуска полнофункционального сайта. Вы узнаете, как правильно настроить контейнеры, организовать структуру проекта и оптимизировать конфигурацию для стабильной работы Битрикс в Docker-окружении.

Подготовка окружения Ubuntu

Прежде чем развертывать Битрикс в Docker, необходимо подготовить операционную систему Ubuntu. На этом этапе мы устанавливаем и настраиваем сам Docker, а также вспомогательный инструмент docker-compose. Это основа, которая позволит создавать и управлять изолированными контейнерами.

Мы последовательно выполним команды для обновления системы, установки Docker из официального источника, добавим текущего пользователя в нужную группу для удобства работы и закрепим результат установкой docker-compose. Эти шаги гарантируют, что среда готова к развертыванию нашего проекта.

# Обновляем пакеты
sudo apt update && sudo apt upgrade -y

# Устанавливаем Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# Добавляем пользователя в группу docker
sudo usermod -aG docker $USER

# Устанавливаем docker-compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# Перезагружаем сессию
newgrp docker

Структура проекта

Структура проекта — это фундамент для удобной работы и поддержки. Мне нравится, когда структура проекта позволяет разделить ответственность между компонентами и сделать конфигурацию прозрачной.

Корневая директория содержит основные файлы управления:

  • docker-compose.yml — центральный файл, описывающий все сервисы
  • .env — хранит конфиденциальные данные и настройки
  • .gitignore — исключает служебные файлы из git репозитория

Вложенные папки группируют конфигурации по типам сервисов:

  • nginx/ — конфигурация веб-сервера и виртуальных хостов
  • php/ — настройки PHP и Dockerfile для сборки кастомного образа
  • mysql/ — скрипты инициализации базы данных
  • www/ — корневая директория сайта, где будет размещен код Битрикс

Такая структура позволяет легко находить нужные настройки, масштабировать проект и работать в команде.

bitrix-project/
├── docker-compose.yml
├── .env
├── .gitignore
├── nginx/
│   └── nginx.conf
├── php/
│   ├── Dockerfile
│   └── bitrix.ini
├── mysql/
│   └── initdb/
└── www/
    └── (здесь будет Битрикс)

Конфигурация Docker

В файле docker-compose.yml мы описываем всю архитектуру нашего приложения: три сервиса (Nginx, PHP-FPM и MySQL), их настройки и взаимосвязи.

Ключевые моменты конфигурации:

  • Nginx: работает на порту из переменной ${NGINX_PORT}, проксирует PHP-запросы к контейнеру php, имеет доступ к коду сайта и своей конфигурации
  • PHP: собирается из кастомного Dockerfile, получает переменные окружения для подключения к БД
  • MySQL: создает базу и пользователя при первом запуске, сохраняет данные в томе mysql_data

./docker-compose.yml:

services:
  nginx:
    image: nginx:alpine
    ports:
      - "${NGINX_PORT}:80"
    volumes:
      - ./www:/var/www/html
      - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php
    restart: unless-stopped
    networks:
      - bitrix-network

  php:
    build: ./php
    volumes:
      - ./www:/var/www/html
    environment:
      - MYSQL_HOST=mysql
      - MYSQL_DATABASE=${MYSQL_DATABASE}
      - MYSQL_USER=${MYSQL_USER}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
    depends_on:
      - mysql
    restart: unless-stopped
    networks:
      - bitrix-network

  mysql:
    image: mysql:8.0
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - MYSQL_DATABASE=${MYSQL_DATABASE}
      - MYSQL_USER=${MYSQL_USER}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
    volumes:
      - mysql_data:/var/lib/mysql
      - ./mysql/initdb:/docker-entrypoint-initdb.d
    networks:
      - bitrix-network
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      timeout: 20s
      retries: 10

volumes:
  mysql_data:
    driver: local

networks:
  bitrix-network:
    driver: bridge

Dockerfile — это инструкция для сборки кастомного образа контейнера. В нашем случае мы создаем образ на основе официального php:8.1-fpm и донастраиваем его под требования Битрикс.

В этом файле мы последовательно выполняем несколько важных действий: устанавливаем системные зависимости, необходимые для работы Битрикс (git, unzip, библиотеки для работы с изображениями и ZIP-архивами), затем добавляем нужные расширения PHP через docker-php-ext-install. Особое внимание уделяем модулям для работы с MySQL (pdo_mysql, mysqli) и графикой (gd), а также включаем opcache для ускорения работы PHP. В конце устанавливаем Composer для управления зависимостями и задаем рабочую директорию.

./php/Dockerfile:

FROM php:8.1-fpm

# Устанавливаем системные зависимости
RUN apt-get update && apt-get install -y \
    git \
    unzip \
    libzip-dev \
    libpng-dev \
    libonig-dev \
    && docker-php-ext-install \
    zip \
    pdo_mysql \
    mysqli \
    gd \
    opcache

# Включаем необходимые модули PHP
RUN docker-php-ext-enable opcache

# Устанавливаем Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

WORKDIR /var/www/html

Управление параметрами через .env

Файл .env — это конфигурационный файл, в котором мы храним чувствительные данные и настройки нашего проекта в виде переменных окружения. В нем мы определяем пароли, имена базы данных, порты и другие параметры, которые могут меняться в разных средах (разработка, тестирование, продакшен).

В docker-compose.yml мы используем синтаксис ${VARIABLE_NAME} для подстановки значений из .env файла. Docker Compose автоматически загружает переменные из этого файла при запуске, что позволяет нам иметь единую конфигурацию контейнеров с изменяемыми параметрами.

Крайне важно добавить .env в .gitignore, чтобы исключить его из Git-репозитория. Этот файл содержит пароли и другие конфиденциальные данные, которые не должны попадать в систему контроля версий по соображениям безопасности. Вместо этого в репозиторий стоит положить файл .env.example с примером структуры, но без реальных значений.

.env:

# Настройки MySQL
MYSQL_ROOT_PASSWORD=secure_root_password
MYSQL_DATABASE=bitrix_db
MYSQL_USER=bitrix_user
MYSQL_PASSWORD=secure_password

# Порт Nginx
NGINX_PORT=8080

.gitignore:

.env
.idea
.vscode
www/upload/
www/bitrix/backup/
mysql_data/

Настройка сервера

В файле nginx.conf мы настраиваем виртуальный хост веб-сервера Nginx, который будет обслуживать наш сайт. Мы указываем корневую директорию с файлами Битрикс, настраиваем обработку PHP-запросов с перенаправлением их в PHP-FPM контейнер, а также устанавливаем правильные правила для ЧПУ через urlrewrite.php и ограничиваем максимальный размер загружаемых файлов, что особенно важно для административной части Битрикс.

./nginx/nginx.conf:

server {
    listen 80;
    server_name localhost;
    root /var/www/html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /bitrix/urlrewrite.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
    
    client_max_body_size 100M;
}

В файле bitrix.ini мы увеличим лимиты памяти и времени выполнения скриптов, установим достаточные размеры для загрузки файлов, а также активируем и настроим opcache — все эти параметры учитывают повышенные требования CMS к ресурсам и необходимы для стабильной работы административной панели и обработки тяжелых операций.

./php/bitrix.ini:

memory_limit = 256M
max_execution_time = 60
upload_max_filesize = 100M
post_max_size = 100M
opcache.enable=1
opcache.memory_consumption=256

Установка CMS Bitrix

Мы скачиваем официальный установочный скрипт bitrixsetup.php в папку www. После загрузки файла важно установить рекурсивно корректные права доступа (755) на всю папку www, чтобы веб-сервер мог без ограничений работать с файлами Битрикс в процессе установки и дальнейшей эксплуатации.

# Скачиваем установщик Битрикс в папку www
cd www
wget https://www.1c-bitrix.ru/download/scripts/bitrixsetup.php

# Устанавливаем правильные права на всю папку www
chmod -R 755 .

Запуск Docker

# Запускаем контейнеры
docker-compose up -d

# Проверяем работу
docker-compose ps

Откройте в браузере: http://localhost:8080

Следуйте инструкциям установщика Битрикс:

  • Хост БД: mysql
  • Имя БД: bitrix_db (из .env)
  • Пользователь: bitrix_user (из .env)
  • Пароль: secure_password (из .env)

Добавление в git репозиторий

# Инициализируем репозиторий
git init

# Добавляем файлы конфигурации
git add docker-compose.yml php/Dockerfile nginx/nginx.conf .gitignore

# Коммит
git commit -m "Initial Bitrix Docker setup"

# Добавляем удаленный репозиторий
git remote add origin your-repository-url
git push -u origin main

Заключение

Вы успешно развернули Битрикс в Docker-окружении. Теперь ваш проект:

  • Переносится между системами без изменений
  • Имеет четкую структуру конфигурации
  • Готов к работе в команде и дальнейшему развитию

Для повседневной работы используйте docker-compose up -d для запуска и docker-compose down для остановки. Все данные БД сохраняются в томе mysql_data.

Один ответ для «Установка Битрикс в Docker на Ubuntu: полное руководство»

  1. Привет! Это комментарий.
    Чтобы начать модерировать, редактировать и удалять комментарии, перейдите на экран «Комментарии» в консоли.
    Аватары авторов комментариев загружаются с сервиса Gravatar.

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

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