Личный кабинет арендатора
  • PHP 90.1%
  • CSS 9.3%
  • JavaScript 0.5%
  • HTML 0.1%
Найти файл
Виталий Егоров 8ec22288d8 Release 1.0.1: security hardening
2026-09-09 21:08:14 +03:00
app Release 1.0.1: security hardening 2026-09-09 21:08:14 +03:00
data Initial release 1.0.0 2026-09-07 23:23:39 +03:00
database Release 1.0.1: security hardening 2026-09-09 21:08:14 +03:00
deploy-examples Release 1.0.1: security hardening 2026-09-09 21:08:14 +03:00
docs Release 1.0.1: security hardening 2026-09-09 21:08:14 +03:00
logs Initial release 1.0.0 2026-09-07 23:23:39 +03:00
public Release 1.0.1: security hardening 2026-09-09 21:08:14 +03:00
storage Initial release 1.0.0 2026-09-07 23:23:39 +03:00
templates Initial release 1.0.0 2026-09-07 23:23:39 +03:00
.gitignore Initial release 1.0.0 2026-09-07 23:23:39 +03:00
ADDITIONAL-PERMISSION.md Initial release 1.0.0 2026-09-07 23:23:39 +03:00
composer.json Initial release 1.0.0 2026-09-07 23:23:39 +03:00
composer.lock Initial release 1.0.0 2026-09-07 23:23:39 +03:00
LICENSE Initial release 1.0.0 2026-09-07 23:23:39 +03:00
README.md Release 1.0.1: security hardening 2026-09-09 21:08:14 +03:00
THIRD-PARTY.md Initial release 1.0.0 2026-09-07 23:23:39 +03:00
VERSION Release 1.0.1: security hardening 2026-09-09 21:08:14 +03:00

Личный кабинет арендатора

«Личный кабинет арендатора» — небольшое веб-приложение для самостоятельного размещения на своём сервере. Оно предназначено для взаимодействия одного собственника с одним текущим арендатором по одному объекту недвижимости.

Проект работает на PHP и SQLite, не требует отдельного сервера базы данных и рассчитан на nginx с каталогом public/ в качестве корня сайта.

Для чего он нужен

В одном кабинете можно вести основные бытовые вопросы по аренде квартиры:

  • передавать показания счётчиков с фотографиями и хранить историю отправок;
  • вести историю арендных платежей с настраиваемым обозначением валюты и давать арендатору ссылки на чеки НПД;
  • хранить лицевые счета, название управляющей компании и ссылки на сервисы оплаты;
  • показывать сведения об интернет-провайдере и Wi-Fi;
  • показывать арендатору простую проверку доступности домашнего роутера;
  • публиковать договор аренды и соглашение о Wi-Fi с контролем принятой редакции;
  • хранить инструкцию по квартире и перечень имущества;
  • вести простой диалог собственника и арендатора с фотографиями;
  • отправлять напоминания об аренде, счётчиках, интернете и коммунальных услугах;
  • отправлять уведомления через SMS, Telegram и MAX, а собственнику — также через Matrix;
  • восстанавливать пароль арендатора через доступный подтверждённый канал;
  • блокировать кабинет арендатора без удаления истории;
  • полностью очищать данные старого арендатора при его смене;
  • просматривать журнал значимых действий без записи каждого открытия страницы.

Модель проекта

Проект намеренно простой:

  • один экземпляр приложения;
  • один объект недвижимости;
  • один собственник;
  • один текущий арендатор.

Если квартир несколько, для каждой квартиры разворачивается отдельный экземпляр приложения. Рекомендуется использовать отдельный домен или поддомен для каждого экземпляра, например:

flat1.example.ru
flat2.example.ru
flat3.example.ru

Установка в подпуть вроде https://example.ru/flat1/ не поддерживается.

Это не система управления многоквартирным домом, не CRM для арендодателей и не коммерческая SaaS-платформа.

Требования

Для самостоятельной установки нужен базовый опыт администрирования Linux: работа в командной строке, nginx, PHP-FPM, права доступа к файлам, домены и HTTPS. Знания разработки приложения не требуются.

Основные требования:

  • Linux;
  • PHP 8.2 или новее, рекомендуется PHP 8.4;
  • PHP-FPM;
  • расширения PHP: pdo_sqlite, sqlite3, mbstring, curl, gd, fileinfo;
  • nginx;
  • Composer;
  • SQLite 3;
  • HTTPS для внешнего доступа;
  • системная команда ping — только если используется проверка доступности домашнего роутера.

Точные версии PHP и системных пакетов могут отличаться. Версия 1.0.1 проверялась на Debian 13, PHP 8.4 и nginx 1.28.

Установка

Краткая схема:

  1. Распаковать проект, например в /var/www/tenant-cabinet.
  2. Установить зависимости строго по composer.lock.
  3. Во время установки дать PHP-FPM право записи только в data/, logs/ и storage/. После установки рекомендуется дополнительно защитить data/config.php от записи, если схема размещения позволяет сделать для него отдельную файловую границу.
  4. Настроить nginx так, чтобы корнем сайта был /var/www/tenant-cabinet/public.
  5. Открыть /install.php и выполнить первоначальную настройку.
  6. Настроить запуск app/worker.php раз в минуту.
  7. Включить HTTPS и проверить нужные каналы уведомлений.

После успешной установки /install.php перестаёт быть доступен и отвечает как обычная отсутствующая страница.

Подробная инструкция: docs/INSTALL-RU.md.

Готовые примеры для nginx, Fail2ban и logrotate находятся в каталоге deploy-examples.

Уведомления

Арендатору доступны:

  • SMS через совместимый Huawei HiLink;
  • Telegram;
  • MAX.

Собственнику доступны Telegram, MAX и Matrix. SMS собственнику можно использовать для ручной проверки, но штатным постоянным служебным каналом собственника он не является.

Привязка Telegram или MAX сама по себе не включает уведомления. После привязки нужные каналы отдельно включает собственник.

Периодические задачи выполняет один обработчик:

sudo -u www-data php /var/www/tenant-cabinet/app/worker.php

Не нужно создавать отдельные задания для напоминаний, повторных попыток и технической очистки.

Подробнее:

Данные и резервное копирование

Основные рабочие данные находятся вне public/:

  • data/config.php — конфигурация и секреты интеграций;
  • data/app.sqlite — основная база;
  • data/audit.sqlite — журнал действий;
  • storage/ — загруженные фотографии;
  • logs/php_errors.log — технические ошибки приложения;
  • logs/auth_failures.log — неудачные авторизации в формате, пригодном для Fail2ban.

Для копирования работающих SQLite-баз используйте .backup, а не обычный cp активного файла.

Подробнее: docs/BACKUP-RU.md.

Безопасность

Корнем сайта должен быть только каталог public/. Нельзя направлять nginx на корень проекта: там находятся базы, конфигурация и другие закрытые данные.

Приложение использует CSRF-защиту, ограничение неудачных входов по IP, защищённое восстановление пароля, повторную проверку пароля собственника перед полным сбросом арендатора, отзыв сессий, проверку прав на фотографии, безопасную обработку загружаемых изображений и отдельный журнал значимых действий.

Подробнее: docs/SECURITY-RU.md.

Документация

Лицензия

Основной код распространяется по PolyForm Noncommercial License 1.0.0.

Дополнительное разрешение позволяет собственнику бесплатно использовать и изменять проект для своих квартир и других собственных объектов недвижимости, даже если они сдаются за деньги и приносят доход. Количество своих объектов не ограничивается, но для каждого объекта нужен отдельный экземпляр приложения.

Можно платить системному администратору или другому специалисту за реальные технические работы: установку, настройку Linux, nginx, PHP, HTTPS, резервное копирование, обновления и сопровождение конкретного экземпляра.

Нельзя:

  • продавать сам проект или право его использования;
  • брать отдельную плату за «лицензию»;
  • размещать у себя кабинеты для чужих собственников и продавать им доступ;
  • делать на основе проекта платный сервис по подписке (SaaS);
  • маскировать продажу программы под услугу установки.

Юридически значимые условия находятся в LICENSE и ADDITIONAL-PERMISSION.md. Пояснение на русском языке: docs/LICENSING-RU.md.

Помощь с установкой

Если вы хотите использовать проект, но не хотите самостоятельно настраивать сервер, можно обратиться к автору за установкой и первоначальной настройкой. Это отдельная платная техническая услуга; плата берётся за работу специалиста, а не за программу или право её использования.

Разумеется, установить и сопровождать проект может любой выбранный вами системный администратор.

Автор

Разработка: Виталий Егоров
E-mail: egorowitaliy@gmail.com