8e4f4b326776b62a48d62879870725ee8cd45013
AirService
Система управления заявками на техническое обслуживание (Service Desk).
Стек: Laravel 10, Livewire, Tailwind CSS, SQLite, Vite
Локальная разработка
Требования: PHP >= 8.2, Composer, Node.js >= 18
git clone <repo-url>
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
Запустить в двух терминалах:
# Терминал 1
php artisan serve
# Терминал 2
npm run dev
Приложение: http://127.0.0.1:8000
Тестовые аккаунты (пароль у всех: password):
| Роль | |
|---|---|
| admin@service.local | Администратор |
| manager@service.local | Менеджер |
| tech1@service.local | Техник |
| client1@service.local | Клиент |
Деплой на сервер (Docker)
Требования: Docker, Docker Compose на сервере 10.20.0.20.
1. Скопировать проект на сервер
ssh -i /root/.ssh/docker_vm_ed25519 crimson@10.20.0.20
sudo mkdir -p /opt/docker-apps/airservice
С локальной машины:
rsync -avz --exclude='.git' --exclude='node_modules' --exclude='vendor' \
./ crimson@10.20.0.20:/opt/docker-apps/airservice/
2. Создать .env на сервере
cd /opt/docker-apps/airservice
cp .env.example .env
nano .env
Обязательно заполнить:
APP_KEY= # сгенерировать ниже
APP_URL=https://your-domain.ru
Сгенерировать ключ:
docker compose run --rm app php artisan key:generate --show
# Скопировать результат в APP_KEY= в .env
3. Собрать и запустить
docker compose up -d --build
4. Наполнить базу начальными данными (один раз)
docker compose exec app php artisan db:seed
После этого доступны тестовые аккаунты из таблицы выше.
5. Проверить
docker compose ps
docker compose logs app --tail=50
curl -I http://10.20.0.20:18201
Пересборка после обновления кода
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 и не теряется при пересборке.
Если нужно сбросить базу и накатить заново
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)
ssh -i /root/.ssh/edge_vm_ed25519 crimson@192.168.0.80
sudo nano /etc/caddy/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}
}
}
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 |
Description
Languages
PHP
74.5%
Blade
22.8%
JavaScript
1.7%
Dockerfile
0.4%
CSS
0.3%
Other
0.3%