# AirService Система управления заявками на техническое обслуживание (Service Desk). **Стек:** Laravel 10, Livewire, Tailwind CSS, SQLite, Vite --- ## Локальная разработка **Требования:** PHP >= 8.2, Composer, Node.js >= 18 ```bash git clone cd AirService composer install npm install cp .env.example .env # Поменять APP_ENV=local, APP_DEBUG=true, APP_URL=http://localhost:8000 php artisan key:generate touch database/sqlite/database.sqlite php artisan migrate --seed ``` Запустить в двух терминалах: ```bash # Терминал 1 php artisan serve # Терминал 2 npm run dev ``` Приложение: http://127.0.0.1:8000 **Тестовые аккаунты** (пароль у всех: `password`): | Email | Роль | |---|---| | admin@service.local | Администратор | | manager@service.local | Менеджер | | tech1@service.local | Техник | | client1@service.local | Клиент | --- ## Деплой на сервер (Docker) **Требования:** Docker, Docker Compose на сервере `10.20.0.20`. ### 1. Скопировать проект на сервер ```bash ssh -i /root/.ssh/docker_vm_ed25519 crimson@10.20.0.20 sudo mkdir -p /opt/docker-apps/airservice ``` С локальной машины: ```bash rsync -avz --exclude='.git' --exclude='node_modules' --exclude='vendor' \ ./ crimson@10.20.0.20:/opt/docker-apps/airservice/ ``` ### 2. Создать `.env` на сервере ```bash cd /opt/docker-apps/airservice cp .env.example .env nano .env ``` Обязательно заполнить: ```env APP_KEY= # сгенерировать ниже APP_URL=https://your-domain.ru ``` Сгенерировать ключ: ```bash docker compose run --rm app php artisan key:generate --show # Скопировать результат в APP_KEY= в .env ``` ### 3. Собрать и запустить ```bash docker compose up -d --build ``` ### 4. Наполнить базу начальными данными (один раз) ```bash docker compose exec app php artisan db:seed ``` После этого доступны тестовые аккаунты из таблицы выше. ### 5. Проверить ```bash docker compose ps docker compose logs app --tail=50 curl -I http://10.20.0.20:18201 ``` ### Пересборка после обновления кода ```bash rsync -avz --exclude='.git' --exclude='node_modules' --exclude='vendor' \ ./ crimson@10.20.0.20:/opt/docker-apps/airservice/ docker compose up -d --build ``` Миграции накатываются автоматически при старте контейнера. База данных (SQLite файл) хранится в Docker volume `airservice_sqlite_data` и не теряется при пересборке. ### Если нужно сбросить базу и накатить заново ```bash docker compose down docker volume rm airservice_sqlite_data docker compose up -d --build docker compose exec app php artisan db:seed ``` --- ### Открыть домен через Caddy (edge-proxy) ```bash ssh -i /root/.ssh/edge_vm_ed25519 crimson@192.168.0.80 sudo nano /etc/caddy/Caddyfile ``` Добавить блок: ```caddyfile http://www.your-domain.ru, https://www.your-domain.ru { redir https://your-domain.ru{uri} 308 } your-domain.ru { encode zstd gzip reverse_proxy 10.20.0.20:18201 { header_up Host {host} header_up X-Real-IP {remote_host} } } ``` ```bash sudo caddy validate --config /etc/caddy/Caddyfile sudo systemctl reload caddy ``` --- ## Структура Docker-сервисов | Сервис | Описание | |---|---| | `airservice_app` | PHP-FPM (Laravel) | | `airservice_nginx` | nginx, порт `18201` | | `airservice_queue` | Queue worker |