Laravel 13 в laravel-app/, Breeze (Blade) для сессионного логина + Sanctum для API-токенов (задел под Vue/Flutter на этапе 3). Схема Postgres перенесена из сырого SQL в Laravel-миграции (владелец схемы теперь Laravel, Go-сервисы как читали/писали эти таблицы, так и продолжают). Роли/категории/ операторы условий — закрытые PHP-enum'ы (UserRole, DeviceCategory, ConditionOperator); action_type правил намеренно остаётся строкой — открытый, управляемый данными список, а не код. Сидер device_types с growbox-типами как пример данных, не бизнес-логика. Docker: один контейнер (php-fpm + nginx через supervisord, multi-stage сборка vendor/assets). Образ пока не --no-dev — сидер использует fake() для демо-аккаунта. Проверено: миграции применяются на реальном Postgres (в докере и локально), дефолтные тесты Breeze проходят (25/25), Breeze-логин подтверждён вживую через браузер, Sanctum корректно отдаёт 401 на защищённый /api/user без токена.
57 lines
1.6 KiB
Bash
57 lines
1.6 KiB
Bash
# --- PostgreSQL (users, zones, devices, device_types, automation_rules) ---
|
|
POSTGRES_HOST=postgres
|
|
POSTGRES_PORT=5432
|
|
POSTGRES_DB=home_automation
|
|
POSTGRES_USER=home_automation
|
|
POSTGRES_PASSWORD=change_me
|
|
|
|
# --- ClickHouse (telemetry, time-series) ---
|
|
CLICKHOUSE_HOST=clickhouse
|
|
CLICKHOUSE_HTTP_PORT=8123
|
|
CLICKHOUSE_NATIVE_PORT=9000
|
|
CLICKHOUSE_DB=telemetry
|
|
CLICKHOUSE_USER=default
|
|
CLICKHOUSE_PASSWORD=change_me
|
|
|
|
# --- Redis (device shadow: desired/reported state, status, last_seen) ---
|
|
REDIS_HOST=redis
|
|
REDIS_PORT=6379
|
|
REDIS_PASSWORD=
|
|
REDIS_DB=0
|
|
|
|
# --- RabbitMQ (async events between Go services) ---
|
|
RABBITMQ_HOST=rabbitmq
|
|
RABBITMQ_PORT=5672
|
|
RABBITMQ_MANAGEMENT_PORT=15672
|
|
RABBITMQ_USER=home_automation
|
|
RABBITMQ_PASSWORD=change_me
|
|
|
|
# --- Mosquitto (MQTT broker, device <-> ingest/device-control) ---
|
|
MQTT_HOST=mosquitto
|
|
MQTT_PORT=1883
|
|
|
|
# --- device-control-service (gRPC) ---
|
|
DEVICE_CONTROL_GRPC_PORT=50051
|
|
DEVICE_CONTROL_MQTT_CLIENT_ID=device-control-service
|
|
DEVICE_CONTROL_HEALTHCHECK_TIMEOUT=60s
|
|
DEVICE_CONTROL_HEALTHCHECK_INTERVAL=15s
|
|
|
|
# --- ingest-service ---
|
|
INGEST_MQTT_CLIENT_ID=ingest-service
|
|
INGEST_MQTT_TOPIC=devices/+/telemetry
|
|
INGEST_BATCH_MAX_SIZE=500
|
|
INGEST_BATCH_FLUSH_INTERVAL=5s
|
|
INGEST_BATCH_FLUSH_TIMEOUT=10s
|
|
|
|
# --- rule-engine-service ---
|
|
DEVICE_CONTROL_HOST=device-control-service
|
|
RULE_ENGINE_CACHE_REFRESH_INTERVAL=15s
|
|
|
|
# --- Laravel app (stage 2) ---
|
|
# Regenerate for anything beyond local dev: php artisan key:generate --show
|
|
APP_KEY=base64:bR7XdYPEJB20+lOd+mlpmuMMRJ/SVs69bHEmZrM2R90=
|
|
APP_ENV=local
|
|
APP_DEBUG=true
|
|
APP_URL=http://localhost:8000
|
|
LARAVEL_HTTP_PORT=8000
|