docker compose определяет .env для подстановки ${VAR} по каталогу
compose-файла (deploy/), а не по текущей директории — repo-root .env,
который использует install.sh и вся документация, молча не подхватывался.
Это и была причина "WARN: LIVEKIT_API_KEY not set" на боевом сервере:
секреты были в .env, но compose их не видел и подставлял небезопасные
дефолты (см. таблицу разведки сервера).
Теперь ставшие обязательными ${VAR:?} в docker-compose.yml (см. предыдущий
коммит) без этого немедленно проваливали бы конфиг на любой из
документированных команд. Добавлен `--env-file .env`/"$ENV_FILE" ко всем
вызовам docker compose в install.sh и в командах из README/docs.
install.sh дополнительно: ensure_default (аналог ensure_secret без генерации
секрета) для новых не-секретных параметров nginx/coturn/livekit
(NGINX_SERVER_NAMES, NGINX_CERT_NAME, LIVEKIT_USE_EXTERNAL_IP,
LIVEKIT_NODE_IP, TURN_EXTERNAL_IP) — дефолты только для локальной
разработки, не перезаписывают значения, заданные вручную на боевом
сервере. Плюс вызов deploy/render-templates.sh перед сборкой/подъёмом
стека.
6.9 KiB
Настройка Dev окружения
1. Требования
- Docker + Docker Compose v2
uv(инструменты backend):brew install uv- Node 20+ (frontend)
2. Переменные окружения
cp .env.example .env
# отредактируйте .env если нужно (defaults работают для локальной разработки)
Пример переменных окружения:
POSTGRES_USER=vidconf
POSTGRES_PASSWORD=dev_password
POSTGRES_DB=vidconf
REDIS_URL=redis://localhost:6379
JWT_SECRET=your-secret-key-here
SEED_ADMIN_EMAIL=admin@example.com
SEED_ADMIN_PASSWORD=admin123
3. Запуск базового стека (без видеоконференций)
docker compose -f deploy/docker-compose.yml --env-file .env up -d
docker compose -f deploy/docker-compose.yml --env-file .env ps
Это запустит:
postgres— База данных PostgreSQLredis— Redis (очередь Celery)backend— FastAPI сервисworker— Celery worker + beat (асинхронные задачи)nginx— Reverse proxy
Backend API доступен:
- Прямой:
http://localhost:8000/api/health - Через Nginx:
http://localhost/api/health
3a. Добавить видеоконференции (профиль media: LiveKit + Coturn)
Для включения видеоконференций с LiveKit SFU + Coturn TURN сервером:
docker compose -f deploy/docker-compose.yml --env-file .env --profile media up -d
Это добавит:
livekit— SFU сервер (слушает наws://localhost:7880для signaling, UDP 52000-52100 для media)coturn— TURN/STUN relay сервер
Проверка LiveKit:
# Проверить что LiveKit доступен
curl http://localhost:7880/health
# Проверить что Coturn слушает
nc -uz localhost 3478 # STUN
Ручная проверка видео:
Откройте два браузерных окна (или вкладки) на http://localhost:5173 (frontend):
- Первое окно: зарегистрируйтесь и войдите
- Оба окна: отройте страницу лобби (комнаты)
- Оба окна: нажмите "Войти" в одну и ту же комнату
- Проверьте видео-потоки в обоих окнах (должны видеть друг друга)
Структура портов:
7880/tcp— LiveKit WebSocket signaling (через nginx/livekit/)7881/tcp— LiveKit HTTPS (опционально)52000-52100/udp— Media stream (RTP/RTCP)3478/tcp,udp— Coturn STUN3479/tcp,udp— Coturn альтернативный5349/tcp,udp— Coturn TURNS (TLS)
4. Миграции БД и тестовые данные
cd backend
uv run alembic upgrade head
uv run python -m scripts.seed
Миграции:
- Создают все 14 таблиц (users, teams, email_verification_tokens, conferences, conference_invitees, guest_access, conference_sessions, conference_participants, session_audio_tracks, phrases, chat_messages, email_deliveries, instance_settings, livekit_webhook_events)
- Включают расширение PostgreSQL
btree_gist(установлено, но текущей схемой не используется)
Идемпотентный сид (scripts.seed):
- Создаёт только 1 админ-пользователя (учётные данные из
.env,SEED_ADMIN_EMAIL/SEED_ADMIN_PASSWORD) - Конференции создаются пользователями динамически — предустановленных данных не требуется
5. Запуск Frontend (Разработка)
cd frontend
npm install
npm run dev
Frontend запущен на http://localhost:5173 с включённым hot-reload.
CORS: Frontend подключается к backend через прокси Vite:
- Запрос
/api/*→ перенаправляется наhttp://localhost:8000/api/* - WebSocket
/ws/*→ перенаправляется наhttp://localhost:8000/ws/* - Это настроено в
frontend/vite.config.ts(режим разработки)
6. Проверка
Проверить, что всё запущено:
# Backend здоров
curl http://localhost:8000/api/health
# Миграции БД применены
cd backend && uv run alembic current
# Frontend доступен
curl http://localhost:5173
# Worker жив (если запущен)
docker compose -f deploy/docker-compose.yml --env-file .env exec worker celery -A workers.celery_app inspect ping
7. Тестирование и проверка качества
# Backend — lint + форматирование
cd backend
uv run ruff check . && uv run ruff format --check .
# Backend — проверка типов
uv run mypy .
# Backend — unit тесты
uv run pytest -q
# Frontend — lint
cd frontend
npm run lint
# Frontend — проверка сборки
npm run build
# Валидация docker-compose
docker compose -f deploy/docker-compose.yml --env-file .env config -q
8. Пресеты инсталлятора
VidConf поддерживает 5 пресетов инсталлятора:
- MVP-ядро (лобби, конференции, календарь, закреплённые, гости) — минимум функций
- +чат — текстовое общение в конференции (WebSocket + Redis pub/sub)
- +AI min (CPU) — транскрибация + суммаризация на уровне
min - +AI средний (CPU опционально GPU) — уровень
medium - +AI макс (GPU обязателен) — уровень
maxдля высокой нагрузки
Для локальной разработки используйте пресет 1 или 3 (с инсталлятором ./install.sh --preset 3).
Детали: docs/deploy/install.md и docs/architecture/adr/004-ai-tier-matrix.md
9. Решение проблем
Backend не может подключиться к БД:
docker compose -f deploy/docker-compose.yml --env-file .env logs postgres
Ошибка подключения Redis:
docker compose -f deploy/docker-compose.yml --env-file .env logs redis
Сборка Frontend не удаётся:
cd frontend
npm install --force # Повтор установки зависимостей
npm run build
Миграции не выполняются:
cd backend
uv run alembic downgrade base
uv run alembic upgrade head
For more details, see README.md.