Skip to content

lamanoff/telegram-auc

Repository files navigation

Crypto Auction Platform

Платформа для проведения многораундовых криптовалютных аукционов с поддержкой TON и USDT. (Video demo)

🌐 Демо: https://lamanoff-telegram-auc-a9a8.twc1.net/

📖 Подробная спецификация механики: AUCTION_MECHANICS.md

Быстрый старт

docker-compose up -d

После запуска:

Учётные данные по умолчанию:

  • Логин: admin
  • Пароль: admin123

Измените пароль админа в продакшене через переменные ADMIN_USERNAME и ADMIN_PASSWORD

Настройка Telegram виджета для локального тестирования

Платформа поддерживает аутентификацию через Telegram Login Widget. Для локального тестирования необходимо:

  1. Создайте бота через @BotFather в Telegram:

    • Отправьте команду /newbot и следуйте инструкциям
    • Сохраните полученный токен
  2. Настройте домен в BotFather:

    • Отправьте команду /setdomain боту BotFather
    • Выберите вашего бота
    • Укажите домен: 127.0.0.1 (не localhost — BotFather не принимает localhost)
    • Также можно указать порт: 127.0.0.1:80 или 127.0.0.1:3000 (в зависимости от вашей конфигурации)
  3. Настройте переменные окружения:

    • Создайте файл .env (скопируйте из env.example)
    • Укажите TELEGRAM_BOT_TOKEN — токен бота от BotFather
    • Укажите TELEGRAM_BOT_USERNAME — username вашего бота (без @)
  4. Запустите проект и заходите по IP-адресу:

    • Используйте http://127.0.0.1 вместо http://localhost
    • Telegram виджет будет работать только при доступе через указанный в BotFather домен

Важно: Для продакшена укажите ваш реальный домен в BotFather (например, yourdomain.com).

Возможности

Аукционы

  • Многораундовая система: Аукционы состоят из нескольких раундов, в каждом раунде определяется группа победителей
  • Автоматическое управление: Автоматический запуск по расписанию, завершение раундов, переход между раундами
  • Защита от снипинга: Автоматическое продление раунда при ставке в последние секунды
  • Резервная цена: Опциональная минимальная цена для определения победителей
  • Реальное время: WebSocket обновления для мгновенного отображения изменений

Ставки

  • Одна активная ставка: Каждый пользователь может иметь только одну активную ставку на аукцион
  • Только повышение: Ставки можно только увеличивать
  • Блокировка средств: Средства блокируются при размещении ставки
  • Минимальная ставка: Динамически рассчитывается на основе текущих топ-ставок
  • Асинхронная обработка: Ставки обрабатываются через очереди для высокой производительности

Финансы

  • Поддержка валют: TON и USDT
  • Точные расчеты: Использование bigint для работы с минимальными единицами
  • Блокировка баланса: Разделение на доступный и заблокированный баланс
  • Интеграция CryptoBot: Депозиты и выводы через CryptoBot API
  • История транзакций: Полный аудит всех финансовых операций

Аналитика

Метрики аукционов

  • Количество участников на аукцион
  • Максимальная ставка
  • Средняя ставка
  • Объем торгов (сумма всех выигрышных ставок)
  • Количество завершенных раундов
  • Процент проданных лотов

Метрики пользователей

  • Общий баланс по валютам
  • Заблокированные средства
  • История транзакций
  • История ставок
  • Выигранные лоты

Метрики системы

  • Количество активных аукционов
  • Количество пользователей
  • Общее количество ставок
  • Общее количество транзакций
  • Статистика очередей (ожидающие, активные, завершенные, неудачные)

Админ панель

  • Просмотр всех аукционов с детальной статистикой
  • Просмотр всех ставок по аукциону
  • Просмотр истории событий
  • Просмотр всех транзакций
  • Аналитика по объемам торгов
  • Управление выводами

Производительность

  • Очереди BullMQ: Асинхронная обработка ставок до 4000+ операций в секунду
  • Redis кеширование: Быстрый доступ к данным и rate limiting
  • Оптимизированные индексы: Быстрые запросы к базе данных
  • MongoDB транзакции: Гарантия консистентности финансовых операций
  • WebSocket: Мгновенные обновления без polling

Аутентификация

  • JWT аутентификация с валидацией формата
  • Telegram Login Widget — вход через Telegram без пароля
  • Автоматическое создание аккаунта при первом входе через Telegram
  • Связывание Telegram аккаунта с существующим пользователем

Безопасность

  • JWT аутентификация с валидацией формата
  • Верификация Telegram данных через HMAC-SHA256
  • Rate limiting на всех критичных эндпоинтах
  • Валидация всех входных данных через Zod
  • Защита от NoSQL инъекций через валидацию ObjectId
  • Защита от XSS через санитизацию HTML
  • Защита от timing attacks при проверке паролей
  • CORS с белым списком разрешенных источников
  • CSP заголовки через Helmet
  • Безопасное хранение паролей (bcrypt, минимум 8 символов)
  • Ограничение размера запросов
  • Валидация всех параметров URL
  • Защита от утечки информации в логах

Технологии

Backend:

  • Node.js + TypeScript
  • Express.js
  • MongoDB + Mongoose
  • Redis + BullMQ
  • WebSocket

Frontend:

  • Vue 3 (Composition API)
  • Vue Router
  • Pinia
  • Axios
  • WebSocket

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

  • Docker + Docker Compose
  • Nginx
  • MongoDB 8.2
  • Redis 8.4

API

Аутентификация

  • POST /api/register - Регистрация
  • POST /api/login - Вход
  • POST /api/telegramAuth - Авторизация через Telegram
  • GET /api/profile - Профиль пользователя

Аукционы

  • GET /api/auctions - Список аукционов
  • GET /api/auctions/:id - Детали аукциона
  • POST /api/auctions/:id/bid - Разместить ставку
  • GET /api/auctions/:id/mybid - Моя ставка
  • GET /api/auctions/:id/history - История раундов
  • GET /api/auctions/:id/items - Проданные лоты

Финансы

  • POST /api/deposit - Создать депозит
  • POST /api/withdraw - Вывести средства
  • GET /api/transactions - История транзакций

Админ

  • POST /api/auctions - Создать аукцион
  • PUT /api/auctions/:id - Обновить аукцион
  • POST /api/auctions/:id/cancel - Отменить аукцион
  • GET /api/admin/analytics - Аналитика
  • GET /api/admin/logs - Логи системы
  • GET /api/admin/transactions - Все транзакции
  • GET /api/admin/events - События системы

WebSocket

Подключение: ws://localhost:3000/ws?auctionId=<id>&token=<jwt>

События:

  • snapshot - Полное состояние при подключении
  • bid.updated - Обновление ставки
  • bid.outbid - Вытеснение из топ-списка
  • round.closed - Закрытие раунда
  • auction.started - Запуск аукциона
  • auction.cancelled - Отмена аукциона
  • viewer.count - Количество зрителей

Нагрузочное тестирование

Платформа включает инструменты для проверки производительности и стабильности под нагрузкой.

Подготовка к автоматическому тестированию

Шаг 1: Установка зависимостей

Убедитесь, что установлены все зависимости проекта:

npm install

Шаг 2: Настройка переменных окружения

Создайте файл .env в корне проекта (можно скопировать из env.example):

cp env.example .env

Обязательные переменные для тестирования:

  • JWT_SECRET - Секретный ключ для JWT (минимум 32 символа). Для тестирования можно использовать любой длинный случайный ключ.

Опциональные переменные (для полного функционала):

  • CRYPTOBOT_TOKEN - Токен CryptoBot API (подпись webhook проверяется автоматически через токен)
  • TELEGRAM_BOT_TOKEN - Токен Telegram бота (если используется Telegram авторизация)

Для получения CryptoBot токена:

  1. Зарегистрируйтесь на crypto bot
  2. Перейдите в раздел "API"
  3. Создайте новый токен
  4. Скопируйте токен в .env файл

Пример .env файла для тестирования:

JWT_SECRET=your_super_secret_jwt_key_minimum_32_characters_long
MONGO_URI=mongodb://mongo:27017/auction
REDIS_URL=redis://redis:6379
CRYPTOBOT_TOKEN=123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
PORT=3000

Примечание: Для базового тестирования достаточно только JWT_SECRET. CryptoBot токены нужны только если вы хотите протестировать функционал депозитов/выводов.

Шаг 3: Запуск системы

Запустите все сервисы через Docker Compose:

docker-compose up -d

Проверьте, что все сервисы запущены:

docker-compose ps

Должны быть запущены:

  • auction-mongo (MongoDB)
  • auction-redis (Redis)
  • auction-backend (Backend API)
  • auction-frontend (Frontend)

Дождитесь полной инициализации (обычно 10-30 секунд). Проверьте логи:

docker-compose logs backend

Когда увидите Server listening on 3000, система готова.

Шаг 4: Проверка доступности

Убедитесь, что API доступен:

curl http://localhost:3000/health

Должен вернуться ответ: {"status":"ok"}

Автоматизированное тестирование (рекомендуется)

Полностью автоматизированный скрипт, который сам создает аукцион, запускает тесты и выдает отчет. Работает как локально, так и с удалённым сервером (облаком) — не требует прямого доступа к MongoDB.

npm run auto-test

Что делает скрипт:

  1. ✅ Проверяет доступность API сервера
  2. ✅ Авторизуется как администратор
  3. Тесты Anti-Snipe (защита от снайпинга):
    • Проверка продления раунда при ставке в последние секунды
    • Проверка множественного продления при серии ставок
    • Проверка что ставка ВНЕ окна anti-snipe не продлевает раунд
  4. ✅ Создает тестовых пользователей с балансом (через API)
  5. ✅ Тесты производительности:
    • WebSocket подключения
    • Одновременные регистрации
    • RPS (запросов в секунду)
    • Одновременные ставки
  6. ✅ Выдает подробный отчет с метриками и рекомендациями

Параметры (через переменные окружения или аргументы командной строки):

Параметры подключения:

  • API_BASE - URL сервера API (по умолчанию: http://localhost:3000)
  • WS_BASE - URL WebSocket (по умолчанию: автоматически из API_BASE)
  • ADMIN_USERNAME - Логин администратора (по умолчанию: admin)
  • ADMIN_PASSWORD - Пароль администратора (по умолчанию: admin123)

Параметры Anti-Snipe:

  • ANTI_SNIPE_WINDOW_SEC - Окно anti-snipe в секундах (по умолчанию: 30)
  • ANTI_SNIPE_EXTEND_SEC - Продление раунда в секундах (по умолчанию: 30)

Примеры использования:

Интерактивный режим (рекомендуется):

npm run auto-test

Скрипт спросит:

═══════════════════════════════════════════════════════════════════════════════
       🚀 НАСТРОЙКА ТЕСТИРОВАНИЯ АУКЦИОННОЙ СИСТЕМЫ
═══════════════════════════════════════════════════════════════════════════════

  Введите параметры подключения к серверу.

  💡 Совет: Нажмите Enter для значения по умолчанию (в скобках)

  🌐 URL сервера API [http://localhost:3000]: https://auction.example.com
  📡 WebSocket URL: wss://auction.example.com

  👤 Логин администратора [admin]: myadmin
  🔑 Пароль администратора [********]: 
     (введите новый или нажмите Enter для значения по умолчанию): 

  ⚙️  Настройки Anti-Snipe (защита от снайпинга):
     Окно anti-snipe в секундах [30]: 
     Продление раунда в секундах [30]: 

Автоматический режим (через переменные окружения):

API_BASE=https://auction.example.com ADMIN_USERNAME=myadmin ADMIN_PASSWORD=mypassword npm run auto-test

В Windows PowerShell:

$env:API_BASE="https://auction.example.com"; $env:ADMIN_USERNAME="myadmin"; $env:ADMIN_PASSWORD="mypassword"; npm run auto-test

В Windows CMD:

set API_BASE=https://auction.example.com
set ADMIN_USERNAME=myadmin
set ADMIN_PASSWORD=mypassword
npm run auto-test

Пример полного запуска (локально):

  1. Убедитесь, что система запущена:
docker-compose up -d
  1. Дождитесь готовности (проверьте логи):
docker-compose logs -f backend
# Нажмите Ctrl+C когда увидите "Server listening on 3000"
  1. Запустите автоматическое тестирование:
npm run auto-test
  1. Дождитесь завершения (обычно 2-5 минут)

  2. Изучите итоговый отчет

Пример вывода:

═══════════════════════════════════════════════════════════════════════════════
                    🛡️ ОТЧЁТ О ТЕСТАХ ANTI-SNIPE 🛡️
═══════════════════════════════════════════════════════════════════════════════

  ✅ Anti-Snipe Basic
     Раунд продлён на 30с как ожидалось

  ✅ Anti-Snipe Multiple Bids
     Каждая ставка продлила раунд. Общее продление: 60с

  ✅ Anti-Snipe Outside Window
     Раунд не продлён, как и ожидалось

────────────────────────────────────────────────────────────────────────────────
  Итого: 3 пройдено, 0 провалено
═══════════════════════════════════════════════════════════════════════════════

Что будет в отчете:

  • ✅ Состояние системы (API, WebSocket, БД, Redis)
  • 📊 Метрики нагрузочного теста (количество ботов, ставок, WebSocket подключений)
  • ⚡ Метрики стресс-теста (RPS, время отклика, перцентили P95/P99)
  • 📈 Выводы о производительности и стабильности системы

Устранение проблем при запуске тестов

Ошибка "API недоступен":

  • Убедитесь, что Docker Compose запущен: docker-compose ps
  • Проверьте логи бэкенда: docker-compose logs backend
  • Убедитесь, что порт 3000 не занят другим процессом

Ошибка "Не удалось назначить роль администратора":

  • Убедитесь, что MongoDB доступна на localhost:27017
  • Или передайте ADMIN_TOKEN существующего администратора
  • Или создайте админа вручную через MongoDB:
docker exec -it auction-mongo mongosh auction
db.users.updateOne({username: "your_username"}, {$set: {role: "admin"}})

Ошибка подключения к MongoDB:

  • Проверьте, что контейнер MongoDB запущен: docker ps | grep mongo
  • Проверьте логи: docker-compose logs mongo
  • Убедитесь, что MONGO_URI указан правильно

Медленное выполнение тестов:

  • Увеличьте ресурсы Docker (CPU, память)
  • Уменьшите количество ботов или длительность теста
  • Проверьте использование ресурсов: docker stats

WebSocket подключения не устанавливаются:

  • Проверьте, что порт 3000 доступен
  • Убедитесь, что Nginx правильно проксирует WebSocket (если используется)
  • Проверьте логи бэкенда на наличие ошибок

Ручное тестирование

Если нужно протестировать существующий аукцион вручную:

  1. Запустите систему:
docker-compose up -d
  1. Создайте тестовый аукцион через админ панель или API:
curl -X POST http://localhost:3000/api/auctions \
  -H "Authorization: Bearer <admin_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Test Auction",
    "currency": "TON",
    "roundsCount": 5,
    "itemsPerRound": 10,
    "startTime": "2026-01-15T12:00:00Z",
    "firstRoundDurationSec": 300,
    "roundDurationSec": 300,
    "minIncrement": "0.1",
    "startingPrice": "1"
  }'
  1. Получите ID созданного аукциона из ответа

Тест 1: Симуляция реалистичного поведения (Simulate Bidding)

Симулирует реалистичное поведение пользователей на аукционах с разными стратегиями ставок. Идеально подходит для визуального наблюдения за работой системы в реальном времени.

npm run simulate-bidding

Параметры:

  • NUM_USERS - Количество симулируемых пользователей (по умолчанию: 10)
  • AUCTION_ID - ID аукциона (если не указан, будет найден активный или запланированный)
  • ADMIN_USERNAME - Логин администратора (по умолчанию: admin)
  • ADMIN_PASSWORD - Пароль администратора (по умолчанию: admin123)
  • CREATE_AUCTION_DELAY_SEC - Задержка перед началом созданного аукциона в секундах (по умолчанию: 10)
  • API_BASE - Базовый URL API (по умолчанию: http://localhost:3000)
  • WS_BASE - Базовый URL WebSocket (по умолчанию: ws://localhost:3000)

Стратегии пользователей:

  • aggressive - Агрессивные ставки, быстрые интервалы (2-5 сек)
  • conservative - Консервативные ставки, медленные интервалы (8-20 сек)
  • moderate - Умеренные ставки, средние интервалы (5-13 сек)
  • sniper - Минимальные ставки, очень медленные интервалы (15-35 сек)

Что делает скрипт:

  1. Входит как администратор
  2. Находит активный аукцион (или ждет начала запланированного)
  3. Если аукционов нет - автоматически создает новый с реалистичными параметрами
  4. Создает пользователей с разными стратегиями
  5. Устанавливает им балансы через админский API
  6. Начинает симуляцию торгов в реальном времени
  7. Выводит статистику каждые 30 секунд

Автоматическое создание аукционов:

  • Скрипт автоматически создает аукцион, если не найдено активных или запланированных
  • Используются реалистичные названия и описания
  • Разные варианты конфигураций (валюта, количество раундов, длительность, цены)
  • Аукцион начинается через 10-30 секунд после создания (настраивается через CREATE_AUCTION_DELAY_SEC)

Примеры использования:

Базовый запуск (10 пользователей):

npm run simulate-bidding

Больше пользователей (20):

NUM_USERS=20 npm run simulate-bidding

С указанным аукционом:

AUCTION_ID=<id> npm run simulate-bidding

Рекомендации:

  • Откройте интерфейс системы в браузере для визуального наблюдения
  • Скрипт автоматически найдет активный аукцион, если не указан AUCTION_ID
  • Если аукционов нет, скрипт автоматически создаст новый с реалистичными параметрами
  • Для остановки нажмите Ctrl+C

Примеры с автоматическим созданием аукциона:

Создать аукцион, который начнется сразу:

CREATE_AUCTION_DELAY_SEC=0 npm run simulate-bidding

Создать аукцион с задержкой 30 секунд:

CREATE_AUCTION_DELAY_SEC=30 npm run simulate-bidding

Тест 2: Симуляция ботов (Load Test)

Симулирует реалистичное поведение множества пользователей с WebSocket подключениями и автоматическими ставками.

Примечание: Для автоматизированного тестирования используйте npm run auto-test

AUCTION_ID=<auction_id> NUM_BOTS=50 BID_INTERVAL_MS=500 npm run load-test

Параметры:

  • AUCTION_ID - ID аукциона (обязательно)
  • NUM_BOTS - Количество ботов (по умолчанию: 50)
  • BID_INTERVAL_MS - Интервал между ставками в миллисекундах (по умолчанию: 500)
  • API_BASE - Базовый URL API (по умолчанию: http://localhost:3000)
  • WS_BASE - Базовый URL WebSocket (по умолчанию: ws://localhost:3000)

Что тестируется:

  • Одновременные WebSocket подключения
  • Автоматическое размещение ставок
  • Обработка обновлений в реальном времени
  • Стабильность при высокой активности

Примеры:

Легкая нагрузка (10 ботов):

AUCTION_ID=<id> NUM_BOTS=10 BID_INTERVAL_MS=1000 npm run load-test

Средняя нагрузка (50 ботов):

AUCTION_ID=<id> NUM_BOTS=50 BID_INTERVAL_MS=500 npm run load-test

Высокая нагрузка (100+ ботов):

AUCTION_ID=<id> NUM_BOTS=100 BID_INTERVAL_MS=300 npm run load-test

Тест 3: Стресс-тест (Stress Test)

Проверяет способность системы обрабатывать большое количество одновременных запросов.

Примечание: Для автоматизированного тестирования используйте npm run auto-test

AUCTION_ID=<auction_id> CONCURRENT_REQUESTS=100 TOTAL_REQUESTS=1000 npm run stress-test

Параметры:

  • AUCTION_ID - ID аукциона (обязательно)
  • CONCURRENT_REQUESTS - Количество одновременных запросов (по умолчанию: 100)
  • TOTAL_REQUESTS - Общее количество запросов (по умолчанию: 1000)
  • API_BASE - Базовый URL API (по умолчанию: http://localhost:3000)

Что тестируется:

  • Пропускная способность API
  • Время отклика под нагрузкой
  • Процент успешных запросов
  • Обработка ошибок

Метрики:

  • Requests per second (RPS)
  • Среднее время отклика
  • Минимальное/максимальное время отклика
  • P95 и P99 перцентили
  • Процент успешных запросов

Примеры:

Базовый тест (100 одновременных, 1000 запросов):

AUCTION_ID=<id> CONCURRENT_REQUESTS=100 TOTAL_REQUESTS=1000 npm run stress-test

Экстремальная нагрузка (200 одновременных, 5000 запросов):

AUCTION_ID=<id> CONCURRENT_REQUESTS=200 TOTAL_REQUESTS=5000 npm run stress-test

Тест 4: Защита от снипинга

Проверка работы механизма продления раунда при ставках в последние секунды.

  1. Создайте аукцион с коротким раундом (30-60 секунд)
  2. Запустите ботов с высокой частотой ставок:
AUCTION_ID=<id> NUM_BOTS=20 BID_INTERVAL_MS=100 npm run load-test
  1. Наблюдайте за автоматическим продлением раунда при ставках в последние 30 секунд

Тест 5: Конкурентные ставки

Проверка корректности обработки одновременных ставок от разных пользователей.

AUCTION_ID=<id> CONCURRENT_REQUESTS=50 TOTAL_REQUESTS=500 npm run stress-test

Что проверяется:

  • Корректность блокировки средств
  • Отсутствие дублирования ставок
  • Правильность расчета минимальной ставки
  • Консистентность данных в базе

Мониторинг во время тестов

Логи бэкенда:

docker-compose logs -f backend

Логи очередей: Проверьте статистику очередей через админ API:

curl http://localhost:3000/api/admin/logs

Метрики базы данных:

docker exec -it auction-mongo mongosh auction --eval "db.stats()"

Метрики Redis:

docker exec -it auction-redis redis-cli INFO stats

Ожидаемые результаты

Load Test:

  • Успешное подключение всех ботов через WebSocket
  • Стабильная обработка ставок без потерь
  • Корректное обновление топ-списка в реальном времени
  • Отсутствие ошибок подключения

Stress Test:

  • Пропускная способность: 1000+ запросов/сек
  • Среднее время отклика: < 100ms
  • P95 время отклика: < 500ms
  • P99 время отклика: < 1000ms
  • Процент успешных запросов: > 95%

Рекомендации

  1. Постепенное увеличение нагрузки: Начните с малых значений и постепенно увеличивайте
  2. Мониторинг ресурсов: Следите за использованием CPU и памяти
  3. Тестирование на разных этапах: Тестируйте как пустые аукционы, так и с активными ставками
  4. Проверка восстановления: Останавливайте и запускайте сервисы во время тестов
  5. Тестирование в продакшн-подобной среде: Используйте аналогичные ресурсы

Устранение проблем

Высокий процент ошибок:

  • Увеличьте ресурсы контейнеров
  • Проверьте настройки rate limiting
  • Убедитесь в достаточном количестве воркеров очередей

Медленные ответы:

  • Проверьте индексы базы данных
  • Оптимизируйте запросы
  • Увеличьте количество воркеров BullMQ

Проблемы с WebSocket:

  • Проверьте настройки Nginx proxy
  • Убедитесь в достаточных таймаутах
  • Проверьте лимиты подключений

Конфигурация

Переменные окружения (файл .env):

  • JWT_SECRET - Секретный ключ для JWT (минимум 32 символа)
  • MONGO_URI - URI подключения к MongoDB
  • REDIS_URL - URL подключения к Redis
  • CRYPTOBOT_TOKEN - Токен CryptoBot API (опционально, подпись webhook проверяется автоматически через токен)
  • TELEGRAM_BOT_TOKEN - Токен Telegram бота от BotFather (опционально, для Telegram виджета)
  • TELEGRAM_BOT_USERNAME - Username бота без @ (опционально, для Telegram виджета)
  • FRONTEND_URL - URL фронтенда для CORS (можно несколько через запятую)
  • PORT - Порт сервера (по умолчанию 3000)

Архитектура

Система построена на микросервисной архитектуре с использованием очередей для обработки высокой нагрузки:

  1. API слой - Express.js сервер с REST API и WebSocket
  2. Очереди - BullMQ для асинхронной обработки ставок
  3. Кеширование - Redis для rate limiting и кеширования
  4. База данных - MongoDB для хранения данных
  5. Фронтенд - Vue.js SPA с Nginx

Все компоненты изолированы в Docker контейнерах и общаются через внутреннюю сеть Docker.

Мониторинг

Система предоставляет следующие метрики для мониторинга:

  • Статус очередей (ожидающие, активные, завершенные задачи)
  • Количество подключенных WebSocket клиентов
  • Время обработки запросов
  • Количество ошибок
  • Использование ресурсов базы данных

Развертывание

Проект полностью готов к развертыванию через Docker Compose. Все зависимости и конфигурации включены.

Для продакшена рекомендуется:

  • Настроить SSL/TLS
  • Использовать внешние MongoDB и Redis
  • Настроить мониторинг и логирование
  • Использовать секреты Docker для чувствительных данных

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors