Гид по технологиям

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

• 10 min read • DevOps • Обновлено 21 Nov 2025
Установка и защита ERPNext на Rocky Linux 9
Установка и защита ERPNext на Rocky Linux 9

Логотип ERPNext — общий вид интерфейса

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 (пример).

Структура руководства

  1. Настройка пользователя
  2. Сборка и установка Python 3.10
  3. Установка и настройка MariaDB 10.6
  4. Установка зависимостей (Redis, Nginx, Supervisor, Fail2ban)
  5. Установка Node.js 16 и Yarn
  6. Установка wkhtmltopdf
  7. Установка bench и frappe framework
  8. Создание сайта и установка ERPNext
  9. Развёртывание в production (Nginx + Supervisor через bench)
  10. Защита HTTPS через Certbot/Let’s Encrypt
  11. Рекомендации по безопасности, бэкапу и мониторингу
  12. Чеклисты, 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

Создан пользователь frappe и переход в root

Нажмите 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

Сборка и установка Python 3.10

Совет: если система менеджер пакетов в будущем обновит системный 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

Установка MariaDB 10.6

Отредактируйте конфигурацию /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

Запуск Redis Запуск Nginx Запуск Supervisor Запуск 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‑ключи.

Добавление Nodesource Добавление yarn repo Установка nodejs и yarn

Проверьте версии:

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

Проверка wkhtmltopdf

Совет: используйте статическую сборку, совместимую с вашей версией glibc, или контейнеризированный вариант для стабильности.

Установка frappe‑bench и frappe framework

bench — инструмент для управления frappe/ERPNext.

Установите bench через pip3.10:

sudo pip3.10 install frappe-bench

Проверьте:

which bench
bench --version

Установка bench

Инициируйте новый bench с указанием Python и ветки frappe (в примере — версия 14):

bench init --python python3.10 --frappe-branch version-14 frappe-bench

Процесс создаст виртуальные окружения, склонирует frappe‑репозиторий и подготовит структуру frappe-bench.

Установка frappe framework

Дайте права на чтение и исполнение каталогу, чтобы 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

Создание сайта в frappe

Установка 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

Установка erpnext

Развёртывание в 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.

Развёртывание в production Supervisor — все процессы запущены

Первичная настройка ERPNext через веб‑интерфейс

Откройте браузер и перейдите на http://erp.howtoforge.local/. Введите Administrator и пароль, указанный при создании сайта.

Следуйте мастеру начальной настройки: язык, часовой пояс, валюта, создайте администратора компании, загрузите логотип, заполните данные организации.

Стартовый экран ERPNext Выбор языка, часового пояса и валюты Создание администратора Загрузка логотипа компании Детали организации

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

ERPNext 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.local

Certbot автоматически обновит конфигурацию Nginx, настроит редирект с HTTP на HTTPS и добавит HSTS.

Проверка автоматического обновления сертификатов (cron/systemd):

sudo systemctl status certbot.timer
sudo certbot renew --dry-run

Совет: проверьте, что ваш firewall/сетевой ACL разрешает исходящие HTTPS‑запросы к Let’s Encrypt для валидации.

Бэкап и восстановление (рекомендуемая практика)

Критично: перед обновлениями и крупными изменениями делайте резервные копии базы данных и файлов.

Простой сценарий бэкапа:

  1. Остановите сервисы или переведите сайт в режим обслуживания.
  2. Сделайте дамп базы данных:
bench --site erp.howtoforge.local backup
# или явно через mariadb: mysqldump -u root -p --databases dbname > dbname.sql
  1. Скопируйте директорию sites (файлы, пользовательские вложения):
tar -czf sites-backup-$(date +%F).tar.gz ~/frappe-bench/sites
  1. Снимите копии конфигураций Supervisor и Nginx: /etc/supervisord.d/*.conf, /etc/nginx/conf.d/*.conf.

  2. Храните резервные копии вне сервера (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) и оповещения.

Частые ошибки и способы устранения

  1. Ошибка: bench не найден после установки pip
    • Проверьте, что /usr/local/bin в PATH и в secure_path (visudo).
  2. Ошибка подключения к MariaDB при bench new-site
    • Убедитесь, что MariaDB запущен, проверьте socket и настройки /etc/my.cnf.d/*.
  3. Проблемы с wkhtmltopdf (пустые PDF)
    • Убедитесь, что установлен правильный пакет для вашей версии ОС; иногда нужна статическая сборка.
  4. Nginx не запускается после генерации конфигов
    • Проверьте синтаксис: sudo nginx -t и логи /var/log/nginx/error.log.
  5. 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 — восстановление после неудачного обновления

  1. Перевести сайт в maintenance mode:
bench --site erp.howtoforge.local set-maintenance-mode on
  1. Остановить Supervisor/worker:
sudo supervisorctl stop all
  1. Восстановить базу из последнего рабочего бэкапа.
  2. Восстановить директорию sites (файлы и вложения).
  3. Применить необходимые миграции/роллбэки на dev‑подобии прежде чем выкатывать снова.
  4. Перезапустить 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. Подготовьте тестовый стенд, повторяющий продовую среду.
  2. Выполните полную установку согласно чеклисту.
  3. Проведите функциональные тесты и восстановление из резервной копии.
  4. Перенесите конфигурации и данные.
  5. Обновите конфигурации мониторинга и оповещений.
  6. Переход в прод: заранее согласуйте окна обслуживания и наличие отката.

Краткий справочник (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).
  • Перед обновлениями и миграциями тестируйте всё на стенде и имейте план отката.

Важно: это руководство даёт рабочую последовательность и рекомендации, но для каждой инфраструктуры потребуются тонкая настройка и тестирование.


Заметка: все команды и конфигурации в этом руководстве приведены как пример. Перед применением в продовой среде адаптируйте их под свою политику безопасности и инфраструктуру.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро