Свой сервер для CRM: развёртывание и бэкапы

Для бизнеса
Свой сервер для CRM: развёртывание и бэкапы

Свой сервер для CRM — это способ платить за систему фиксированную сумму в месяц вместо «за каждого пользователя», а главное — держать базу клиентов у себя, а не у стороннего сервиса. Self-hosted CRM вроде EspoCRM или SuiteCRM ставится на обычный VPS за вечер, а дальше вопрос только в дисциплине: обновления и бэкапы. В этой статье разберём, когда самостоятельное развёртывание оправдано, какой сервер для CRM выбрать по ресурсам, как установить EspoCRM на Ubuntu 24.04 и как построить резервное копирование, при котором потеря базы сделок практически исключена.

Зачем вообще self-hosted CRM

Облачные CRM удобны ровно до тех пор, пока команда маленькая, а требования стандартные. Дальше начинаются знакомые проблемы: тариф растёт с каждым новым менеджером, нужные функции живут в дорогих планах, а экспорт данных при переезде превращается в квест. Self-hosted подход снимает эти ограничения:

  • Контроль данных. База клиентов, переписка и история сделок лежат на вашем сервере. Никто не изменит условия хранения, не закроет сервис и не заблокирует аккаунт. Для компаний, работающих с персональными данными, это ещё и аргумент в пользу размещения на сервере в России.
  • Предсказуемая цена. VPS стоит одинаково при 5 и при 50 пользователях. Облачная CRM на 20 менеджеров легко обходится в 20 000–40 000 ₽/мес — против 750 ₽/мес за сервер, на котором крутится EspoCRM без лицензионных платежей.
  • Кастомизация. Полный доступ к коду и базе: свои поля, свои интеграции, прямые SQL-запросы для отчётов, вебхуки в любые внутренние системы.
  • Нет привязки к вендору. Обе системы ниже — open source. Захотели переехать — забрали дамп базы и каталог файлов, развернули на другом сервере.

Честная цена этого всего — администрирование. Кто-то должен обновлять систему, следить за диском и проверять бэкапы. Если в компании нет ни одного человека, готового раз в неделю зайти на сервер по SSH, облако может оказаться безопаснее.

EspoCRM или SuiteCRM: что выбрать

Две самые зрелые open-source CRM, которые ставят на свой сервер чаще всего:

  • EspoCRM — лёгкая и быстрая система на PHP. Современный интерфейс, гибкий конструктор сущностей, воронки продаж, e-mail-интеграция, API. Скромные требования: комфортно живёт на 2 ГБ RAM для небольшой команды. Хороший выбор для отделов продаж на 3–30 человек.
  • SuiteCRM — форк SugarCRM, тяжёлая «корпоративная» система: сложные workflow, модуль отчётов, права доступа на уровне ролей и групп. Требует заметно больше ресурсов и терпения при настройке, зато покрывает процессы уровня среднего бизнеса.

Практическое правило: если вы не можете назвать функцию SuiteCRM, без которой не обойтись, — ставьте EspoCRM. Она проще в поддержке, быстрее работает и реже ломается при обновлениях.

Требования к серверу для CRM

CRM — это классическое PHP-приложение с базой MySQL/MariaDB. Узкие места: память (PHP-FPM + MySQL) и скорость диска (поиск и отчёты по растущей базе). Ориентиры по ресурсам:

КомандаvCPURAMДискПодходящий тариф Cheap-Host
1–5 пользователей, тест2–44–8 ГБ20+ ГБ NVMeStart — 450 ₽/мес (6 vCPU, 8 ГБ, 96 ГБ NVMe)
5–30 пользователей, продакшен4–816 ГБ50+ ГБ NVMePro — 750 ₽/мес (12 vCPU, 16 ГБ, 128 ГБ NVMe)
30+ пользователей, SuiteCRM с отчётами8+32 ГБ100+ ГБ NVMeUltra — 1500 ₽/мес (20 vCPU, 32 ГБ, 192 ГБ NVMe)

Два момента, которые часто недооценивают. Первый — диск: CRM постоянно ищет по базе (контакты, дубли, фильтры в списках), и на NVMe эти операции выполняются в разы быстрее, чем на SATA SSD — подробнее в статье о NVMe-дисках в VPS. Второй — виртуализация: нужна честная KVM с выделенной памятью, потому что MySQL деградирует первым, когда сосед по узлу отъедает ресурсы. У Cheap-Host все тарифы на KVM и NVMe, а если команда вырастет — CPU, RAM и диск апгрейдятся без переустановки и потери данных.

Развёртывание EspoCRM на Ubuntu 24.04

Схема стандартная: Nginx + PHP-FPM + MariaDB. Предполагаем, что базовая настройка сервера сделана — если нет, начните с чек-листа первых шагов после покупки VPS.

1. Ставим стек

sudo apt update && sudo apt upgrade -y
sudo apt install -y nginx mariadb-server \
  php8.3-fpm php8.3-mysql php8.3-gd php8.3-mbstring \
  php8.3-curl php8.3-xml php8.3-zip php8.3-intl php8.3-bcmath
sudo mysql_secure_installation

2. Создаём базу данных

sudo mysql -e "CREATE DATABASE espocrm CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
sudo mysql -e "CREATE USER 'espocrm'@'localhost' IDENTIFIED BY 'СЛОЖНЫЙ_ПАРОЛЬ';"
sudo mysql -e "GRANT ALL PRIVILEGES ON espocrm.* TO 'espocrm'@'localhost'; FLUSH PRIVILEGES;"

3. Скачиваем и распаковываем EspoCRM

cd /tmp
wget https://www.espocrm.com/downloads/EspoCRM-latest.zip
sudo apt install -y unzip
sudo unzip EspoCRM-latest.zip -d /var/www/
sudo mv /var/www/EspoCRM-* /var/www/espocrm
sudo chown -R www-data:www-data /var/www/espocrm

4. Конфиг Nginx

server {
    listen 80;
    server_name crm.example.com;
    root /var/www/espocrm/public;
    index index.php;

    location /client { root /var/www/espocrm; }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }

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

Сохраните это в /etc/nginx/sites-available/espocrm, включите сайт и перезапустите Nginx:

sudo ln -s /etc/nginx/sites-available/espocrm /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

Дальше откройте http://crm.example.com — веб-установщик попросит данные базы и создаст администратора. Сразу после установки повесьте бесплатный SSL-сертификат — инструкция в статье про Let's Encrypt и certbot: CRM без HTTPS — это пароли и данные клиентов открытым текстом.

5. Планировщик (cron)

EspoCRM выполняет фоновые задачи (почта, workflow, уведомления) через cron. Добавьте задание для пользователя www-data:

sudo crontab -u www-data -e
# добавить строку:
* * * * * cd /var/www/espocrm; php cron.php > /dev/null 2>&1

SuiteCRM разворачивается по той же схеме (стек тот же, отличается дистрибутив и требования к версии PHP — сверьтесь с официальной документацией конкретного релиза).

Бэкапы CRM: стратегия, при которой данные не теряются

База сделок — самое дорогое, что есть на этом сервере. Правило простое: 3-2-1 — три копии данных, на двух разных носителях, одна вне площадки. Применительно к CRM это выглядит так.

Что бэкапить

  • Базу данных — вся бизнес-информация: контакты, сделки, задачи, история.
  • Каталог приложения — как минимум data/, custom/ и конфиг (загруженные файлы, кастомизации, настройки).

Скрипт ежедневного бэкапа

#!/bin/bash
set -e
TS=$(date +%F_%H-%M)
BACKUP_DIR=/var/backups/espocrm
mkdir -p "$BACKUP_DIR"

# дамп базы
mysqldump --single-transaction --routines espocrm | gzip > "$BACKUP_DIR/db_$TS.sql.gz"

# файлы приложения
tar -czf "$BACKUP_DIR/files_$TS.tar.gz" \
  -C /var/www/espocrm data custom

# хранить локально 7 дней
find "$BACKUP_DIR" -type f -mtime +7 -delete

Ключевой флаг — --single-transaction: дамп InnoDB-таблиц снимается консистентно, без блокировки работающей CRM. Скрипт кладём в /usr/local/bin/backup-crm.sh и запускаем по расписанию:

sudo chmod +x /usr/local/bin/backup-crm.sh
sudo crontab -e
# каждый день в 03:15
15 3 * * * /usr/local/bin/backup-crm.sh

Копия вне сервера — обязательно

Локальный бэкап не спасёт при потере самого сервера. Выгружайте копии наружу: в S3-совместимое хранилище через restic или rclone (разбор в статье про бэкапы в S3) или хотя бы на второй дешёвый сервер по rsync. Для роли «удалённая полка под бэкапы» подойдёт NAT VPS у Cheap-Host — NAT Plus с 50 ГБ NVMe стоит 349 ₽/мес, и это отдельная площадка в Германии, физически независимая от основного сервера в Москве.

И главное правило, которое отличает бэкап от лотереи: раз в месяц восстанавливайте копию на тестовой машине. Непроверенный бэкап — это гипотеза, а не бэкап. Общая методика — в статье о резервном копировании VPS по схеме 3-2-1.

Безопасность: минимум, без которого нельзя

  1. HTTPS через Let's Encrypt — сразу после установки.
  2. Файрвол: открыты только 80, 443 и SSH-порт (ufw allow 443/tcp и т.д.).
  3. Вход по SSH-ключам, root-вход по паролю выключен.
  4. Fail2ban на SSH и на страницу логина CRM.
  5. Регулярные обновления системы и самой CRM (у EspoCRM обновление запускается одной командой php command.php upgrade).
  6. Двухфакторная аутентификация для администраторов — есть и в EspoCRM, и в SuiteCRM.

FAQ

Какой сервер нужен для CRM на 10–20 сотрудников?

2–4 активных vCPU, 8–16 ГБ RAM и NVMe-диск. Тариф Pro у Cheap-Host (12 vCPU, 16 ГБ RAM, 128 ГБ NVMe, 750 ₽/мес) закрывает такую команду с запасом на рост базы и почтовые интеграции.

Чем self-hosted CRM лучше облачной?

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

Как часто делать бэкапы CRM?

Базу — минимум раз в сутки, при активных продажах — каждые 4–6 часов (дамп с --single-transaction не мешает работе). Файлы — раз в сутки. Одна копия — всегда вне сервера.

Можно ли перенести данные из облачной CRM?

Да: экспортируйте контакты, компании и сделки в CSV и импортируйте штатным инструментом EspoCRM/SuiteCRM с сопоставлением полей. Историю активности обычно догружают через API.

Потянет ли CRM самый дешёвый VPS?

Для пилота на 2–3 человека хватит тарифа Start за 450 ₽/мес. Для боевой команды берите 16 ГБ RAM — MySQL и PHP-FPM разменивают память на скорость, а апгрейд тарифа у Cheap-Host выполняется без потери данных.

Вывод

Свой сервер для CRM — это фиксированные 450–1500 ₽ в месяц вместо растущей подписки, полный контроль над базой клиентов и свобода кастомизации. EspoCRM разворачивается на Ubuntu 24.04 за вечер, а грамотный бэкап по схеме 3-2-1 с ежедневным дампом и копией вне площадки делает потерю данных маловероятным сценарием. Если для этой задачи вам нужен сервер — у Cheap-Host тариф Pro за 750 ₽/мес: 12 vCPU, 16 ГБ RAM, 128 ГБ NVMe, KVM, безлимитный трафик и выдача сервера за минуту. Подробности — на cheap-host.onl.

Читайте также