Kimai на Ubuntu 24.04: пошаговая установка
Если фрилансер или команда считает рабочее время в таблицах или на глаз, рано или поздно всплывают спорные часы, забытые задачи и клиенты, которым нечем подтвердить счёт. Kimai — open-source система тайм-трекинга, которая закрывает это: таймер по проектам, отчёты, экспорт в PDF/Excel и биллинг клиентов. Ниже — рабочая установка Kimai на чистый Ubuntu 24.04, без Docker, с нуля до входа в веб-интерфейс.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что понадобится и с чем работаем
Kimai 2.x — это PHP-приложение на Symfony. Для продакшена нужны:
- VPS с Ubuntu 24.04, минимум 1 vCPU / 2 ГБ RAM (для команды из 10-20 человек с запасом хватит, для сотен пользователей закладывайте больше);
- PHP 8.3 (в Ubuntu 24.04 это версия по умолчанию в стандартных репозиториях, отдельный PPA не нужен);
- MariaDB или MySQL под базу данных;
- Nginx в роли веб-сервера и обратного прокси к PHP-FPM;
- домен, указывающий на сервер, — для SSL-сертификата.
Разворачивать будем не из git-исходников (там нужны composer, npm/yarn и сборка фронтенда, что на слабом VPS может упереться в память), а из готового релизного архива с сайта проекта — там уже собраны vendor-зависимости и ассеты. Это сильно проще и быстрее.
Подключаемся по SSH под пользователем с правами sudo и обновляем систему:
sudo apt update && sudo apt upgrade -y
Устанавливаем PHP 8.3 и расширения
Kimai требует набор PHP-расширений: mbstring, xml, curl, zip, gd, intl, bcmath, mysql, opcache. Ставим всё одной командой:
sudo apt install -y php8.3 php8.3-fpm php8.3-cli php8.3-mysql \
php8.3-xml php8.3-mbstring php8.3-curl php8.3-zip php8.3-gd \
php8.3-intl php8.3-bcmath php8.3-opcache php8.3-common \
unzip curl
Проверьте, что все нужные модули активны:
php -m | grep -E 'mbstring|xml|curl|zip|gd|intl|bcmath|pdo_mysql'
Если какого-то модуля нет в выводе — Kimai при установке сообщит об этом явно, но лучше проверить заранее и не тратить время на диагностику позже.
Отредактируйте php.ini для FPM (/etc/php/8.3/fpm/php.ini) — увеличьте лимиты под загрузку файлов и импорт данных:
memory_limit = 256M
upload_max_filesize = 20M
post_max_size = 20M
max_execution_time = 60
После правки перезапустите PHP-FPM:
sudo systemctl restart php8.3-fpm
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверСтавим и настраиваем MariaDB
sudo apt install -y mariadb-server
sudo mysql_secure_installation
На вопросы mysql_secure_installation отвечайте стандартно: задайте пароль root, удалите анонимных пользователей, запретите удалённый вход под root, удалите тестовую базу.
Создаём базу и отдельного пользователя под Kimai — root для приложения использовать не нужно:
sudo mysql -u root -p
CREATE DATABASE kimai CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'kimai'@'localhost' IDENTIFIED BY 'замените_на_свой_пароль';
GRANT ALL PRIVILEGES ON kimai.* TO 'kimai'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Строку подключения kimai:пароль@localhost/kimai держите под рукой — она понадобится в .env.local на следующем шаге.
Скачиваем и разворачиваем Kimai
Заходим на страницу релизов проекта на GitHub (github.com/kimai/kimai/releases) и находим последний стабильный релиз с приложенным zip-архивом (обычно называется вида kimai-release-X.Y.Z.zip — это уже собранная версия с vendor и public/build внутри, отдельно собирать фронтенд не нужно). Подставьте актуальную ссылку вместо примера ниже:
cd /var/www
sudo curl -LO https://github.com/kimai/kimai/releases/download/X.Y.Z/kimai-release-X.Y.Z.zip
sudo unzip kimai-release-X.Y.Z.zip -d kimai
sudo rm kimai-release-X.Y.Z.zip
Выставляем права — веб-сервер должен иметь доступ на запись в var/ (кэш, логи, сессии, загруженные вложения):
sudo chown -R www-data:www-data /var/www/kimai
sudo find /var/www/kimai -type d -exec chmod 755 {} \;
sudo find /var/www/kimai -type f -exec chmod 644 {} \;
sudo chmod -R 775 /var/www/kimai/var
Создаём файл конфигурации окружения .env.local в корне проекта:
sudo -u www-data nano /var/www/kimai/.env.local
Минимальное содержимое:
APP_ENV=prod
APP_SECRET=сгенерируйте_случайную_строку_32_символа
DATABASE_URL=mysql://kimai:пароль@localhost:3306/kimai?serverVersion=mariadb-10.11.0
MAILER_DSN=smtp://localhost
APP_SECRET сгенерировать проще всего командой openssl rand -hex 16. MAILER_DSN понадобится, если хотите, чтобы Kimai отправлял письма о напоминаниях и сбросе пароля — на первом этапе можно оставить заглушку и настроить позже через реальный SMTP.
Запускаем установщик Kimai — он проверит окружение, накатит миграции базы и подготовит кэш:
cd /var/www/kimai
sudo -u www-data php bin/console kimai:install
Скрипт задаст несколько вопросов (подтвердить структуру БД, создать администратора и т.д.) — идите по шагам интерактивно, здесь безопаснее не спешить.
Настраиваем Nginx
Ставим Nginx, если ещё не установлен:
sudo apt install -y nginx
Создаём виртуальный хост /etc/nginx/sites-available/kimai:
server {
listen 80;
server_name timetracker.example.com;
root /var/www/kimai/public;
index index.php;
location / {
try_files $uri /index.php$is_args$args;
}
location ~ ^/index\.php(/|$) {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $document_root;
internal;
}
location ~ \.php$ {
return 404;
}
client_max_body_size 20M;
}
Замените timetracker.example.com на свой домен, активируйте конфиг и проверьте синтаксис:
sudo ln -s /etc/nginx/sites-available/kimai /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
Подробнее про эту схему прокси к PHP-FPM — в статье про Nginx как reverse proxy.
Подключаем SSL и создаём администратора
Для HTTPS используем Let's Encrypt через certbot:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d timetracker.example.com
Certbot сам пропишет редирект с 80 на 443 порт и настроит автопродление сертификата (проверить таймер: systemctl status certbot.timer). Если сомневаетесь между certbot и acme.sh — сравнение есть в статье certbot или acme.sh: что выбрать для сервера.
Если администратора не создали на шаге kimai:install, сделайте это отдельной командой:
sudo -u www-data php bin/console kimai:user:create admin admin@example.com ROLE_SUPER_ADMIN
Команда спросит пароль интерактивно. После этого открывайте https://timetracker.example.com и заходите под созданной учётной записью.
Отдельно закройте порт 3306 от внешнего мира и оставьте доступ только 22/80/443 — как настроить это через ufw, разобрано в статье про фаервол UFW на Ubuntu 24.04.
Автозапуск, бэкапы и обновление
Nginx, PHP-FPM и MariaDB уже стоят на автозапуске через systemd после установки пакетов — проверить можно так:
sudo systemctl is-enabled nginx php8.3-fpm mariadb
Если где-то disabled — включите: sudo systemctl enable --now <сервис>.
Kimai хранит данные в двух местах: база MySQL/MariaDB (проекты, задачи, тайм-записи) и папка var/data (вложения, если включена загрузка файлов к записям). Бэкапить нужно оба:
mysqldump -u kimai -p kimai > /root/backups/kimai_$(date +%F).sql
tar czf /root/backups/kimai_data_$(date +%F).tar.gz /var/www/kimai/var/data
Вынесите это в cron и храните копии вне сервера — по общей схеме бэкапа MySQL можно свериться со статьёй как установить и настроить бэкап MySQL на VPS.
Обновление Kimai между минорными версиями делается так: скачиваете новый релизный архив, распаковываете во временную папку, переносите свой .env.local и содержимое var/data из старой установки, затем запускаете:
sudo -u www-data php bin/console cache:clear --env=prod
sudo -u www-data php bin/console doctrine:migrations:migrate --no-interaction
Перед обновлением всегда делайте свежий бэкап базы — миграции необратимы, если что-то пойдёт не так посреди процесса.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Обязательно ли ставить Kimai через Docker?
Нет, оба способа официально поддерживаются. Docker удобнее для быстрого старта и изоляции, установка «в чистую систему» — для тех, кто хочет полный контроль над стеком и не хочет держать лишний слой контейнеризации на небольшом VPS.
Подходит ли SQLite вместо MySQL/MariaDB?
Технически Kimai может работать и на SQLite, но для рабочей многопользовательской установки разработчики рекомендуют полноценную СУБД — она устойчивее при параллельной записи от нескольких сотрудников одновременно.
Можно ли открыть Kimai клиентам для просмотра своих часов?
Да, в Kimai есть ролевая модель с правами клиента — можно выдать ограниченный доступ только к его проектам и отчётам, без видимости чужих данных.
Что делать, если после установки страница отдаёт 502?
Чаще всего это несовпадение пути к сокету PHP-FPM в конфиге Nginx — проверьте версию через php -v и путь /run/php/php8.3-fpm.sock в блоке fastcgi_pass, а также права www-data на каталог var/.
Нужен ли отдельный SMTP-сервер?
Для напоминаний о незаполненном времени и сброса пароля — да, без рабочего MAILER_DSN эти письма просто не уйдут. Подойдёт любой внешний SMTP (например, от почтового провайдера) — прописывать полноценный почтовый сервер на том же VPS для одного приложения избыточно.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →