Подробное руководство по сборке production-стека, разбор 4 схем маршрутизации веб-сервера, подбор параметров буфера MariaDB/MySQL, настройка фонового демона Cron, WebSocket-сокетов, суточных бэкапов и пошаговый запуск на VPS.
Конструктор избавляет от необходимости вручную писать конфигурационные файлы для каждого сервера. При нажатии кнопки «Скачать проект (.zip)» вы получаете готовый рабочий каталог для размещения в /opt/espocrm:
docker-compose.yml - описание всех сервисов (CRM, СУБД MariaDB/MySQL, Cron-планировщик, WebSocket демон, Redis, веб-прокси) с политиками перезапуска и лимитами логов;.env - переменные окружения, пароли пользователей и базы, домен системы (файл с ограниченным доступом);nginx-proxy.conf - конфиг Nginx для проксирования основного трафика и живых веб-сокетов /ws;README_DEPLOY.txt - консольные команды для развёртывания от создания папок до расписания Cron хост-сервера;backup.sh - умный скрипт суточного резервного копирования базы и файлов с MD5-контролем и автоочисткой логов;check_update.sh - скрипт регулярной проверки свежих образов в Docker Hub с отчётом на Email администратора.Выбор схемы определяет, как запросы из интернета попадают в Docker-контейнер EspoCRM. Мы подготовили 4 проверенные архитектуры под любые сценарии серверов:
Самый надёжный, визуально понятный и удобный способ для 90% рабочих серверов компании.
http://127.0.0.1:8080.
127.0.0.1:8080. Прямой доступ из интернета в обход системного веб-сервера и SSL полностью заблокирован.
/ws на адрес http://127.0.0.1:8081 с включением заголовков Upgrade.
Классическая схема для чистых виртуальных машин на Ubuntu, Debian или AlmaLinux, управляемых исключительно через терминал.
nginx и утилита certbot. Входящий трафик на портах 80 и 443 принимает хостовый Nginx и отдаёт в Docker на 127.0.0.1:8080.
/etc/nginx/conf.d/espocrm.conf).
certbot --nginx -d crm.company.ru. Certbot сам вставит сертификаты в конфиг и настроит автопродление.
Все службы, включая веб-сервер, упакованы в единый Docker Compose стек.
espocrm-nginx поднимается вместе со стеком и напрямую слушает порты 80 и 443 хост-машины.
/opt/espocrm/ssl/: fullchain.pem и privkey.pem. Они будут автоматически смонтированы в контейнер.
Самый простой вариант без использования доменов и обратных прокси.
8080:80. Доступ к CRM осуществляется напрямую в браузере по адресу http://IP-сервера:8080.
EspoCRM активно работает с реляционной базой данных при фильтрации сделок, поиске дубликатов и построении отчётов.
Параметр --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 | Огромные базы на миллионы записей |
espocrm-daemon):docker-daemon.sh, который ежеминутно отправляет почту, проверяет входящие письма, считает SLA-нормативы по стадиям воронки и запускает роботов автоматизации.
espocrm-websocket):8081). Когда один менеджер меняет статус сделки или в систему падает новый лид из n8n, карточка у всех коллег обновляется на лету, всплывает звонкий пуш без необходимости нажимать F5.
espocrm-redis):По умолчанию Docker пишет все логи контейнеров в один файл без ограничений. Через полгода активной работы диск сервера может забиться мусором на 100%. Наш конструктор включает параметры ротации:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
Как только лог контейнера дорастает до указанного лимита (по умолчанию 10 МБ), Docker сам отрезает лишнее и хранит не более 3 архивов. Настройки можно изменить прямо в форме конструктора.
Скрипт backup.sh работает автономно и бережёт место на диске:
--single-transaction). Если хэш-сумма совпадает со вчерашней (в базе не было изменений), скрипт удаляет дубликат и не запускает тяжёлую архивацию файлов.find -mtime.logs/backup.log. Когда размер лога превышает 1000 строк, он аккуратно оставляет только свежие 1000 строк без смены прав и дескрипторов (метод copytruncate). Файл никогда не вырастет больше 50 КБ.Скрипт мониторинга проверяет свежие теги образов в Docker Hub. В конструкторе вы можете выбрать точное время (например, 08:00) и любые дни недели с помощью интерактивных кнопок (например, только по понедельникам). Если доступно обновление, на указанный Email администратора приходит подробный отчёт с командой для безопасного применения.
Все команды подробно расписаны в файле 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
Когда скрипт check_update.sh пришлёт уведомление о выходе свежей версии EspoCRM или MariaDB, обновите стек одной связкой команд:
cd /opt/espocrm docker compose pull docker compose up -d docker image prune -f
Docker скачает новые образы, бесшовно перезапустит только обновлённые контейнеры без потери настроек и данных, а последняя команда удалит старые ненужные слои с диска.