md2vk — Реквизиты и доступы
Цель этого файла — собрать все реквизиты/доступы к смежным сервисам, чтобы не искать их потом.
Секреты (токены, пароли) в git не помещаются — вместо них указывается файл-источник. Пароль
приложения хранится только как bcrypt-хэш (см. ниже).
Схема продакшена
| Роль |
Значение |
| Прод-домен |
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.
Доступы к сервисам (смежные)
Пароль приложения (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.
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.
Файлы секретов проекта (не в 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).