Files
germanandClaude Opus 4.8 3f1c5dbd7b feat(bot): сайт-адаптер единого бота флота + фикс redirect на 1nika.ru
Реализован контракт /api/bot/* из servaki-webhub-bot/SPEC.md:
- GET  /api/bot/health (публичный) -> {ok, site}
- GET  /api/bot/publications?status=&limit= -> список works
- POST /api/bot/publications {title,body,media[]} -> черновик works -> {id}
- POST /api/bot/publications/:id/publish -> published -> {id,url}
- DELETE /api/bot/publications/:id -> удаление (media cascade)
- POST /api/bot/materials (multipart file) -> media -> {id,url}

Аутентификация Authorization: Bearer <BOT_API_TOKEN> (middleware/botAuth,
сравнение постоянного времени; 503 без токена в env, 401 при несовпадении).
Маппинг: публикация<->works, материал<->media. Миграция bot_adapter.sql
разрешает media.type='file'. multer 2.x.

Фикс Яндекс-redirect и домена: nika-gallery.ru -> 1nika.ru в .env.example
(YANDEX_REDIRECT_URI, FRONTEND_URL, SITE_URL, NEXT_PUBLIC_*, SMTP_USER) и
nginx server_name. Секреты не в git (client_id/secret - на Я.Диске).

Добавлен docs/DEPLOY.md (VPS runbook: DNS, .env, SSL, миграции, бот).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-05 23:24:20 +03:00

48 lines
1.9 KiB
Bash

# Database
DATABASE_URL=postgresql://postgres:PASSWORD@db:5432/nika_gallery
POSTGRES_PASSWORD=changeme
# Auth
JWT_SECRET=change-me-jwt-secret
JWT_REFRESH_SECRET=change-me-refresh-secret
# Email
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USER=noreply@1nika.ru
SMTP_PASS=smtp-password
OWNER_EMAIL=nika@example.com
# Telegram
TELEGRAM_BOT_TOKEN=bot:token
TELEGRAM_CHANNEL_ID=@nika_channel
OWNER_TELEGRAM_ID=123456789
# Yandex ID OAuth (вход через Яндекс). Создать приложение: https://oauth.yandex.ru/client/new
# Права: «Доступ к адресу электронной почты» (login:email) + «Доступ к логину, имени и полу» (login:info).
# Redirect URI в кабинете Яндекса должен ТОЧНО совпадать с YANDEX_REDIRECT_URI ниже.
# Значения client_id/secret для 1nika.ru — в YandexDisk/servaki.online/YANDEX-OAUTH-APPS.secret.txt [NIKA ART].
YANDEX_CLIENT_ID=
YANDEX_CLIENT_SECRET=
YANDEX_REDIRECT_URI=https://1nika.ru/api/auth/yandex/callback
# Куда вернуть пользователя с токеном (обычно = SITE_URL). Токен приходит в hash: /club#token=...
FRONTEND_URL=https://1nika.ru
# App
SITE_URL=https://1nika.ru
PORT=4000
NODE_ENV=production
UPLOAD_DIR=/app/uploads
# Bot adapter (единый бот флота @servaki_online_bot → ручки /api/bot/*)
# Сервис-токен: любая длинная случайная строка, генерируется при деплое, тот же
# токен прописывается в реестре бота (sites.api_token). НЕ коммитить реальное значение.
# openssl rand -hex 32
BOT_API_TOKEN=
# Ключ сайта в реестре бота (возвращается в GET /api/bot/health).
BOT_SITE_KEY=nika
# Frontend
NEXT_PUBLIC_API_URL=https://1nika.ru/api
NEXT_PUBLIC_WS_URL=wss://1nika.ru/ws