Files

84 lines
5.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# md2vk — Реквизиты и доступы
**Цель этого файла — собрать все реквизиты/доступы к смежным сервисам, чтобы не искать их потом.**
Секреты (токены, пароли) в git **не** помещаются — вместо них указывается файл-источник. Пароль
приложения хранится только как bcrypt-хэш (см. ниже).
## Схема продакшена
```
Внешний мир
│ https://md2vk.nixg.ru
▼
vps02 (87.242.100.206) ── Caddy (:443, basic auth + fail2ban)
│ reverse_proxy 10.8.0.2:8420 (WireGuard)
▼
bigbox (10.8.0.2) ── docker-контейнер md2vk ── 127.0.0.1:8420 ── SQLite /opt/md2vk/data/md2vk.db
│
▼ VK API: https://api.vk.com/method/wall.post
```
| Роль | Значение |
|------|----------|
| Прод-домен | `md2vk.nixg.ru` → A 87.242.100.206 (vps02) |
| bigbox | 10.8.0.2 (WireGuard), хост проекта `/opt/md2vk` |
| vps02 | 87.242.100.206, ssh-алиас `vps02` (estorozhenko, sudo по ключу) |
| Caddy | контейнер `caddy` на vps02, конфиг `/opt/caddy/Caddyfile`, reload: `docker exec caddy caddy reload` |
| Порт приложения | 127.0.0.1:8420 на bigbox (контейнер), извне не торчит |
| БД | SQLite `/opt/md2vk/data/md2vk.db` (в docker — `/data/md2vk.db`) |
## Git
| Forge | URL | Логин | Как авторизоваться |
|-------|-----|-------|--------------------|
| **gitverse.ru (истина)** | `git@gitverse.ru:kpa39l/md2vk.git` | **kpa39l** | SSH-ключ `/home/estorozhenko/.ssh/gitverse`; PAT — в `git-tokens.env` |
| gitea.nixg.ru (pull mirror) | `https://gitea.nixg.ru/estorozhenko/md2vk.git` | estorozhenko | токен `GITEA_NIXG_TOKEN` |
- Источник токенов: `/opt/hermes/.hermes/secrets/git-tokens.env` (`source` его, не искать токены по каталогам).
Переменные: `GITVERSE_LOGIN=kpa39l`, `GITVERSE_PAT`, `GITEA_NIXG_API`, `GITEA_NIXG_TOKEN`.
- Gitea локальный API (bigbox): `http://127.0.0.1:3000/api/v1`, токен `GITEA_TOKEN` (там же).
- Правила работы с зеркалами: см. skill `git-forge-management`, reference `gitea-pull-mirror-gitverse.md`
(migrate работает только по HTTPS+PAT: `https://oauth2:<PAT>@gitverse.ru/kpa39l/md2vk.git`).
- `tea` CLI: `~/.local/bin/tea`, логин `gitea.nixg-full` — для работы с gitea.nixg.ru.
## Доступы к сервисам (смежные)
| Сервис | URL/адрес | Доступ |
|--------|-----------|--------|
| DNS nixg.ru | NS: ns1..ns4.jino.ru (Jino) | панель регистратора Jino (кто владеет доменом), A-записи |
| VK API | https://dev.vk.com/ru/reference | открытая документация |
| VK ID (приложение) | https://id.vk.ru/about/business/go/docs/ru/vkid/latest/vk-id/connection/create-application | нужен аккаунт VK для client_id/secret |
| Caddy vps02 | /opt/caddy/Caddyfile | ssh vps02, sudo |
| fail2ban vps02 | jail local, `/etc/fail2ban/` | ssh vps02, sudo |
## Пароль приложения (basic auth на Caddy)
- Пользователь: **estorozhenko**
- Пароль: задан пользователем (md2vk!Ghjcgtrn73 — в менеджере паролей пользователя; в git не хранится).
- В Caddyfile: bcrypt-хэш: `$2a$14$T5gAji7gmg1t3Ifxw0CJy.jat9vpFfOiJIE8j5bnHynEVH1q.QTPS` (генерируется заново при создании записи).
- Генерация: `docker exec caddy caddy hash-password --plaintext '<пароль>'`.
- Блокировка: fail2ban ban IP после 5 неудачных попыток подряд, ручной unban:
`fail2ban-client -c /etc/fail2ban unban <ip>` (на vps02). Детали — [security.md](security.md).
## VK OAuth (для OAuth-флоу VK ID)
- Ссылка авторизации: `https://oauth.vk.com/authorize?client_id=...&scope=wall,offline&redirect_uri=...&response_type=token`
- API: `https://api.vk.com/method/wall.post?access_token=...&owner_id=...&message=...&v=5.199`
- Версия API в конфиге: `VK_API_VERSION=5.199`
- Требуется пользовательский токен (не токен сообщества из настроек группы); для стены группы — токен администратора с `wall`, `photos`, публикация через `from_group=1`.
- Ограничение VK: создать статью (лонгрид) через API нельзя; через `wall.post` можно прикрепить уже опубликованную: `attachments=articleXXX_YYY`. Подробности — [vk-api.md](vk-api.md).
## Файлы секретов проекта (не в git)
| Файл | Что это |
|------|---------|
| `/opt/md2vk/secrets/token_encryption_key` | Fernet-ключ шифрования VK-токенов (генерируется `python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"`) |
| `/opt/md2vk/secrets/estorozhenko_api_key.txt` | API-ключ пользователя estorozhenko (md2vk_...) для вызова API |
| `/opt/hermes/.hermes/secrets/git-tokens.env` | токены gitverse/gitea |
## Наблюдаемость
- Лог авторизации/запросов API: `/opt/md2vk/logs/access.log` (JSONL) и `access.{YYYY-MM-DD}.log` (ротация по дням).
В docker: каталог монтируется как `/logs`. Поля: `ts, ip, method, path, api_key_prefix, user_id, status, success, latency_ms, error`.
- Health: `GET /api/v1/health` → `{"status":"ok"}`.
- Метрики доступности/успешности/активной сессии — собираются из лога (см. deploy.md).