MAATRIX / Блог / Как установить и настроить ERPNext на VPS

Как установить и настроить ERPNext на VPS

MAATRIX

Когда компания перерастает 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 для сборки фронтенда — в сумме памяти уходит больше, чем кажется на старте.

Ориентировочные требования (точная цифра зависит от числа пользователей и модулей — держите это как отправную точку, а не гарантию):

СценарийvCPURAMДиск
Тест / знакомство, 1-3 пользователя24 ГБ40 ГБ SSD
Продакшен, до ~15-20 пользователей2-48 ГБ60-80 ГБ SSD
Продакшен, активная работа с отчётами и печатью PDF4+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 ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →