Kimai
Учет оплачиваемых часов по клиентам и проектам на своем сервере. Проверили путь от записи времени и ставки до сохраненного счета, а также ресурсы стека и ошибки установки.
Вердикт
- Подрядчику, который выставляет клиентам часы по проектам.
- Команде, которой нужны свои записи времени и ставки.
- Для контроля присутствия через СКУД.
- Для команды без человека, который поддерживает сервер и базу данных.
Что Kimai дает команде
Kimai связывает запись времени с клиентом, проектом и видом работы. Исполнитель запускает таймер или вносит часы вручную, а руководитель видит, на что ушло время. Ставку можно назначить для оплачиваемой работы и собрать счет из выбранных записей.
На стенде мы создали клиента и проект, внесли 1:30 работы и указали ставку 1500 ₽ в час. В разделе счетов Kimai рассчитал 2250 ₽ и сохранил счет с номером 2026/001. Это проверенный путь в веб-интерфейсе, а не описание возможностей по README.
После сохранения счета запись остается в истории с номером и статусом. Это помогает отделить подготовку документов от ведения времени, но не превращает Kimai в бухгалтерскую систему. Проверять реквизиты и правила учета придется вне этого теста.
Продукт больше похож на рабочий журнал услуг, чем на универсальный список задач. Управление сложным бэклогом, зависимости задач и спринты лучше оставить специализированной системе. Документация по счетам отдельно описывает шаблоны и правила отбора оплачиваемых записей.
Чем отличается от облачных трекеров
У самостоятельной установки нет платы за каждое место в самом открытом коде. Вместо подписки команда оплачивает сервер и берет на себя обновления, мониторинг, резервные копии и восстановление. Отдельные плагины Kimai продаются платно.
| Вариант | Цена на 04.10.2026 | Что важно |
|---|---|---|
| Kimai на своем сервере | AGPL-код без оплаты за место; сервер отдельно | Данные, доступность и копии в вашем контуре |
| Kimai Cloud Standard | €2,99 за пользователя в месяц при годовой оплате | Хостинг и обслуживание у вендора |
| Toggl Track Starter | от $9 за пользователя в месяц при годовой оплате | Оплачиваемые ставки и отчеты в подписке |
| Clockify Standard | от $5,49 за место в месяц при годовой оплате | В тарифе есть выставление счетов |
В облачных тарифах цена зависит от активных участников, а набор функций различается. У самостоятельного Kimai цена железа не растет строго по числу пользователей, зато появляется постоянная эксплуатационная работа. Эти модели нельзя сравнивать только одной строкой в прайсе.
Денежную экономию без числа пользователей и стоимости сопровождения считать нельзя. Для одного человека бесплатный SaaS может быть проще. На растущей команде сравнивайте полный счет за инфраструктуру и администрирование с числом оплачиваемых мест, а не только цену VPS.
Как устроен стек
Наш Compose-проект содержит официальный образ kimai/kimai2:2.67.0, MySQL 8.4.11 и Caddy 2.10.2. Приложение и база общаются во внутренней сети Docker. Наружу через HTTPS смотрит только обратный прокси; порт Kimai привязан к localhost.
MySQL хранит клиентов, проекты, пользователей, ставки, записи времени и историю счетов. Отдельные тома Compose отведены под данные Kimai и плагины. Сертификаты Caddy лежат в своих томах. При переносе важны база и прикладные тома, а не только контейнеры.
Валюта в проверенном примере задана клиенту, а ставка введена в запись времени. Kimai объединил их при расчете счета. У проекта могут быть и другие ставки и правила округления; на стенде мы их не сравнивали.
Для почты образ поддерживает MAILER_URL и MAILER_FROM. Без рабочего SMTP ссылка «Я забыл пароль» не завершит восстановление доступа. На стенде тестовое письмо через STARTTLS дошло до ящика; полный сброс пароля мы не проводили. Настройка почты описана апстримом.
Какую машину выбрать
Апстрим не дает численного минимума памяти для нашего трехконтейнерного состава. Поэтому отправной точкой служит замер на VM с 2 vCPU, 4 ГБ RAM и диском 50 ГБ. Для проверенного сценария выбираем фиксированный CPU2-RAM4-DISK50.
| Стенд | fatmetal-dev, stand-1; Ubuntu 24.04.4 |
| Память контейнеров в простое | Kimai 92.15 + MySQL 464.6 + Caddy 12.67 = 569.42 МиБ |
| Доступная память VM | 2816 МиБ после установки |
| Образы | 2.367 ГБ по docker system df |
| Корневая файловая система | 4.8 из 48 ГБ занято |
Показатель free -m включает память всей VM, а docker stats измеряет отдельные контейнеры. Складывать эти числа как независимые расходы нельзя: часть памяти относится к системным процессам и файловому кешу.
Граница рекомендации. Это простой и один тестовый пользователь. Параллельные команды, большие отчеты и тяжелые плагины под нагрузкой не измерялись. При таком сценарии тариф следует перепроверить.
Как мы развернули Kimai
На чистую Ubuntu 24.04 поставили Docker Engine и Compose из официального apt-репозитория Docker. Скрипт создал случайные пароли базы и администратора, секрет приложения и файл доступов с закрытыми правами. Затем поднял MySQL, Kimai и Caddy.
Выбрать постоянные данные
Сохранить Compose-файл и секреты в закрытом каталоге. База, данные приложения и плагины должны жить в томах, переживающих пересоздание контейнеров.
Закрепить версии
В стенде использованы конкретные теги трех образов, а не
latest. Для обновления сначала проверьте совместимость Kimai и базы, затем сделайте копию.Поднять сервисы
Compose ждет здоровую базу, затем запускает приложение. Caddy выпускает сертификат для публичного домена; приложение остается на
127.0.0.1:8001.Проверить пользовательский путь
Недостаточно ответа главной страницы: мы вошли в браузере, сохранили время, ставку и счет. После пересоздания контейнера Kimai данные остались в интерфейсе.
sudo docker compose -f /opt/kimai/compose.yml pull
sudo docker compose -f /opt/kimai/compose.yml up -d
sudo docker compose -f /opt/kimai/compose.yml ps
Повторный запуск скрипта не перезаписывает уже созданные пароли. После изменения Caddyfile он явно перечитывает конфигурацию прокси; один docker compose up -d не применил бы изменение смонтированного файла к уже работающему Caddy.
Текущая документация Compose и README расходятся по примеру версии MySQL: в образце встречается 8.3, тогда как релиз требует 8.4+. Стенд с MySQL 8.4.11 прошел миграции и сохранил счет.
Что показал живой стенд
У MySQL и Kimai статус healthy, Caddy работает. Пять последовательных запросов с машины конвейера к публичной странице входа дали HTTP 200 и проверенный TLS. Медиана полного ответа с редиректами составила 0.114 с.
Время первого скачивания образов, первого ответа и полного сетапа при первоначальной установке не засекалось. Поздний повтор использовал уже скачанные образы, поэтому его продолжительность нельзя выдавать за время чистого заказа. Эти интервалы оставлены без цифр.
Снимки сделаны браузером с машины конвейера через тот же публичный адрес, которым пользуется клиент. Поэтому проверка включала авторизацию, cookie, прокси и сертификат. Локальный ответ контейнера сам по себе не дал бы такой проверки.
При создании счета шаблон оказался обязательным. Мы выбрали клиента, создали шаблон, назначили записи времени ставку 1500 ₽/час и получили счет на 2250 ₽. История сохранила номер 2026/001 и статус «Новый». Содержимое скачиваемого документа не проверяли.
Проверено 4 октября 2026 на Kimai 2.67.0 в dev-контуре stand-1. Клиентский заказ в prod-контуре проверяется отдельно.
Где установка споткнулась
При первом запуске Kimai выполнил миграции, но его проверка здоровья и локальный запрос отвечали HTTP 400. В TRUSTED_HOSTS был только внешний домен: запрос к localhost сервер счел недоверенным. Это ошибка конфигурации, которую легко принять за недоступность приложения.
Причина. Локальное имя не попадало в допустимые хосты приложения.
Решение. Указать localhost|127.0.0.1|ваш-домен в TRUSTED_HOSTS и пересоздать контейнер. Docker-документация Kimai допускает такую форму.
В форме времени выбор проекта обновляет список видов работ. Если активность выбрана раньше проекта, она сбрасывается; первый тест вернулся с «Необходимо выбрать активность». Правильный порядок - проект, обновленный список активности, затем сохранение.
Счета требуют подготовки. Без шаблона раздел счетов переводит на форму его создания. Для настоящего документа нужен собственный профиль компании-отправителя, реквизиты и налоговые параметры; тестовый шаблон этого не заменяет.
Доступ, копии и обновления
Создайте отдельные учетные записи для сотрудников и ограничьте права ролями. Административный пароль и APP_SECRET должны быть уникальными. Файл /opt/kimai/.env на стенде доступен только root; туда же попадают реквизиты SMTP, если включена почта.
Снаружи нужны только 80 и 443 для Caddy и выпуска сертификата. Порт Kimai слушает localhost, MySQL в публичную сеть не выставлен. Внешний доступ к базе лучше открывать отдельно и только под конкретный сценарий, а не как часть типовой установки.
Перед обновлением делайте согласованную копию MySQL и томов Kimai. Команда docker compose down -v удаляет тома и здесь опасна. Восстановление из копии на отдельной машине мы не проверяли, поэтому наличие файлов не следует путать с доказанной процедурой восстановления.
Для полного восстановления понадобятся не только файлы приложения. Проверьте экспорт базы, сохранение томов и секретов, срок хранения копий и пробное восстановление на отдельной VM. Наш тест пересоздания одного контейнера не заменяет такую проверку.
Обновление - это новая пара совместимых версий приложения и БД, а не слепой переход на latest. После смены тегов повторите вход и путь от записи времени до счета. Релизы Kimai и инструкция по Compose служат точками сверки.
С чем соединить Kimai
Redmine подойдет, если команде нужен подробный жизненный цикл задач, а Kimai отвечает за оплачиваемые часы и выставление счета. Связь между ними не настраивалась на стенде; здесь речь о разделении ролей продуктов, не о готовой интеграции.
Caddy закрывает публичный HTTPS и остается в составе рецепта. Для почты понадобится ваш SMTP-сервис. Отчеты Kimai открываются в интерфейсе, а регулярные выгрузки и бухгалтерскую интеграцию следует оценивать на собственных данных и требуемых форматах.
Когда это НЕ ваш выбор
Нужен учет явки, а не работы по проектам
Kimai хранит оплачиваемые записи времени. Контроль проходов, смен и требования к табелю сотрудников лучше проверять в кадровой системе или СКУД.
Нужен сервис без администрирования
Свой сервер означает ответственность за патчи, базу данных, сертификат и копии. Для небольшой команды облачный Kimai или бесплатный план другого трекера может быть практичнее.
Нужны бухгалтерские документы под конкретную юрисдикцию
Мы проверили расчет и сохранение счета, но не юридические реквизиты, экспорт и соответствие местным правилам. Сверьте шаблон с бухгалтером до отправки клиенту.
AGPL-3.0 позволяет самостоятельную установку открытого ядра, но условия лицензии для модифицированного сервиса и состав платных плагинов нужно разбирать отдельно. Особенно если вы планируете дорабатывать Kimai и давать доступ сторонним клиентам.
Частые вопросы
Можно ли вести время по нескольким клиентам?
Да. В проверенном сценарии запись привязана к клиенту, проекту и виду работ. Клиент и проект создаются отдельно до записи времени.
Счет строится сразу после установки?
Сначала требуется шаблон счета. Затем можно отобрать оплачиваемые записи за период, задать ставку и сохранить результат.
Что будет без SMTP?
Учет времени работает, но восстановлению пароля и другим письмам нужен почтовый транспорт. На стенде доставка тестового письма проверена.
Хватит ли 2 ГБ RAM?
Такой тариф не испытывали. Рекомендуем CPU2-RAM4-DISK50 по измеренному стеку на 4 ГБ; это не официальный минимум Kimai.
Можно ли поменять домен после установки?
Нужно обновить адрес в прокси, допустимые хосты Kimai и сертификат. Простого DNS-переключения без проверки этих настроек недостаточно.
Как сохранить данные при обновлении?
Сохраняйте дамп MySQL и тома приложения и плагинов, затем проверяйте восстановление. Мы подтвердили сохранность после пересоздания контейнера, но полный restore не тестировали.
Есть ли плата за каждого сотрудника?
За открытый self-hosted код - нет; сервер и сопровождение оплачиваются отдельно. В облачном предложении вендора оплата идет за пользователя.
Итог
Kimai связывает часы, ставку и клиента в одном самостоятельном экземпляре. На стенде удалось сохранить запись и счет; путь установки требует MySQL, прокси с TLS, уникальных секретов и плановой работы с копиями. Для проверенного простоя подходит CPU2-RAM4-DISK50.
Проверено на стенде fatmetal-dev в октябре 2026. Условия клиентского заказа и результаты под нагрузкой требуют отдельной проверки.