mirror of
https://gitverse.ru/kpa39l/md2vk.git
synced 2026-09-29 18:05:04 +00:00
84 lines
5.9 KiB
Markdown
84 lines
5.9 KiB
Markdown
# 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). |