Команда инженеров · свой ЦОД в РФ · своё железо · своя панель · CloudStack + Linstor · MCP · база знаний по self-hosted
Архивная версия статьи — версия продукта 10.0.8, проверена 15 сентября 2026 г.. Инструкции могли устареть.Актуальная статья →
CRM и продажи

EspoCRM

Open source CRM на своем сервере, которая не считает деньги по головам: лиды, сделки, воронка, почта, кампании и клиентский портал в бесплатном AGPL-ядре. Версия 10.0.8 на Fatmetal Cloud Server: четыре контейнера, ~207 MB RAM в простое - и расчет своей CRM на VPS против подписки за каждого сотрудника.

Сентябрь 2026 ~12 минут чтения Fatmetal Team
CRM и продажи Лицензия: AGPL-3.0 Статус: запущен у нас, v10.0.8

Вердикт

Подходит
  • командам на 5-50 человек, у которых счет за Битрикс24 / amoCRM растет с каждым сотрудником
  • тем, кому по 152-ФЗ клиентская база и почта должны лежать на своем сервере
  • тем, кому нужен каркас: свои сущности, поля и связи из админки плюс REST API без квот
Не подходит
  • если отчеты и BPM нужны бесплатно и сразу - это платный Advanced Pack
  • если от CRM ждут «все в одном» как у Битрикс24: задачи, чаты, телефония, сайты
  • если некому обслуживать четыре контейнера и патчи несколько раз в месяц
Мин. тариф: CPU2-RAM4-DISK50 Рекомендуем: CPU2-RAM4-DISK50 Сложность: medium Старт до healthy: ~65 с RAM в простое: ~207 MB Главный риск: отчеты и BPM - платный пак
Что это

Что это и какую задачу решает

EspoCRM - CRM с открытым кодом, которую с 2014 года ведет одноименная компания. Ядро закрывает контур продаж: лиды, контакты, компании, сделки с воронкой и канбаном, задачи, звонки, календарь.

Там же почта с привязкой писем к записям, обращения в поддержку, клиентский портал, база знаний, кампании с рассылками и web-to-lead формы. Все под AGPL-3.0, без лимита на пользователей и записи.

Вторая сторона продукта - конструктор: сущности, поля, связи и формы создаются из админки без кода. По сути это коробочная CRM, только без лицензии за коробку.

Сценарий: заменить подписку за каждого сотрудника у Битрикс24, amoCRM или облака вендора на фиксированную сумму за VPS - и увидеть, что при этом теряется.

PHP 8.3JS/TS SPAMariaDB 11.4ApacheZeroMQDocker ComposeREST API
Экономика

Своя CRM на VPS против подписки за пользователя

Разница не в тарифе, а в форме счета: линейно по числу людей или фиксированно за сервер.

У облачных CRM цена растет со штатом: amoCRM и облако EspoCRM берут за пользователя, Битрикс24 - пакетами с потолком по сотрудникам. Рублевые цены Битрикс24 и amoCRM меняются часто, здесь не приводятся.

ПараметрEspoCRM на своем VPSОблако EspoCRMБитрикс24 / amoCRM
Модель ценыфиксированно за сервер, пользователи не ограничены€12.90 / €22 / €59 за пользователя в месяц, минимум 3 / 5 / 10пакет на компанию с лимитом / за пользователя
Порог входаCPU2-RAM4-DISK50 - 500 руб/месот €38.70/мес (Basic, 3 пользователя)бесплатный тариф с урезанными лимитами
Где данные и почтана вашем сервере в РФплощадки вендора в США и Германииоблако вендора
Отчеты, BPM, счетаплатные паки вендоравсе расширения включеныв составе тарифа
Кто обновляет и бэкапитвывендорвендор

Расчет на 10 и 25 сотрудников

Облако EspoCRM на 10 пользователях - €129/мес на Basic и €220/мес на Enterprise. На 25 пользователях Enterprise - €550/мес, около €6600 в год.

Salesforce на той же десятке (Core, $195 за пользователя) - $1950/мес. Self-host ставит против этого один сервер: CPU2-RAM4-DISK50 за 500 руб/мес закрывает и 3, и 30 пользователей.

i

Где расчет неполный. В облаке включены все расширения, в ядре нет отчетов, BPM и счетов. Если они нужны, к VPS добавляется покупка паков (цены вендор отдает только через корзину) и труд администратора: обновления, бэкапы, TLS, почта.

Граница

Что бесплатно, а за что вендор просит денег

Фичелист на сайте описывает облако со всеми расширениями. Чистый образ дает меньше.

Модель EspoCRM - open core, и граница проходит ближе к ядру, чем у многих OSS-вендоров. У Битрикс24 и amoCRM отчеты и автоматизация входят в тариф, здесь продаются отдельно.

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

БлокВ AGPL-ядре (бесплатно)Платное расширение
Продажилиды, контакты, компании, сделки, воронка, канбан-
Активностизадачи, звонки, встречи, календарь, напоминанияMeeting Scheduler
Почта и маркетингящики IMAP/SMTP, кампании, рассылки, web-to-leadинтеграции MailChimp, Google, Outlook
Поддержкаобращения, клиентский портал, база знанийVoIP
Отчеты и автоматизациятолько дашлеты и формулы в поляхAdvanced Pack: отчеты, BPM (BPMN 2.0), workflow
Товары и деньгинетSales Pack: товары, прайс-листы, счета, заказы, склад
ПроектынетProject Management: проекты, вехи, Gantt
Конструкторсущности, поля, связи, layout-ы, формулы, роли, REST API-
AIнетIntelligence

Права на код у вендора (контрибьюторы подписывают CLA), фонда нет: ничто не мешает перенести функцию из ядра в пак. Облако в США и Германии - оплата паков из РФ может быть затруднена, выясняйте до покупки.

Под капотом

Тех-стек: четыре контейнера, а не один

Бэкенд - PHP 8.3 с собственным ORM и REST API, фронтенд - SPA на фреймворке вендора. База - MySQL 8.0+, MariaDB 10.3+ или PostgreSQL 15+; официальный compose идет с MariaDB, этот путь самый проторенный.

СервисОбраз / entrypointЗа что отвечаетRAM на стенде
espocrmespocrm/espocrm:10.0.8-apacheвеб-приложение и REST API, порт 80~77.5 MB
espocrm-daemonтот же образ, docker-daemon.shпланировщик: прием и отправка почты, рассылки, напоминания, workflow~21.5 MB
espocrm-websocketтот же образ, docker-websocket.sh, ZeroMQживые обновления интерфейса, порт 8080 внутри~21.9 MB
espocrm-dbmariadb:11.4база данных~120.3 MB

Порядок старта держится на healthcheck-ах: приложение ждет здоровую БД, daemon и websocket ждут здоровое приложение (bin/command app-check).

Типичная ошибка - поднять только espocrm и БД. Интерфейс откроется, но письма не заберутся, кампании не уйдут, напоминания не сработают: все это делает daemon. Без websocket интерфейс просто не обновляется в реальном времени.

Данные разнесены по четырем томам: база, espocrm-data (вложения, конфиг), espocrm-custom и espocrm-custom-client (кастомизации). На этом держится обновление сменой тега без потери настроек.

Конструктор

Конструктор CRM: сущности и поля из админки

Entity Manager создает новые сущности («Объект недвижимости», «Заявка на ремонт») и связи между ними. Field Manager добавляет поля любого типа, Layout Manager решает, что видно в списке и карточке.

Формулы считают поля при сохранении, роли режут доступ до уровня поля. Все изменения лежат в томе espocrm-custom и переживают обновление образа.

REST API покрывает те же сущности без квот. Демо-данные на стенде созданы через POST /api/v1/Lead и POST /api/v1/Opportunity - тот же путь годится для миграции из другой CRM или связки с сайтом и 1С.

Карточка компании в EspoCRM 10.0.8: поля, связанные сделки и лента Stream
Карточка компании: поля, связанные сделки и лента Stream. Набор полей задается в Layout Manager. Клик - на весь экран.
Конфигурация

Минимальная конфигурация

Апстрим требований к железу не публикует, только «предпочитайте VPS». Цифры ниже - наш замер.

Официальный минимум RAMне опубликован
Реально в простое (4 контейнера)~207 MB
Рекомендованный memory_limit PHP256M на процесс
Образы на диске1.08 GB + 455 MB = ~1.53 GB
Занято на диске после установки (с ОС)4.1 GB
Тариф FatmetalCPU2-RAM4-DISK50 - 500 руб/мес
i

Почему CPU2-RAM4-DISK50 при 207 MB в простое. Запас нужен росту: MariaDB забирает память под буферы, PHP-процесс под нагрузкой доходит до 256 MB, вложения живут на диске. Команде до 30-50 человек 4 GB хватает с запасом.

В маркетплейсе Fatmetal

Не хотите ставить руками?

Этот стек есть в маркетплейсе Fatmetal. Заказываете сервер, за пару минут получаете рабочую CRM на своем домене с валидным TLS: четыре контейнера связаны, пароли сменены, файл с доступами лежит на сервере.

Рекомендуемая конфигурация: CPU2-RAM4-DISK50

В маркетплейс →
Развертывание

Развертывание на Fatmetal

Fatmetal Cloud Server + Ubuntu 24.04 + Docker, наружу через Caddy с автоматическим TLS. От старта до подтвержденного входа - около 12 минут.

  1. Создать сервер

    Тариф CPU2-RAM4-DISK50, Ubuntu 24.04 LTS, приложение Docker из маркетплейса. Без него Docker Engine и compose-плагин из официального apt-репозитория ставятся за ~40 секунд. A-запись домена направьте на IP заранее.

  2. Сгенерировать секреты в .env

    В примере документации стоят admin_password и database_password - с ними наружу выходить нельзя.

    mkdir -p ~/espocrm && cd ~/espocrm cat > .env <<EOF SITE_DOMAIN=crm.example.ru DB_ROOT_PASSWORD=$(openssl rand -base64 24 | tr -d '/+=') DB_PASSWORD=$(openssl rand -base64 24 | tr -d '/+=') ADMIN_PASSWORD=$(openssl rand -base64 18 | tr -d '/+=') EOF chmod 600 .env
  3. Собрать docker-compose.yml

    Compose из документации с четырьмя правками: теги закреплены, пароли из .env, порты только на loopback, URL сайта и вебсокета с https/wss. Общие поля трех контейнеров приложения вынесены в якорь.

    x-app: &app image: espocrm/espocrm:10.0.8-apache restart: always volumes: - espocrm-data:/var/www/html/data - espocrm-custom:/var/www/html/custom - espocrm-custom-client:/var/www/html/client/custom services: espocrm-db: image: mariadb:11.4 restart: always command: --max-allowed-packet=64MB environment: MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} MARIADB_DATABASE: espocrm MARIADB_USER: espocrm MARIADB_PASSWORD: ${DB_PASSWORD} volumes: ["espocrm-db:/var/lib/mysql"] healthcheck: test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] interval: 10s espocrm: <<: *app environment: ESPOCRM_DATABASE_PLATFORM: Mysql ESPOCRM_DATABASE_HOST: espocrm-db ESPOCRM_DATABASE_USER: espocrm ESPOCRM_DATABASE_PASSWORD: ${DB_PASSWORD} ESPOCRM_ADMIN_USERNAME: admin ESPOCRM_ADMIN_PASSWORD: ${ADMIN_PASSWORD} ESPOCRM_SITE_URL: "https://${SITE_DOMAIN}" ports: ["127.0.0.1:8080:80"] depends_on: {espocrm-db: {condition: service_healthy}} healthcheck: test: ["CMD", "bin/command", "app-check"] start_period: 90s interval: 20s espocrm-daemon: <<: *app entrypoint: docker-daemon.sh depends_on: {espocrm: {condition: service_healthy}} espocrm-websocket: <<: *app entrypoint: docker-websocket.sh environment: ESPOCRM_CONFIG_USE_WEB_SOCKET: "true" ESPOCRM_CONFIG_WEB_SOCKET_URL: "wss://${SITE_DOMAIN}:8081" ESPOCRM_CONFIG_WEB_SOCKET_ZERO_M_Q_SUBSCRIBER_DSN: "tcp://*:7777" ESPOCRM_CONFIG_WEB_SOCKET_ZERO_M_Q_SUBMISSION_DSN: "tcp://espocrm-websocket:7777" ports: ["127.0.0.1:18081:8080"] depends_on: {espocrm: {condition: service_healthy}} volumes: {espocrm-db: {}, espocrm-data: {}, espocrm-custom: {}, espocrm-custom-client: {}}
  4. Поставить Caddy и включить TLS

    Caddy из apt-репозитория Cloudsmith. Два server-блока: сайт на 443 и вебсокет на 8081, оба с Let's Encrypt. В файрволе открыты 80, 443 и 8081.

    sudo tee /etc/caddy/Caddyfile >/dev/null <<'EOF' crm.example.ru { reverse_proxy 127.0.0.1:8080 } crm.example.ru:8081 { reverse_proxy 127.0.0.1:18081 } EOF sudo systemctl restart caddy
  5. Поднять стек и дождаться healthy

    docker compose pull # ~25 с на два образа docker compose up -d watch docker compose ps # ~65 с до четырех healthy

    espocrm 30-40 секунд создает схему и администратора, потом стартуют daemon и websocket. Вход: admin, пароль из .env.

Домашний дашборд EspoCRM 10.0.8 после входа: виджеты Stream и My Activities, меню CRM
Дашборд после первого входа: виджеты Stream и My Activities, слева меню CRM / Activities / Support. Клик - на весь экран.
Список лидов EspoCRM со статусами New, Assigned и In Process
Список лидов с демо-данными, созданными через REST API: статусы New / Assigned / In Process.
Замеры

Что измерили после запуска

Цифры со свежей установки, без нагрузки. Апстрим таких данных не публикует.

Стенд

Дата / сервер2026-09-11, Fatmetal Cloud Server 2 vCPU / 4 GB / 20 GB
ОС / DockerUbuntu 24.04 LTS, Docker 29.8.0, Compose v5.5.1
ВерсияEspoCRM 10.0.8 (10.0.8-apache), MariaDB 11.4, TLS - Caddy

Результаты

Скачивание образов (1.08 GB + 455 MB)~25 с
docker compose up до четырех healthy~65 с
Всего от чистой ОС до HTTPS и входа~12 мин (с двумя правками по ходу)
RAM в простое, 4 контейнера~207 MB
RAM: espocrm / daemon / websocket / db77.5 / 21.5 / 21.9 / 120.3 MB
Образы на диске~1.53 GB (три контейнера делят один образ)
Отклик главной страницы по HTTPS~200 мс
Вход администратораподтвержден через REST API, полный ACL
i

Главное: самая тяжелая часть стека - не PHP, а MariaDB (~120 MB). Приложение с daemon и websocket укладывается в ~120 MB. На 4 GB остается больше 3.5 GB под рост базы, кэш и вложения.

Список сделок EspoCRM с суммами и стадиями Proposal и Negotiation
Сделки: суммы, стадии Proposal / Negotiation, ответственный. Отклик списков на стенде - в пределах 200 мс.

Проверено на версии 10.0.8, сентябрь 2026. На новых версиях результаты могут отличаться.

Подводные камни

Где может сломаться

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

Error response from daemon: failed to bind host port 127.0.0.1:8081/tcp: address already in use

Причина. Compose из документации публикует вебсокет на хостовый 8081, тот же порт снаружи занимает Caddy. Если прокси стартовал первым, espocrm-websocket падает на bind.

Решение. Контейнер на 127.0.0.1:18081:8080, публичный :8081 оставить прокси, в ESPOCRM_CONFIG_WEB_SOCKET_URL - wss://домен:8081. Затем docker compose up -d.

{"messageTranslation":"validationFailure","field":"source","type":"valid"}

Причина. При создании лида через REST API в enum-поле source передано значение Trade Show из старых примеров; в 10.0.8 его нет в списке. API отвечает 400.

Решение. Перед импортом читать списки через GET /api/v1/Metadata или не передавать поле. При миграции из Битрикс24 / amoCRM справочники сначала привести к спискам EspoCRM.

!

Пароли из примера документации. Скопированный «как есть» compose дает CRM с известным всему интернету паролем администратора. Менять до первого up: пароль применяется при инициализации, потом только из интерфейса.

!

ESPOCRM_SITE_URL остался http://localhost:8080. Ссылки в письмах, web-to-lead формы и редиректы ведут на localhost. Ставить реальный домен с https до первого запуска.

!

Плавающие теги. В документации espocrm/espocrm и mariadb:latest без версии. Релизы выходят несколько раз в месяц, а мажор MariaDB по latest может потребовать миграции. Закреплять оба тега.

Безопасность

Безопасность и обновления

Релизы и исправления - на странице релизов GitHub. Обновление - смена тега и пересоздание контейнеров: миграции применяются при старте, кастомизации в томах сохраняются.

sed -i 's/10.0.8-apache/10.0.9-apache/g' docker-compose.yml docker compose pull && docker compose up -d docker compose ps # все четыре снова healthy

Бэкап - дамп базы плюс тома с данными и кастомизациями. Перед обновлением - обязательно:

docker compose exec espocrm-db mariadb-dump -uroot -p"$DB_ROOT_PASSWORD" --single-transaction espocrm \ | gzip > espocrm-$(date +%F).sql.gz docker run --rm -v espocrm-data:/data -v $PWD:/backup alpine \ tar czf /backup/espocrm-data-$(date +%F).tgz -C /data . # то же для espocrm-custom

Что закрыть перед продом:

  • TLS через Caddy или Traefik, порты контейнеров только на 127.0.0.1;
  • свои пароли администратора, БД и root MariaDB, файл .env с правами 600 и вне git;
  • двухфакторная аутентификация для администраторов (Administration, раздел Authentication);
  • роли и команды до выдачи доступа сотрудникам;
  • SMTP и IMAP через российского провайдера или свой почтовый сервер, иначе рассылки уйдут в спам;
  • бэкап по cron с выносом за пределы сервера и проверенным восстановлением.
Рядом

Связь с другими стеками

  • Обратный прокси - Caddy (как здесь) или Traefik: у документации EspoCRM есть рецепт и для него.
  • Почта - docker-mailserver для своих ящиков и отправки кампаний; на одном CPU2-RAM4-DISK50 с CRM - только для небольшой команды.
  • Twenty CRM - соседний разбор: CRM на TypeScript с Notion-подобными таблицами; EspoCRM старше, богаче по функциям и легче по RAM.
  • Поддержка - при большом потоке обращений тикеты лучше вести в Zammad или Chatwoot.
  • Мониторинг - Uptime Kuma на /api/v1/App/user: ожидаемый 401 - признак живого API.
Ограничения

Когда это НЕ ваш выбор

Отчеты и BPM нужны бесплатно и сразу

В ядре только дашлеты и формулы в полях. Конструктор отчетов и бизнес-процессы - Advanced Pack, его цена и оплата из РФ выясняются отдельно. Считайте пак до переезда.

От CRM ждут «все в одном» как у Битрикс24

Задачи по проектам, корпоративный чат, телефония, конструктор сайтов - этого в EspoCRM нет или это платные расширения. Остальное собирается из других продуктов.

Некому обслуживать

Четыре контейнера, патчи несколько раз в месяц, бэкапы, TLS, почта. Без человека, который на это подписан, self-host через полгода становится непропатченной CRM с перепиской внутри. Тогда подписка - оплата чужого админа.

Продукт встраивается в закрытый SaaS

AGPL-3.0 - сетевой copyleft: если EspoCRM становится частью вашего сервиса для внешних пользователей, обязательства по раскрытию кода читаются с юристом. Для внутреннего использования ограничений нет.

FAQ

Частые вопросы

Можно поставить без Docker?

Да, есть ручная установка (PHP 8.3-8.5, Apache или Nginx). Но для прода документация рекомендует Docker Compose: cron и websocket там уже разведены по контейнерам.

Как обновлять?

Сменить тег в compose, docker compose pull && docker compose up -d. Миграции применяются при старте, кастомизации в томах сохраняются. Перед этим - дамп базы.

Как переехать с Битрикс24 или amoCRM?

В ядре есть импорт из CSV для любой сущности и REST API. Сначала привести справочники (источник лида, стадия сделки) к спискам EspoCRM. Переписка и связи автоматически не переносятся.

Есть ли русский интерфейс?

Русский есть в списке языков. Качество перевода на стенде не оценивалось - интерфейс на скриншотах английский.

Какие ограничения лицензии?

AGPL-3.0: использовать в компании и ставить клиентам можно без лимитов. Раскрывать код нужно только при отдаче измененной версии по сети внешним пользователям.

Итог

EspoCRM 10.0.8 стартует за ~65 секунд, занимает ~207 MB RAM в простое и закрывает продажи, почту, кампании и поддержку для команды любого размера на CPU2-RAM4-DISK50 за 500 руб/мес - против €129-€550 в месяц за облако вендора. Цена экономии - четыре контейнера на вашем обслуживании и платные паки, если нужны отчеты, BPM или счета.

Анонсы новых разборов в Telegram-канале Новые гайды и карточки в маркетплейсе первыми @fatmetal_channel →

Этот стек у нас запущен на конфигурации 2 vCPU / 4 GB RAM (аналог тарифа CPU2-RAM4-DISK50). Нашли баг в гайде - напишите, поправим в течение дня.