No description
  • PHP 69.7%
  • Blade 24.6%
  • CSS 3.8%
  • JavaScript 1.8%
Find a file
2026-11-02 19:11:45 +02:00
app Simplify API settings and fix mobile security filters 2026-11-02 19:11:45 +02:00
docs Simplify API settings and fix mobile security filters 2026-11-02 19:11:45 +02:00
nginx fix: keep web connected after app recreation 2026-10-07 01:46:09 +02:00
.gitignore Remove accidental backup file 2026-07-12 17:06:32 +03:00
AI_CONTEXT.md Add bounded API security journal and 30-day traffic chart 2026-11-02 19:03:29 +02:00
docker-compose.yml Queue repair emails in background 2026-07-30 14:33:41 +02:00
PROJECT_MAP.md Add bounded API security journal and 30-day traffic chart 2026-11-02 19:03:29 +02:00
README.md feat: redesign recurring work catalog and batch selection 2026-10-30 19:44:53 +03:00

Maistar Remontas

Работающий сайт заявок на ремонт электроники и внутренняя CRM для Maistar.

Адреса

  • Публичный сайт: https://remontas.maistar.lt
  • Админ-панель: https://remontas.maistar.lt/admin
  • Git: https://git.maistar.lt/administrator/remontas-site

Основные возможности

Публичная часть

  • регистрация заявки на ремонт;
  • загрузка фотографий и файлов;
  • проверка и нормализация литовских телефонных номеров;
  • отслеживание ремонта по случайному коду;
  • публичный статус и комментарий клиенту;
  • email-шаблоны и журнал отправки;
  • редактируемые цены;
  • редактируемый список техники, которая не ремонтируется;
  • примеры выполненных ремонтов.

Админ-панель

  • рабочая главная страница со статусами очереди, срочными и давно не обновлявшимися ремонтами, финансовой сводкой и графиками;
  • ремонты и история изменения статусов;
  • клиенты и история их ремонтов;
  • места приёма устройств;
  • журнал email;
  • настройки сайта;
  • внутренние заметки ремонта;
  • фотографии и файлы в заметках;
  • просмотр, скачивание и удаление файлов;
  • двухфакторная аутентификация;
  • приоритеты и многокритериальная сортировка;
  • сохранение фильтров, колонок и размера страницы;
  • фильтр по источнику регистрации ремонта;
  • быстрый ввод окончательной цены и оплаты при завершении ремонта;
  • отдельный учёт платежей, возвратов и расходов с финансовым отчётом;
  • счета, связанные с ремонтом и фактическими платежами;
  • последовательная нумерация, статусы оплаты и генерация PDF;
  • архивирование ремонтов и безопасное полное удаление связанных финансов и файлов;
  • верхний центр уведомлений о новых заявках с сайта;
  • управление выполненными работами;
  • единые настройки публичного сайта.
  • собственная статистика посещаемости без аналитических cookies: уникальные посетители и просмотры по дням, популярные страницы и график за 30/90/365 дней.

Email

Шаблоны писем, журнал отправки и события уже реализованы. SMTP-отправка выполняется асинхронно контейнером remontas-queue, поэтому регистрация заявки и изменение статуса не ждут ответа внешнего почтового сервиса. Неудачная отправка повторяется до трёх раз и фиксируется в журнале. Реквизиты SMTP и адрес для ответов хранятся только в app/.env.

Резервные копии

  • PostgreSQL-копии .sql.gz;
  • ZIP с загруженными файлами;
  • ручной и автоматический запуск;
  • выбор SQL, ZIP или обоих типов;
  • Laravel Scheduler;
  • локальное хранение заданного количества копий;
  • отправка на SMB, NAS или Windows Server;
  • зашифрованный SMB-пароль;
  • тест чтения, записи и удаления;
  • история запусков;
  • проверка GZIP, ZIP, manifest и SHA-256;
  • сравнение локальной и SMB-копии.

Стек

  • PHP 8.4
  • Laravel 13
  • Filament 4
  • Livewire
  • Blade
  • PostgreSQL 16
  • Nginx
  • Docker Compose
  • Caddy reverse proxy
  • Cloudflare DNS
  • Samba smbclient

Инфраструктура

Основная папка:

/opt/containers/remontas-site

Контейнеры:

remontas-app
remontas-scheduler
remontas-queue
remontas-web
remontas-postgres

Часовой пояс:

Europe/Vilnius

Основные команды

cd /opt/containers/remontas-site

docker compose ps
docker compose up -d --build

docker exec remontas-app php artisan migrate --force
docker exec remontas-app php artisan optimize:clear
docker exec remontas-app php artisan schedule:list
docker exec remontas-app php artisan queue:restart

docker logs --tail 100 remontas-scheduler
docker logs --tail 100 remontas-queue

Обычное обновление приложения не требует перезапуска app: каталог приложения подключён к контейнеру напрямую, а PHP проверяет изменения файлов. Безопасная последовательность без кратковременного 502:

cd /opt/containers/remontas-site
umask 022
git pull --ff-only origin main
git ls-files -z -- app | xargs -0 -r chmod a+r
docker exec remontas-app php artisan migrate --force
docker exec remontas-app php artisan optimize:clear
docker exec remontas-app php artisan queue:restart
docker compose restart scheduler

PHP-FPM работает от пользователя контейнера, поэтому исходные файлы должны быть доступны ему для чтения. umask 022 задаёт обычные права новым файлам и каталогам при git pull; следующая команда восстанавливает чтение только для файлов приложения, отслеживаемых Git. Она не затрагивает игнорируемые .env, загруженные файлы, резервные копии и данные PostgreSQL. Git не сохраняет полный набор Unix-прав, поэтому режим 100644 в репозитории сам по себе не гарантирует чтение файла пользователем PHP-FPM на сервере.

Если менялись Dockerfile, PHP-расширения или состав образа, после пересборки нужно дождаться app и затем перезапустить web:

docker compose up -d --build app queue scheduler
until docker exec remontas-app php -r '$s = @fsockopen("127.0.0.1", 9000); exit($s ? 0 : 1);'; do sleep 2; done
docker compose up -d web
docker compose restart web

Принудительный запуск настроенного backup:

docker exec remontas-app php artisan backups:run-auto --force

Применить лимиты хранения к локальным и SMB-копиям и синхронизировать историю запусков с реально существующими файлами:

docker exec remontas-app php artisan backups:cleanup

Хранилище

Закрытые файлы находятся в:

app/storage/app/private/

Основные каталоги:

repair-files/
repair-note-files/
recurring-service-images/
recurring-service-files/
invoices/
backups/database/
backups/files/

Пароли, .env, PostgreSQL data и реальные backup-файлы не должны добавляться в Git.

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

  • AI_CONTEXT.md — контекст и правила для AI-чата;
  • PROJECT_MAP.md — карта основных каталогов и классов;
  • docs/PERFORMANCE_BASELINES.md — эталонные замеры скорости;
  • app/README.md — краткая памятка по Laravel-приложению.

Санитизированные HAR-файлы хранятся в отдельной ветке performance-baselines и не входят в production-ветку main.