Установка и защита ERPNext на Rocky Linux 9

ERPNext — это свободная ERP-система (Enterprise Resource Planning), которую можно внедрить в компании разных отраслей: производство, дистрибуция, розница, торговля, услуги, образование, некоммерческие организации и здравоохранение. Платформа включает модули: бухгалтерия, CRM, продажи, закупки, сайт и e‑commerce, кассовые точки (POS), производство, склад, управление проектами, инвентарь и сервисы.
ERPNext лицензирован под GNU GPL v3. Основной стек: Python и JavaScript. Приложение построено на фреймворке Frappe (frappe framework). ERPNext позиционируют как альтернативу коммерческим решениям (например, NetSuite) и похожим OSS‑проектам (Odoo).
В этом руководстве вы установите ERPNext на сервер Rocky Linux 9 и обеспечите защиту HTTPS с помощью Certbot и Let’s Encrypt. Мы соберём Python 3.10 из исходников, настроим Redis для сессий, Nginx как обратный прокси, Supervisor как менеджер процессов, Fail2ban для защиты от брут‑форса, MariaDB 10.6 как СУБД, установим Node.js 16 + Yarn для сборки фронтенда и wkhtmltopdf для генерации PDF.
Важно: ERPNext запускается внутри frappe framework, поэтому мы установим и настроим bench (frappe-bench).
Кому это руководство подойдёт
- Сисадминам, которые разворачивают ERPNext на собственном сервере.
- Инженерам DevOps, отвечающим за продуктивное окружение на Rocky Linux 9.
- Архитекторам, планирующим миграцию с других ERP.
Важно: предполагается, что у вас есть домен, не‑root пользователь с sudo и SELinux в режиме permissive.
Что потребуется (кратко)
- Сервер Rocky Linux 9 (1 экземпляр). Пример в руководстве использует хост с именем erpnext-rocky.
- Доменное имя, указывающее на IP сервера (A/AAAA записи).
- Нерутовый пользователь с sudo.
- SELinux в permissive либо корректные контексты (в разделе безопасности — примечания).
Основные требования к версиям
Факты, важные для совместимости:
- Python: минимум 3.10 (в руководстве используется 3.10.9).
- MariaDB: 10.6 (на момент руководства требуется именно эта ветка для совместимости с ERPNext v14).
- Node.js: 16.x.
- ERPNext: v14 (пример).
Структура руководства
- Настройка пользователя
- Сборка и установка Python 3.10
- Установка и настройка MariaDB 10.6
- Установка зависимостей (Redis, Nginx, Supervisor, Fail2ban)
- Установка Node.js 16 и Yarn
- Установка wkhtmltopdf
- Установка bench и frappe framework
- Создание сайта и установка ERPNext
- Развёртывание в production (Nginx + Supervisor через bench)
- Защита HTTPS через Certbot/Let’s Encrypt
- Рекомендации по безопасности, бэкапу и мониторингу
- Чеклисты, playbook, runbook, справка по совместимостям и отладке
Настройка пользователя
Создайте выделённого пользователя для запуска ERPNext и frappe (в примере — frappe). Этот пользователь будет использоваться для установки и выполнения всех команд.
Создайте пользователя и задайте пароль:
sudo useradd -m -s /bin/bash frappe
sudo passwd frappeДобавьте пользователя в группу с sudo‑правами (wheel):
sudo usermod -aG wheel frappeВойдите под пользователем frappe и при необходимости получите root (только если нужно):
sudo - frappe
sudo suПосле успешного переключения приглашение будет выглядеть примерно так: root@hostname:/home/frappe

Нажмите Ctrl+D или введите exit, чтобы выйти из root‑учётной записи.
Установка Python 3.10 из исходников
Пояснение: многие дистрибутивы поставляют пакетные версии Python, но для корректной работы frappe/bench часто требуется именно конкретная версия (3.10). Сборка из исходников даёт контроль над путями установки и совместимостью.
Установите зависимости для сборки:
sudo dnf install gcc openssl-devel bzip2-devel libffi-devel zlib-devel wget makeСкачайте исходники Python 3.10.9 (пример):
wget https://www.python.org/ftp/python/3.10.9/Python-3.10.9.tgzРаспакуйте архив и перейдите в директорию исходников:
tar xzf Python-3.10.9.tgz
cd Python-3.10.9Скомпилируйте с оптимизациями и установите в /usr/local/bin:
./configure --enable-optimizations
nproc
sudo make -j2
sudo make altinstallПроверьте бинарники:
ls /usr/local/binЧтобы python3.10 и pip3.10 были доступны в командной строке для всех пользователей, добавьте /usr/local/bin в PATH и в secure_path для sudo.
Добавьте в /etc/bashrc:
export PATH=$PATH:/usr/local/bin/Загрузите изменения и проверьте PATH:
source /etc/bashrc
echo $PATHОтредактируйте sudoers через visudo и добавьте /usr/local/bin в Defaults secure_path.
Проверьте версии:
sudo python3.10 --version
sudo pip3.10 --version
Совет: если система менеджер пакетов в будущем обновит системный PATH, убедитесь, что приоритет остаётся у /usr/local/bin.
Установка и настройка MariaDB 10.6
ERPNext требует конкретных настроек СУБД: поддержка barracuda, utf8mb4 и т.д. Здесь показана установка MariaDB 10.6 из официального репозитория.
Добавьте репозиторий MariaDB 10.6:
sudo curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup | sudo bash -s -- --mariadb-server-version="mariadb-10.6"Установите сервер и клиент MariaDB:
sudo dnf install MariaDB-server MariaDB-clientЗапустите и включите сервис:
sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo systemctl status mariadb
Отредактируйте конфигурацию /etc/my.cnf.d/server.cnf, добавив в секцию [mysqld]:
[mysqld]
innodb-file-format=barracuda
innodb-file-per-table=1
innodb-large-prefix=1
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ciИ в /etc/my.cnf.d/mysql-clients.cnf установите для клиента:
[mysql]
default-character-set = utf8mb4Перезапустите MariaDB и запустите скрипт безопасности:
sudo systemctl restart mariadb
sudo mariadb-secure-installationСледуйте подсказкам: задайте root‑пароль, удалите анонимных пользователей, отключите удалённый root‑доступ и т.д.
Примечание: сохраните настройки и пароли в безопасном хранилище.
Установка зависимостей из репозиториев Rocky
Установим Redis, Nginx, Supervisor и Fail2ban — все доступны в AppStream/EPEL.
sudo dnf install redis nginx supervisor fail2banЗапустите и включите сервисы:
sudo systemctl start redis
sudo systemctl enable redis
sudo systemctl status redis
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx
sudo systemctl start supervisord
sudo systemctl enable supervisord
sudo systemctl status supervisord
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
sudo systemctl status fail2ban

Совет по Fail2ban: отрегулируйте bantime, findtime и maxretry под характер трафика. Для веб‑форм логина ERPNext можно прописать кастомный фильтр.
Установка Node.js 16 и Yarn
ERPNext v14 требует Node.js 16 и Yarn для сборки фронтенда.
Добавьте репозиторий Nodesource:
curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -Добавьте репозиторий Yarn:
curl -sL https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repoУстановите Node.js и Yarn:
sudo dnf install gcc-c++ make nodejs yarnПри первом добавлении репозиториев подтвердите GPG‑ключи.

Проверьте версии:
node --version
yarn --versionУстановка wkhtmltopdf
wkhtmltopdf нужен ERPNext для генерации PDF‑отчётов.
Установите зависимости:
sudo dnf install fontconfig freetype libX11 libXext libXrender libjpeg libpng xorg-x11-fonts-75dpi xorg-x11-fonts-Type1Установите RPM‑пакет (пример для AlmaLinux9 / RHEL9):
sudo rpm -Uvh https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox-0.12.6.1-2.almalinux9.x86_64.rpmПроверьте установку:
which wkhtmltopdf
which wkhtmltoimage
wkhtmltopdf --version
wkhtmltoimage --version
Совет: используйте статическую сборку, совместимую с вашей версией glibc, или контейнеризированный вариант для стабильности.
Установка frappe‑bench и frappe framework
bench — инструмент для управления frappe/ERPNext.
Установите bench через pip3.10:
sudo pip3.10 install frappe-benchПроверьте:
which bench
bench --version
Инициируйте новый bench с указанием Python и ветки frappe (в примере — версия 14):
bench init --python python3.10 --frappe-branch version-14 frappe-benchПроцесс создаст виртуальные окружения, склонирует frappe‑репозиторий и подготовит структуру frappe-bench.

Дайте права на чтение и исполнение каталогу, чтобы Nginx мог обслуживать статические файлы:
sudo chmod -R o+rx /home/frappe/frappe-bench
# или
sudo chmod -R o+rx /home/frappeСоздание сайта (site) в bench
Перейдите в директорию bench и создайте новый сайт:
cd ~/frappe-bench
bench new-site erp.howtoforge.localВ процессе укажите пароль администратора для сайта (Administrator). Затем переключитесь на сайт:
bench use erp.howtoforge.local
Установка ERPNext приложений
Скачайте приложения (например, payments и erpnext v14):
bench get-app payments
bench get-app --branch version-14 erpnextУстановите erpnext в созданный сайт:
bench --site erp.howtoforge.local install-app erpnextВ процессе зависимости (payments) установятся автоматически.
Проверьте и включите планировщик, выключите режим обслуживания:
bench --site erp.howtoforge.local enable-scheduler
bench --site erp.howtoforge.local set-maintenance-mode off
Развёртывание в production: Nginx и Supervisor
bench умеет автоматически генерировать конфигурации для Nginx и Supervisor и применить их через Ansible.
Запустите:
sudo bench setup production frappeЕсли требуется, подтвердите перезапись конфигураций.
Также можно вызвать конкретно генерацию конфигураций Supervisor/Nginx:
sudo bench setup supervisor
sudo bench setup nginxПроверьте содержимое /etc/supervisor.conf и убедитесь, что включена директива включения файлов:
[include]
file = /etc/supervisord.d/*.confПерезапустите Supervisor:
sudo systemctl restart supervisord
sudo supervisorctl statusЕсли всё настроено верно, все процессы приложения будут в состоянии RUNNING.

Первичная настройка ERPNext через веб‑интерфейс
Откройте браузер и перейдите на http://erp.howtoforge.local/. Введите Administrator и пароль, указанный при создании сайта.
Следуйте мастеру начальной настройки: язык, часовой пояс, валюта, создайте администратора компании, загрузите логотип, заполните данные организации.

После завершения вы увидите панель администратора (dashboard).

Защита HTTPS — Certbot и Let’s Encrypt
Установите Certbot и плагин для Nginx:
sudo dnf install certbot python3-certbot-nginxЗапустите certbot с указанием email и домена (замените на свой домен и email):
sudo certbot --nginx --agree-tos --no-eff-email --redirect --hsts --staple-ocsp --email [email protected] -d erp.howtoforge.localCertbot автоматически обновит конфигурацию Nginx, настроит редирект с HTTP на HTTPS и добавит HSTS.
Проверка автоматического обновления сертификатов (cron/systemd):
sudo systemctl status certbot.timer
sudo certbot renew --dry-runСовет: проверьте, что ваш firewall/сетевой ACL разрешает исходящие HTTPS‑запросы к Let’s Encrypt для валидации.
Бэкап и восстановление (рекомендуемая практика)
Критично: перед обновлениями и крупными изменениями делайте резервные копии базы данных и файлов.
Простой сценарий бэкапа:
- Остановите сервисы или переведите сайт в режим обслуживания.
- Сделайте дамп базы данных:
bench --site erp.howtoforge.local backup
# или явно через mariadb: mysqldump -u root -p --databases dbname > dbname.sql- Скопируйте директорию
sites(файлы, пользовательские вложения):
tar -czf sites-backup-$(date +%F).tar.gz ~/frappe-bench/sitesСнимите копии конфигураций Supervisor и Nginx:
/etc/supervisord.d/*.conf,/etc/nginx/conf.d/*.conf.Храните резервные копии вне сервера (S3/SFTP/другое безопасное хранилище).
Восстановление: распакуйте файлы, восстановите дамп базы через mysql/mariadb и обновите права/сервисы.
Рекомендации по безопасности и производительности
- SELinux: если оно включено, используйте разрешения и контексты SELinux для Nginx и Supervisor. В руководстве предполагалось permissive; лучше — подготовить политику.
- Firewall: закройте ненужные порты, оставьте 80/443 и SSH; при использовании VPN/management‑сети ограничьте доступ к MariaDB (по умолчанию только localhost).
- Fail2ban: настройте фильтры для логина и SSH; уменьшите количество ложных срабатываний.
- MariaDB: используйте отдельный диск/том для данных, включите регулярные бэкапы и репликацию для доступности.
- Redis: ставьте пароль в конфигурации, ограничьте доступ по сокету/IP.
- Мониторинг: настройте простые SLI (доступность веба, ответ MariaDB, очередь задач frappe scheduler) и оповещения.
Частые ошибки и способы устранения
- Ошибка:
benchне найден после установки pip- Проверьте, что
/usr/local/binв PATH и вsecure_path(visudo).
- Проверьте, что
- Ошибка подключения к MariaDB при
bench new-site- Убедитесь, что MariaDB запущен, проверьте
socketи настройки/etc/my.cnf.d/*.
- Убедитесь, что MariaDB запущен, проверьте
- Проблемы с wkhtmltopdf (пустые PDF)
- Убедитесь, что установлен правильный пакет для вашей версии ОС; иногда нужна статическая сборка.
- Nginx не запускается после генерации конфигов
- Проверьте синтаксис:
sudo nginx -tи логи/var/log/nginx/error.log.
- Проверьте синтаксис:
- Supervisor показывает
FATALдля worker- Посмотрите лог процесса, проверьте права доступа, виртуальное окружение.
Playbook: быстрый чек перед продом (роль: sysadmin)
- DNS указывает на IP сервера.
- [ ] Пользователь
frappeсоздан и имеет sudo. - Python 3.10 установлен и доступен.
- MariaDB 10.6 запущен и сконфигурирован (utf8mb4, barracuda).
- Redis, Nginx, Supervisor, Fail2ban установлены и запущены.
- Node.js 16 и Yarn установлены.
- wkhtmltopdf установлен.
- Bench и frappe установлены; сайт создан и ERPNexxt установлен.
- [ ] Nginx/Supervisor конфигурации в
/etcприсутствуют. - HTTPS через Let’s Encrypt установлен и проверен (renew dry run).
- Бэкап системы и бэкап тестированного восстановления.
Роль‑базовые чеклисты
Администратор приложения (Application Admin):
- Проверить доступ в UI под Administrator.
- Настроить организации, счета, валюты.
- Протестировать создание документа (Sales Invoice).
- Запустить генерацию PDF отчёта.
Системный администратор (Sysadmin):
- Проверить статусы systemd сервисов (mariadb, redis, nginx, supervisord, certbot.timer).
- Настроить мониторинг (напр., Prometheus, Zabbix).
- Убедиться в корректности резервных копий.
Разработчик/интегратор (Developer):
- [ ] Убедиться, что node/yarn собирают статические файлы (
bench build). - Проверить логи ошибок (frappe, worker, web).
Incident runbook — восстановление после неудачного обновления
- Перевести сайт в maintenance mode:
bench --site erp.howtoforge.local set-maintenance-mode on- Остановить Supervisor/worker:
sudo supervisorctl stop all- Восстановить базу из последнего рабочего бэкапа.
- Восстановить директорию sites (файлы и вложения).
- Применить необходимые миграции/роллбэки на dev‑подобии прежде чем выкатывать снова.
- Перезапустить Supervisor, выключить maintenance mode.
Тестовые сценарии и критерии приёмки
- Критерий: страница логина доступна по HTTPS и возвращает 200.
- Тест: создание клиента → создание продажи → создание счета → экспорт в PDF.
- Тест производительности: 50 одновременных пользователей (см. нагрузочный тест) — ответ < 2 с (зависит от HW).
Совместимость и миграция: заметки
- При миграции с Odoo/других ERP проверьте формат данных и соответствие моделей. Чаще всего понадобится ETL.
- При обновлении ERPNext между мажорными версиями (например, v13 → v14) выполняйте обновление на тестовом стенде и проверяйте миграции базы.
- Совместимость пакетов: Python 3.10 совместим с frappe v14; MariaDB 10.6 — требуемая ветка.
Быстрый FAQ
Q: Можно ли использовать контейнеры для ERPNext? A: Да. Официальные и сообщественные Docker‑образа доступны и часто упрощают развёртывание. Контейнеризация помогает в управлении зависимостями.
Q: Что делать при проблемах с Certbot и Let’s Encrypt? A: Убедитесь, что домен разрешается на сервер и что Nginx слушает порт 80 для http‑challenge; временно разрешите доступ и повторите.
Маленькая методология: как подходить к развёртыванию ERPNext
- Подготовьте тестовый стенд, повторяющий продовую среду.
- Выполните полную установку согласно чеклисту.
- Проведите функциональные тесты и восстановление из резервной копии.
- Перенесите конфигурации и данные.
- Обновите конфигурации мониторинга и оповещений.
- Переход в прод: заранее согласуйте окна обслуживания и наличие отката.
Краткий справочник (1‑строчный словарь)
- bench: Утилита управления проектами Frappe/ERPNext.
- frappe: Фреймворк, на котором построен ERPNext.
- wkhtmltopdf: Утилита для генерации PDF из HTML.
- Supervisor: Менеджер процессов для запуска worker и scheduler.
- Certbot: Клиент Let’s Encrypt для получения SSL.
Decision flow (мермейд диаграмма)
flowchart TD
A[Начало: готов сервер] --> B{Есть домен?}
B -- Нет --> Z[Назначьте домен и DNS]
B -- Да --> C{Требуется контейнеризация?}
C -- Да --> D[Используйте Docker / Kubernetes шаблон]
C -- Нет --> E[Установите пакеты на хост]
E --> F[Установите Python, MariaDB, Node, wkhtmltopdf]
F --> G[Установите bench и frappe]
G --> H[Создайте сайт и установите ERPNext]
H --> I[Настройка Nginx и Supervisor]
I --> J[Получите SSL через Certbot]
J --> K[Тесты и бэкап]
K --> L[Перевод в прод]Резюме
- ERPNext можно успешно развернуть на Rocky Linux 9, следуя шагам: создание пользователя, сборка Python 3.10, установка MariaDB 10.6 и зависимостей, установка bench/frappe, создание сайта и установка ERPNext, генерация конфигураций production и настройка HTTPS.
- Обязательно настройте регулярные бэкапы, мониторинг и правила безопасности (Firewall, Fail2ban, SELinux).
- Перед обновлениями и миграциями тестируйте всё на стенде и имейте план отката.
Важно: это руководство даёт рабочую последовательность и рекомендации, но для каждой инфраструктуры потребуются тонкая настройка и тестирование.
Заметка: все команды и конфигурации в этом руководстве приведены как пример. Перед применением в продовой среде адаптируйте их под свою политику безопасности и инфраструктуру.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента