# 🏗️ Инфраструктура ERV Ticket Platform **Создано**: 23.10.2025 **Статус**: В разработке --- ## 📊 Обзор инфраструктуры ### **Принцип**: Используем СУЩЕСТВУЮЩИЕ сервисы, НЕ дублируем! ``` ┌─────────────────────────────────────────────────────────────┐ │ ERV Ticket Application │ │ Сервер: 147.45.146.17 │ │ Папка: /var/www/.../erv_ticket/ │ └────────┬────────────────────────────────────────────────────┘ │ ├─► 🗄️ MySQL (localhost:3306) │ ├─ База: ci20465_erv │ ├─ Таблица: lexrpiority (проверка полисов) │ └─ Назначение: CRM данные │ ├─► 🐘 PostgreSQL (147.45.189.234:5432) │ ├─ База: default_db │ ├─ User: gen_user │ └─ Назначение: Логи, метрики, аналитика, кеш │ ├─► 🔴 Redis (localhost:6379) │ ├─ Password: CRM_Redis_Pass_2025_Secure! │ ├─ Префикс: erv_ticket: │ └─ Назначение: Кеш, Rate Limiting, Sessions │ ├─► 🐰 RabbitMQ (185.197.75.249:5672) │ ├─ User: admin / tyejvtej │ ├─ VHost: / │ └─ Назначение: Асинхронные задачи (OCR, API, Email) │ ├─► 🤖 OCR Service (147.45.146.17:8001) │ ├─ Контейнер: ocr-analyzer │ ├─ Форматы: PDF, JPG, PNG, HEIC, DOCX │ └─ Назначение: Распознавание документов │ ├─► 🧠 OpenRouter AI (openrouter.ai) │ ├─ Model: google/gemini-2.0-flash-001 │ ├─ API Key: sk-or-v1-f237... │ └─ Назначение: Vision AI, извлечение данных │ ├─► ☁️ S3 Timeweb Cloud (s3.twcstorage.ru) │ ├─ Bucket: f9825c87-4e3558f6-... │ └─ Назначение: Хранение файлов │ └─► ✈️ FlightAware API (aeroapi.flightaware.com) ├─ API Key: Puz0cdx... └─ Назначение: Проверка рейсов ``` --- ## 🎯 База данных стратегия: ### **MySQL (CRM база)** ```sql ci20465_erv.lexrpiority ├─ voucher (номер полиса) ├─ insured_from (дата начала) └─ insured_to (дата окончания) Назначение: ✅ Проверка полисов ✅ CRM интеграция ``` ### **PostgreSQL (новая функциональность)** ```sql -- Логи приложения logs ├─ id, level, message, context (JSONB) ├─ ip, user_agent, session_id └─ created_at -- История OCR обработки document_processing ├─ id, session_id, document_type ├─ file_url, s3_url ├─ ocr_text, vision_data (JSONB) ├─ processing_time_ms └─ created_at -- Кеш API (fallback) api_cache ├─ cache_key, cache_value (JSONB) ├─ expires_at └─ created_at -- Метрики реального времени metrics ├─ metric_name, metric_value ├─ tags (JSONB) └─ created_at -- Обращения (дубликат для аналитики) claims ├─ id, session_id, insurance_type ├─ client_data (JSONB) ├─ flight_data (JSONB) ├─ status, crm_ticket_id └─ created_at ``` **Преимущества PostgreSQL**: - ✅ JSONB → быстрый поиск по вложенным структурам - ✅ Полнотекстовый поиск по логам - ✅ Аналитика SQL без костылей - ✅ Партиционирование по датам (логи по месяцам) --- ## 🔧 Конфигурация сервисов: ### **config.php обновление:** ```php // PostgreSQL define('POSTGRES_HOST', env('POSTGRES_HOST')); define('POSTGRES_PORT', env('POSTGRES_PORT', 5432)); define('POSTGRES_DB', env('POSTGRES_DB')); define('POSTGRES_USER', env('POSTGRES_USER')); define('POSTGRES_PASSWORD', env('POSTGRES_PASSWORD')); // Создаём PDO подключение function getPostgresConnection() { static $pdo = null; if ($pdo === null) { $dsn = sprintf( 'pgsql:host=%s;port=%d;dbname=%s', POSTGRES_HOST, POSTGRES_PORT, POSTGRES_DB ); $pdo = new PDO($dsn, POSTGRES_USER, POSTGRES_PASSWORD, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false ]); } return $pdo; } ``` --- ## 🚀 Процесс разработки и переноса: ### **Сейчас (DEV):** ```bash Папка: /var/www/.../erv_ticket/ Доступ: - http://crm.clientright.ru/erv_ticket/ ← Форма - http://147.45.146.17:3002 ← Gitea Сервисы (существующие): ✅ Redis (localhost:6379) ✅ RabbitMQ (185.197.75.249:5672) ✅ PostgreSQL (147.45.189.234:5432) ✅ MySQL (localhost:3306) ✅ OCR (147.45.146.17:8001) Git: git init git add . git commit git remote add origin http://147.45.146.17:3002/fedya/erv-ticket.git git push origin main ``` ### **Потом (PROD на этом же сервере):** ```bash # Вариант 1: Другой домен, та же машина /var/www/erv-claims.clientright.ru/ ├─ git clone http://147.45.146.17:3002/fedya/erv-ticket.git . ├─ cp .env.example .env.production ├─ nano .env.production # Меняем настройки на PROD └─ composer install --no-dev # Nginx/Apache виртуальный хост: erv-claims.clientright.ru → /var/www/erv-claims.clientright.ru/public/ Сервисы (ТЕ ЖЕ!): ✅ Redis (localhost:6379) ← Те же! ✅ RabbitMQ (185.197.75.249:5672) ← Те же! ✅ PostgreSQL (147.45.189.234:5432) ← Те же! ✅ MySQL (localhost:3306) ← Те же! ✅ OCR (147.45.146.17:8001) ← Те же! Различие только в .env: DEBUG_MODE=false APP_ENV=production S3_PATH_PREFIX=prod/erv_ticket/ ← Другая папка в S3 ``` ### **Или (PROD на другом VPS):** ```bash # На новом сервере git clone http://147.45.146.17:3002/fedya/erv-ticket.git cp .env.example .env.production # .env.production REDIS_HOST=147.45.146.17 ← Подключаемся к вашему Redis RABBITMQ_HOST=185.197.75.249 ← Подключаемся к вашему RabbitMQ POSTGRES_HOST=147.45.189.234 ← Подключаемся к вашему PostgreSQL OCR_API_URL=http://147.45.146.17:8001 ← Используем ваш OCR # Или поднимаем локальные (если нужна независимость): docker-compose up redis mysql # Локальные копии ``` --- ## 🎯 Что делаю СЕЙЧАС: **1. Создаю SQL миграции для PostgreSQL (10 мин)** ```sql migrations/ └─ 001_create_logs_tables.sql └─ 002_create_metrics_tables.sql └─ 003_create_cache_tables.sql ``` **2. Создаю сервисы с подключением к ВАШИМ инстансам (1 час)** ```php includes/services/ ├─ PostgresLogger.php ← Логи в ваш PostgreSQL ├─ RedisCache.php ← Кеш в ваш Redis ├─ RabbitMQService.php ← Очереди в ваш RabbitMQ ├─ AIService.php ← OpenRouter ├─ OCRService.php ← Ваш OCR ├─ FlightService.php ← FlightAware └─ S3Service.php ← Ваш S3 ``` **3. Тестирую подключения (10 мин)** ```php test-connections.php ✅ PostgreSQL → OK ✅ Redis → OK ✅ RabbitMQ → OK ✅ MySQL → OK ``` **4. Обновляю форму и API (2 часа)** --- ## 📦 Сводка: | Сервис | Где находится | Что делаю | |--------|---------------|-----------| | **Redis** | localhost:6379 | ✅ Подключаюсь к существующему | | **RabbitMQ** | 185.197.75.249 | ✅ Подключаюсь к существующему | | **PostgreSQL** | 147.45.189.234 | ✅ Подключаюсь к существующему | | **MySQL** | localhost | ✅ Подключаюсь к существующему | | **OCR** | 147.45.146.17:8001 | ✅ Использую существующий | | **S3** | Timeweb Cloud | ✅ Использую существующий | | **Gitea** | 147.45.146.17:3002 | ✅ Создал для Git | **НЕ создаю новых инстансов! Только PHP обёртки!** --- ## 🚀 Начинаю? **Шаги:** 1. ✅ Gitea настроен → ты заходишь и создаёшь юзера 2. ✅ Создаю SQL миграции для PostgreSQL 3. ✅ Создаю все сервисы (подключение к вашим инстансам) 4. ✅ Обновляю форму 5. ✅ Тестируем всё вместе **Согласен? Двигаюсь дальше?** 💪