← Вернуться в Конструктор Docker На главную сайта ↗
🐳 Production Docker Guide

Инструкция к Конструктору развёртывания EspoCRM в Docker

Подробное руководство по сборке production-стека, разбор 4 схем маршрутизации веб-сервера, подбор параметров буфера MariaDB/MySQL, настройка фонового демона Cron, WebSocket-сокетов, суточных бэкапов и пошаговый запуск на VPS.

📦 1. Что генерирует конструктор и состав ZIP-архива

Конструктор избавляет от необходимости вручную писать конфигурационные файлы для каждого сервера. При нажатии кнопки «Скачать проект (.zip)» вы получаете готовый рабочий каталог для размещения в /opt/espocrm:

🌐 2. Схемы развёртывания веб-сервера и SSL-сертификатов

Выбор схемы определяет, как запросы из интернета попадают в Docker-контейнер EspoCRM. Мы подготовили 4 проверенные архитектуры под любые сценарии серверов:

⭐ Схема 1: За панелью управления (aaPanel, ISPmanager, cPanel) Рекомендуется

Самый надёжный, визуально понятный и удобный способ для 90% рабочих серверов компании.

Как работает: В панели управления вы создаёте сайт на своём домене, включаете бесплатный SSL-сертификат Let's Encrypt в 1 клик, а в пункте «Reverse Proxy / Проксирование» перенаправляете входящие запросы на внутренний локальный адрес http://127.0.0.1:8080.
Кому подходит: Всем, у кого на VPS установлена графическая панель. Вся настройка занимает 2 минуты мышкой без ручной правки системных файлов.
О файле nginx-proxy.conf: Создавать его вручную на сервере не нужно. Панель управления генерирует конфигурацию веб-сервера самостоятельно. Файл во вкладке служит образцом правил маршрутизации.
Безопасность: Контейнер слушает только внутренний loopback-адрес 127.0.0.1:8080. Прямой доступ из интернета в обход системного веб-сервера и SSL полностью заблокирован.
💡 Настройка WebSocket в панели: Если вы включили WebSocket-демон, в панели добавьте второе правило проксирования для пути /ws на адрес http://127.0.0.1:8081 с включением заголовков Upgrade.
🛠️ Схема 2: За системным веб-сервером Nginx на хосте (Без панелей) Классика Linux

Классическая схема для чистых виртуальных машин на Ubuntu, Debian или AlmaLinux, управляемых исключительно через терминал.

Как работает: На самом хост-сервере установлен системный пакет nginx и утилита certbot. Входящий трафик на портах 80 и 443 принимает хостовый Nginx и отдаёт в Docker на 127.0.0.1:8080.
Кому подходит: Системным администраторам и DevOps-инженерам, которые предпочитают чистую консоль и не используют панели управления.
Куда класть nginx-proxy.conf: Скопируйте сгенерированный файл из конструктора в системную папку хоста (например, в /etc/nginx/conf.d/espocrm.conf).
Выпуск SSL: Выполните команду certbot --nginx -d crm.company.ru. Certbot сам вставит сертификаты в конфиг и настроит автопродление.
🐳 Схема 3: Автономный Docker-прокси (Nginx в отдельном контейнере) Полная изоляция

Все службы, включая веб-сервер, упакованы в единый Docker Compose стек.

Как работает: На сервере нет никаких установленных веб-серверов. Контейнер espocrm-nginx поднимается вместе со стеком и напрямую слушает порты 80 и 443 хост-машины.
Кому подходит: Для выделенных серверов (Dedicated / Bare-metal) или чистых VPS, где работает ТОЛЬКО EspoCRM и гарантированно нет других сайтов.
Куда класть сертификаты: Поместите файлы SSL в папку /opt/espocrm/ssl/: fullchain.pem и privkey.pem. Они будут автоматически смонтированы в контейнер.
Внимание: Если на сервере уже запущен системный Apache, Nginx или панель на 80/443 портах, возникнет конфликт портов. В таком случае используйте Схему 1 или 2.
🧪 Схема 4: Прямой порт (HTTP :8080) без SSL Тест и локальная сеть

Самый простой вариант без использования доменов и обратных прокси.

Как работает: Контейнер публикует порт наружу: 8080:80. Доступ к CRM осуществляется напрямую в браузере по адресу http://IP-сервера:8080.
Кому подходит: Локальные офисные серверы без белого IP, домашние компьютеры, тестовые стенды разработчиков для быстрой проверки.
Ограничение: По протоколу HTTP браузеры блокируют пуш-уведомления и предупреждают о небезопасном соединении. Для постоянной работы компании рекомендуется Схема 1.

🗄️ 3. База данных: MariaDB против MySQL и буфер InnoDB

EspoCRM активно работает с реляционной базой данных при фильтрации сделок, поиске дубликатов и построении отчётов.

💡 Почему в конструкторе по умолчанию выбрана MariaDB:
MariaDB стартует быстрее, потребляет на 20–30% меньше оперативной памяти по сравнению с MySQL 8 при аналогичной нагрузке и делает дампы базы без лишних блокировок. MySQL 8 рекомендуется только в корпоративных средах, где стандарты безопасности жестко предписывают СУБД от Oracle.

Настройка пула памяти (InnoDB Buffer Pool)

Параметр --innodb_buffer_pool_size указывает базе данных, сколько оперативной памяти выделить под кэширование таблиц и индексов. В конструкторе варианты буфера точно синхронизированы с объёмом оперативной памяти сервера:

Размер буфера Рекомендуемый VPS Количество пользователей Назначение
256M 2 GB RAM 1 – 5 юзеров Экономный сервер, небольшая база клиентов
512M 4 GB RAM 10 – 30 юзеров Оптимальный баланс для стабильной работы компании
1G 8 GB RAM 30 – 100 юзеров Высокая нагрузка, активная работа с отчётами
2G 16 GB RAM 100+ юзеров Корпоративный сервер, крупные базы и интеграции
4G 32+ GB RAM Enterprise Огромные базы на миллионы записей
⚠️ Золотое правило сисадмина: Никогда не выделяйте под буфер базы данных более 50% от общей оперативной памяти сервера! Иначе при скачке нагрузки системный процесс Linux (OOM Killer) принудительно аварийно завершит контейнер СУБД.

⚡ 4. Фоновые службы: Cron, WebSocket и Redis

🛡️ 5. Отказоустойчивость: ротация логов, суточный бэкап и мониторинг

Ротация логов Docker (Защита от переполнения диска)

По умолчанию Docker пишет все логи контейнеров в один файл без ограничений. Через полгода активной работы диск сервера может забиться мусором на 100%. Наш конструктор включает параметры ротации:

    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

Как только лог контейнера дорастает до указанного лимита (по умолчанию 10 МБ), Docker сам отрезает лишнее и хранит не более 3 архивов. Настройки можно изменить прямо в форме конструктора.

Умный суточный бэкап с MD5-контролем (backup.sh)

Скрипт backup.sh работает автономно и бережёт место на диске:

Проверка обновлений (check_update.sh)

Скрипт мониторинга проверяет свежие теги образов в Docker Hub. В конструкторе вы можете выбрать точное время (например, 08:00) и любые дни недели с помощью интерактивных кнопок (например, только по понедельникам). Если доступно обновление, на указанный Email администратора приходит подробный отчёт с командой для безопасного применения.

💻 6. Пошаговая инструкция по развёртыванию на сервере

Все команды подробно расписаны в файле README_DEPLOY.txt. Выполните их в терминале сервера под пользователем root:

1 Создайте рабочую директорию проекта:

mkdir -p /opt/espocrm/{espocrm_data,espocrm_custom,espocrm_client_custom,mysql_data,backups,logs}
cd /opt/espocrm

2 Установите права веб-пользователя www-data (UID 33):

chown -R 33:33 /opt/espocrm/espocrm_data /opt/espocrm/espocrm_custom /opt/espocrm/espocrm_client_custom

3 Загрузите скачанные файлы в /opt/espocrm:

Распакуйте скачанный ZIP-архив в папку /opt/espocrm и сделайте скрипты исполняемыми:

chmod +x /opt/espocrm/backup.sh /opt/espocrm/check_update.sh

4 Запустите контейнеры:

docker compose up -d

5 Проверьте статус служб и логи:

docker compose ps
docker compose logs -f espocrm

6 Подключите расписание автозапуска в Cron хост-сервера (crontab -e):

# Суточный бэкап в 03:00 ночи
0 3 * * * /opt/espocrm/backup.sh >> /opt/espocrm/logs/backup.log 2>&1

# Проверка обновлений по понедельникам в 08:00
0 8 * * 1 /opt/espocrm/check_update.sh >> /opt/espocrm/logs/check_update.log 2>&1

🔄 7. Как безопасно обновить систему в будущем

Когда скрипт check_update.sh пришлёт уведомление о выходе свежей версии EspoCRM или MariaDB, обновите стек одной связкой команд:

cd /opt/espocrm
docker compose pull
docker compose up -d
docker image prune -f

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