Реализован контракт /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>
48 lines
1.9 KiB
Bash
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
|