MAATRIX / Блог / OrangeHRM ставят ради кадрового учёта, а поддерживают ещё пять модулей

OrangeHRM ставят ради кадрового учёта, а поддерживают ещё пять модулей

MAATRIX

Задача обычно звучит скромно: нужно место, куда HR-менеджер занесёт личные дела сотрудников, отпуска и больничные, чтобы не держать всё в разрозненных таблицах. Кто-то гуглит «HR система open source», натыкается на OrangeHRM, разворачивает её за час — и получает не узкий кадровый учёт, а платформу из шести модулей: Admin, PIM, Leave, Time, Recruitment, Performance. Половина из них компании физически не нужна, но она всё равно там стоит, требует настройки прав, попадает в бэкапы и обновления, и рано или поздно кто-то в неё случайно зайдёт и начнёт спрашивать, почему в разделе «Вакансии» пусто. Разбираем, что на самом деле входит в OrangeHRM, для какого размера HR-команды это оправданно, а когда система превращается в обузу, которую проще было не ставить.

Что вы получаете, устанавливая OrangeHRM

OrangeHRM Community Edition — это не модуль личных дел с довеском, а цельная платформа с общей базой данных, общей системой прав и общим веб-интерфейсом на PHP и MySQL (или совместимой с ней MariaDB). Модули нельзя физически удалить без вмешательства в код — их можно только скрыть из меню через настройки видимости, но таблицы в базе, фоновые задачи и логика остаются активными.

Из коробки идут:

  • Admin — учётные записи пользователей, роли, оргструктура, списки локаций и подразделений. Без него не заработает вообще ничего, это ядро.
  • PIM (Personal Information Management) — собственно личные дела: паспортные данные, контракты, зависимые лица, документы, история должностей. Это то, ради чего чаще всего и приходят.
  • Leave — учёт отпусков и больничных, календарь отсутствий, workflow согласования у руководителя.
  • Time — табели учёта рабочего времени, привязка часов к проектам.
  • Recruitment — вакансии, кандидаты, воронка собеседований, интеграция с job board (в платной версии — шире).
  • Performance — KPI, цели, циклы оценки эффективности, 360-градусная обратная связь.

Проблема в том, что даже скрытый модуль не бесплатен с точки зрения администрирования. Recruitment и Performance создают свои таблицы при установке, участвуют в cron-задачах уведомлений, попадают в дамп базы при бэкапе и в объём диска. Если через год кто-то из сотрудников случайно откроет вкладку «Recruitment» (права выданы «на всякий случай» ещё при первой настройке), увидит пустую воронку кандидатов и решит, что систему «не докрутили» — хотя её просто никто не настраивал и не планировал использовать.

Реалистичный сценарий: зачем компания ставит OrangeHRM

Типичная точка входа — компания на 30-150 сотрудников, которая переросла Excel и Google-таблицы для отпусков, но не готова платить за облачную HR-SaaS с оплатой за каждого сотрудника в месяц. HR-менеджер (часто в одном лице с офис-менеджером) гуглит «бесплатная HR система», находит OrangeHRM Community Edition — она действительно бесплатна и открыта, — и разворачивает её сама или просит это сделать айтишника на полдня.

Реальная задача в 90% таких случаев — это три вещи: единая база сотрудников с историей должностей и документами, календарь отпусков с согласованием у руководителя, и минимальный self-service, чтобы сотрудник сам смотрел остаток отпускных дней без письма в HR. Recruitment и Performance в этот момент не нужны никому — рекрутинг ведётся через отдельный сервис или вручную по почте, оценка эффективности — на бумаге или вообще не формализована.

Дальше есть два пути. Либо компания честно признаёт, что использует только PIM и Leave, скрывает остальное из меню и живёт с этим годами — и это абсолютно рабочий, экономически оправданный вариант. Либо через полгода-год кто-то из руководства решает «раз уж модуль есть, давайте вести рекрутинг тоже здесь» — и тогда систему начинают реально использовать по полной, что требует уже другого уровня внимания к настройке ролей и прав.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер под OrangeHRM

Для какого размера HR-команды это оправданно

Если в компании HR — это один человек без выделенного администратора системы, самостоятельный хостинг OrangeHRM оправдан только при готовности либо самой разобраться в базовом администрировании Linux-сервера, либо иметь под рукой айтишника, который выделит на это несколько часов в квартал. Ниже — ориентировочная разбивка, у вас может быть иначе в зависимости от того, сколько модулей реально задействовано:

Размер компанииHR-командаЧто использоватьКомментарий
До 20 сотрудников0-1 (совмещение)Таблица или лёгкий SaaSOrangeHRM избыточен по административным затратам относительно пользы
30-150 сотрудников1-2 HROrangeHRM (PIM + Leave), остальное скрытьКлассическая зона применимости
150-500 сотрудников2-5 HR, есть рекрутёрOrangeHRM с реально включённым RecruitmentМодуль уже оправдывает себя
500+ сотрудниковВыделенный HR-департаментOrangeHRM Enterprise или специализированные системы под каждую функциюCommunity Edition начинает упираться в лимиты воркфлоу и отчётности

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

Требования к серверу и установка

OrangeHRM Community Edition не требовательна к железу для малых и средних штатов — это классическое LAMP-приложение (PHP, MySQL/MariaDB, Apache или Nginx). Практический ориентир для планирования, из которого стоит отталкиваться и уточнять по факту нагрузки:

  • До 100 сотрудников: 2 vCPU, 2-4 ГБ RAM, 20-30 ГБ диска — комфортный запас для системы, PHP-FPM пула и MySQL с учётом бэкапов.
  • 100-500 сотрудников: 2-4 vCPU, 4-8 ГБ RAM — если активно используются Recruitment и Performance с ежедневной работой нескольких HR-сотрудников одновременно.
  • 500+ сотрудников: здесь уже стоит закладывать отдельный сервер под базу данных и вынести файловое хранилище резюме/документов на отдельный диск или объектное хранилище, а не держать всё на одной машине.

Минимальный стек для установки на Ubuntu 24.04:

sudo apt update && sudo apt install -y apache2 mysql-server php php-mysql \
  php-mbstring php-xml php-gd php-curl php-zip php-intl libapache2-mod-php

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

Дальше — распаковка дистрибутива OrangeHRM в /var/www/html/orangehrm, права на запись для веб-сервера в директории orangehrm/lib/confs, orangehrm/etc и orangehrm/log, и прохождение веб-мастера установки, который сам создаст схему в базе. После установки обязательно закройте доступ к installer/ — мастер установки, оставленный открытым, это классическая дыра в безопасности для любой PHP-системы такого типа.

Выбор между MySQL и MariaDB для OrangeHRM особого значения не имеет — система работает с обоими одинаково; если сомневаетесь, какой форк ставить и почему они вообще разошлись, это разобрано отдельно в сравнении MariaDB и MySQL.

Скрыть лишние модули и держать права под контролем

Прежде чем открывать систему сотрудникам, стоит явно решить, какие модули включены, и настроить права так, чтобы неиспользуемые разделы не были видны никому, кроме администратора. В OrangeHRM это делается через Admin → Users → User Roles — там задаются права доступа не по модулям целиком, а по конкретным сущностям внутри них (просмотр, редактирование, только свои записи и т.д.).

Практическая рекомендация для компании, которая использует только PIM и Leave:

  • Создайте роль ESS (Employee Self Service) с доступом только к своим личным данным и заявкам на отпуск — это дефолтная роль для рядового сотрудника.
  • Создайте роль HR Admin с полным доступом к PIM и Leave, но без прав на Recruitment и Performance, если эти функции не используются.
  • Роль Admin (суперпользователь) оставьте на одном-двух реальных администраторах системы, а не на всех, кто «может пригодиться».
  • В настройках оргструктуры отключите видимость неиспользуемых вкладок верхнего меню для всех ролей, кроме Admin — это не удаляет модуль, но убирает соблазн туда лезть.

Отдельный момент — данные, которые попадают в PIM и Recruitment, это персональные данные в юридическом смысле: паспортные данные, ИНН, контакты, а в Recruitment — ещё и резюме с историей собеседований людей, которые вообще не являются сотрудниками компании. Требования к защите таких данных не зависят от того, используете вы модуль активно или он просто стоит «на всякий случай» — если тема резюме и данных кандидатов для вас актуальна отдельно от штатного HR-учёта, у нас есть отдельный разбор про хранение резюме кандидатов на своём сервере, а общие требования к размещению серверов с персональными данными сотрудников разобраны в статье про персональные данные сотрудников на корпоративном сервере.

Бэкапы и обновления: цена простоя

OrangeHRM хранит данные в MySQL/MariaDB и файлы (сканы документов, резюме, аватары) в файловой системе — значит, полный бэкап требует и дампа базы, и архива директории с файлами, а не только одного из двух. Пропустить второе — частая ошибка: база восстанавливается, но все прикреплённые к личным делам документы теряются.

Минимальный скрипт ежедневного бэкапа:

#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR=/backup/orangehrm

mkdir -p $BACKUP_DIR
mysqldump --single-transaction -u orangehrm -p'ПАРОЛЬ' orangehrm | gzip > $BACKUP_DIR/db_$DATE.sql.gz
tar czf $BACKUP_DIR/files_$DATE.tar.gz /var/www/html/orangehrm/lib/confs /var/www/html/orangehrm/symfony/plugins/orangehrmPimPlugin/uploads

find $BACKUP_DIR -type f -mtime +14 -delete

Флаг --single-transaction важен именно для MySQL/MariaDB с InnoDB — без него дамп базы, снятый во время активной работы (например, кто-то в этот момент подаёт заявку на отпуск), может получиться логически несогласованным.

Обновления версий OrangeHRM стоит тестировать не на боевой системе: поднимите копию на отдельном сервере или в отдельном контейнере, накатите на неё дамп продакшен-базы и обновление, проверьте, что вход и ключевые модули работают, и только после этого повторяйте на бою. Это особенно важно, если у вас кастомизированы права ролей или включены модули с накопленными данными за годы — миграция схемы базы при обновлении иногда затрагивает и Recruitment, и Performance, даже если вы ими не пользуетесь.

Когда OrangeHRM — не тот инструмент

Есть три сценария, где ставить OrangeHRM не стоит, даже если он бесплатный:

Вам нужен только учёт отпусков без личных дел. Разворачивать полноценную HR-платформу с шестью модулями ради одного календаря отпусков — это как ставить ERP ради складского учёта пяти позиций. Проще и дешевле по административным затратам взять узкоспециализированный инструмент учёта отпусков или вести это в общем календаре с формой запроса.

У вас уже есть CRM или ERP с HR-модулем. Если в компании уже развёрнута система вроде ERPNext, где HR-функционал идёт в комплекте с бухгалтерией и складом, заводить вторую отдельную систему только ради личных дел сотрудников — это удвоение точек администрирования, бэкапов и обновлений без выигрыша в функциональности. Сравнение похожих платформ по этой логике разобрано в статье Odoo или ERPNext: что выгоднее и когда — общий принцип выбора между «всё в одном» и узкими инструментами там применим и к HR.

Рекрутинг — ваша основная деятельность, а не побочная функция HR. Кадровому агентству или отделу с высоким объёмом подбора (десятки вакансий одновременно) Recruitment-модуль OrangeHRM покажется урезанным по сравнению со специализированной ATS — там нет глубокой воронки, интеграций с job board на уровне специализированных систем и гибкой отчётности по источникам кандидатов. Для такого объёма разумнее отдельное решение именно под рекрутинг — пример разворачивания такой системы на своём сервере разобран в статье про свою ATS рекрутёра на своём сервере.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер под OrangeHRM

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

OrangeHRM бесплатна полностью или только частично?

Community Edition — полностью бесплатна и с открытым кодом, её можно ставить на свой сервер без лицензионных платежей. Есть отдельная платная Enterprise-версия с расширенной аналитикой, поддержкой вендора и дополнительными модулями (например, расширенный ATS), но для сценариев из этой статьи Community Edition обычно достаточно.

Можно ли физически удалить неиспользуемые модули, а не просто скрыть?

Формально можно вмешаться в код и убрать плагины Recruitment/Performance из директории symfony/plugins, но это неофициальный путь: при следующем обновлении версии такое вмешательство почти гарантированно сломает миграцию базы. Штатный способ — скрыть модуль через права ролей, оставив код нетронутым.

Нужен ли отдельный сервер под базу данных, если сотрудников немного?

Нет, до нескольких сотен сотрудников MySQL/MariaDB спокойно живёт на одном сервере вместе с веб-частью. Разносить БД на отдельную машину имеет смысл, когда вы упираетесь в ресурсы одного сервера или когда требования безопасности прямо предписывают изоляцию базы с персональными данными.

Что будет, если не настраивать права ролей и оставить всё по умолчанию?

У новых пользователей по умолчанию действует ограниченная роль ESS, но администраторы, которых заводили «на всякий случай» в начале внедрения, часто получают избыточные права. Раз в полгода стоит ревизировать список пользователей с ролью Admin — это касается любой корпоративной системы, не только OrangeHRM.

OrangeHRM подходит для распределённой команды в разных странах?

Технически да — веб-интерфейс работает из любой точки, есть поддержка нескольких языков интерфейса. Но учтите, что модули Leave и Time завязаны на календарь и рабочие правила, которые в разных юрисдикциях отличаются (праздники, нормы отпуска), и это придётся настраивать вручную по каждой стране отдельно, система не подтягивает такие правила автоматически.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

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