Как установить и настроить ERPNext на VPS
Когда компания перерастает Excel и разрозненные Telegram-чаты, встаёт вопрос: платить за облачную ERP каждый месяц или поднять свою на VPS. ERPNext — open-source система, которая закрывает бухгалтерию, склад, CRM и HR в одном месте, и её вполне реально развернуть самостоятельно за пару часов. Ниже — рабочая инструкция от установки зависимостей до продакшен-режима с Nginx и SSL, без магии и лишних абстракций.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое ERPNext и кому он подходит
ERPNext построен на фреймворке Frappe (тоже open-source, тот же разработчик) и закрывает типичный набор модулей малого и среднего бизнеса: бухучёт, склад и закупки, продажи и CRM, производство, проекты, HR и зарплату, помощь в поддержке клиентов. Модули можно включать выборочно — не обязательно тащить сразу всё.
Это разумная альтернатива платным ERP, когда:
- нужен контроль над данными (всё хранится на своём сервере, а не в чужом облаке);
- бюджет ограничен, а SaaS-подписки по 5-10 модулям выходят дороже одного VPS;
- есть кому администрировать сервер — ERPNext не «поставил и забыл», ему нужно внимание при обновлениях.
Если для вас важнее нулевая нагрузка на инфраструктуру и вы готовы платить за это ежемесячно — облачный ERPNext.com или аналоги подойдут лучше. Если хотите свою инсталляцию без ограничений по числу пользователей — читайте дальше.
Требования к серверу и выбор VPS
Frappe/ERPNext сам по себе не «тяжёлый», но тянет за собой MariaDB, Redis, несколько воркеров и Node.js для сборки фронтенда — в сумме памяти уходит больше, чем кажется на старте.
Ориентировочные требования (точная цифра зависит от числа пользователей и модулей — держите это как отправную точку, а не гарантию):
| Сценарий | vCPU | RAM | Диск |
|---|---|---|---|
| Тест / знакомство, 1-3 пользователя | 2 | 4 ГБ | 40 ГБ SSD |
| Продакшен, до ~15-20 пользователей | 2-4 | 8 ГБ | 60-80 ГБ SSD |
| Продакшен, активная работа с отчётами и печатью PDF | 4+ | 16 ГБ | 100+ ГБ SSD |
На 4 ГБ ОЗУ система запустится и будет работать, но сборка ассетов (bench build) и параллельные PDF-отчёты через wkhtmltopdf могут упираться в память — обязательно настройте swap, если берёте минимальный тариф (см. ниже). Из ОС — Ubuntu 22.04 или 24.04 LTS: под них собраны все официальные пакеты и есть актуальная документация.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверПодготовка сервера
Работать под root постоянно не стоит — создайте отдельного пользователя с sudo, под ним и будет крутиться bench.
apt update && apt upgrade -y
adduser frappe
usermod -aG sudo frappe
su - frappe
Если берёте тариф с 4 ГБ и меньше, добавьте swap — иначе сборка фронтенда или резервное копирование могут упасть по нехватке памяти:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Подробный разбор, сколько swap реально нужно и как его правильно посчитать под конкретную нагрузку, — в статье про правильный размер swap для VPS.
Поставьте базовые утилиты:
sudo apt install -y git curl wget software-properties-common build-essential
Установка зависимостей: Python, Node.js, MariaDB, Redis
ERPNext требует конкретный стек версий — расхождения здесь чаще всего и ломают установку.
Python и системные библиотеки:
sudo apt install -y python3-dev python3-pip python3-venv python3-setuptools \
libmysqlclient-dev libffi-dev libssl-dev
MariaDB — основная СУБД для Frappe/ERPNext (MySQL тоже поддерживается, но MariaDB — рекомендованный вариант):
sudo apt install -y mariadb-server mariadb-client
sudo mysql_secure_installation
В /etc/mysql/mariadb.conf.d/50-server.cnf под секцией [mysqld] добавьте:
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
innodb-file-format = barracuda
innodb-file-per-table = 1
innodb-large-prefix = 1
Перезапустите: sudo systemctl restart mariadb. Если раньше не настраивали MariaDB с нуля, общая логика установки и типичные грабли разобраны в статье как установить и настроить MariaDB на VPS — она пригодится и здесь.
Redis (кеш, очереди задач, realtime):
sudo apt install -y redis-server
Node.js и Yarn через nvm (системный apt-пакет Node часто старее, чем нужно фреймворку):
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
source ~/.bashrc
nvm install 18
npm install -g yarn
wkhtmltopdf (для генерации PDF-отчётов и печатных форм) — нужна именно патченная Qt-сборка, обычный пакет из apt печатает документы криво:
sudo apt install -y xvfb libfontconfig wkhtmltopdf
Если на сервере это даёт старую версию без поддержки headless-рендеринга, возьмите актуальный .deb с официального репозитория проекта wkhtmltopdf под вашу версию Ubuntu.
Установка Frappe Bench и создание сайта ERPNext
Bench — это CLI-инструмент, который управляет всем жизненным циклом Frappe-приложений: установку, обновления, бэкапы, запуск воркеров.
sudo pip3 install frappe-bench
bench init frappe-bench --frappe-branch version-15
cd frappe-bench
bench init создаст виртуальное окружение, скачает ядро Frappe и сразу настроит структуру проекта. Дальше подтягиваем приложение ERPNext той же версии (важно совпадение веток Frappe и ERPNext):
bench get-app erpnext --branch version-15
Создаём сайт (можно несколько сайтов на одном bench — это штатный мультитенантный режим):
bench new-site erp.example.com \
--db-root-password ваш_пароль_root_mariadb \
--admin-password надёжный_пароль_администратора
Устанавливаем ERPNext на созданный сайт:
bench --site erp.example.com install-app erpnext
bench use erp.example.com
Проверить, что всё поднялось, можно в dev-режиме прямо сейчас:
bench start
Команда запустит встроенный веб-сервер на порту 8000 — откройте http://IP_сервера:8000 и зайдите под Administrator с паролем, который задали выше. Это тестовый режим (Ctrl+C — и всё останавливается), для реальной работы нужен продакшен-режим ниже.
Продакшен-режим: Supervisor, Nginx и SSL
Dev-сервер не переживёт перезагрузку и не годится для постоянной работы. Frappe умеет сам сгенерировать конфиги для Supervisor (держит процессы живыми) и Nginx (отдаёт статику и проксирует запросы):
sudo apt install -y nginx supervisor
sudo bench setup production frappe
Команда создаст /etc/supervisor/conf.d/frappe-bench.conf с описанием всех воркеров (веб-процесс, фоновые очереди, планировщик) и /etc/nginx/conf.d/frappe-bench.conf с готовым сервер-блоком под ваш сайт. После этого:
sudo supervisorctl reread
sudo supervisorctl update
sudo systemctl restart nginx
Прежде чем идти дальше, направьте A-запись домена erp.example.com на IP сервера — без этого SSL не выпустится. Дальше — обычный Let's Encrypt через certbot:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d erp.example.com
Если вы никогда раньше не настраивали Nginx как reverse proxy или Let's Encrypt отдельно — общая механика и частые ошибки разобраны в статьях Nginx как reverse proxy на VPS и Let's Encrypt SSL на VPS — сгенерированный bench-конфиг Nginx устроен по тем же принципам, так что эти материалы помогут разобраться, если что-то пойдёт не по плану.
Число воркеров под нагрузку можно поднять командой bench setup supervisor заново с флагом --yes после правки common_site_config.json (параметр background_workers и gunicorn_workers) — но на старте штатных значений обычно достаточно, тюнинг имеет смысл делать по факту наблюдаемой нагрузки, а не заранее вслепую.
Резервное копирование и обновления
ERPNext хранит данные в MariaDB плюс файлы (вложения, изображения) в frappe-bench/sites/erp.example.com/public/files и private/files. Штатный бэкап через bench снимает и то, и другое:
bench --site erp.example.com backup --with-files
Файлы бэкапа падают в sites/erp.example.com/private/backups. Для регулярного автоматического снятия добавьте задачу в cron под пользователем frappe:
crontab -e
# каждый день в 3:00
0 3 * * * cd /home/frappe/frappe-bench && bench --site erp.example.com backup --with-files
Дампы стоит копировать за пределы сервера (S3-совместимое хранилище, другой VPS, rclone) — локальный бэкап на том же диске не спасёт при полном отказе сервера. Общий подход к автоматизации бэкапов на Ubuntu и их проверке разобран в статье автоматические бэкапы на Ubuntu 24.04 с нуля, а если хочется разобраться конкретно с бэкапом самой MariaDB — в материале как настроить бэкап MySQL/MariaDB на VPS.
Обновление ERPNext делается через тот же bench:
bench --site erp.example.com set-maintenance-mode on
bench update
bench --site erp.example.com set-maintenance-mode off
bench update подтянет новые версии Frappe/ERPNext, применит миграции базы и пересоберёт ассеты. Перед этим шагом всегда снимайте свежий бэкап руками — миграции необратимы, откатиться проще из дампа, чем распутывать частично применённые изменения схемы.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Хватит ли 4 ГБ RAM для продакшена?
Для одного-двух активных пользователей — да, с настроенным swap. Для команды от 10 человек и активных отчётов лучше закладывать 8 ГБ и выше — иначе воркеры будут упираться в память под нагрузкой.
Можно ли поставить ERPNext через Docker вместо bench?
Да, у проекта есть официальный репозиторий frappe_docker с готовыми docker-compose файлами. Это отдельный путь установки со своими нюансами (управление контейнерами вместо bench-команд) — если вы уже привыкли к Docker-инфраструктуре, он может быть удобнее ручной установки, описанной здесь.
Есть ли русская локализация?
Интерфейс переведён на русский частично (через встроенную систему переводов Frappe), но не все модули покрыты одинаково полно. Терминологию бухучёта и планов счетов обычно приходится адаптировать под РФ вручную или дорабатывать.
Как перенести ERPNext на другой сервер?
Через тот же bench backup --with-files на старом сервере и bench restore на новом (после bench new-site с тем же именем сайта). Дополнительно нужно скопировать директорию с файлами, если она не попала в архив бэкапа.
Что делать, если после установки сайт недоступен по домену, а по IP:8000 работает?
Значит продакшен-режим не подхватился — проверьте sudo supervisorctl status (все процессы должны быть в состоянии RUNNING) и sudo nginx -t на синтаксические ошибки в сгенерированном конфиге.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →