273 lines
13 KiB
Markdown
273 lines
13 KiB
Markdown
# Проект: docs.a2v.space — Персональная документация
|
||
|
||
## Техническое задание
|
||
|
||
### Каркас
|
||
- Hugo static site generator (уже установлен)
|
||
- Кастомная тема на Bootstrap 5 (не использовать готовые темы, создать свою)
|
||
- Bootstrap 5 через CDN
|
||
- Тёплая цветовая палитра: бежевый (#f5f0e8), терракота (#c4623a), тёплый серый (#6b6560), тёмно-коричневый (#3d3530), акцент — золотистый (#d4a853)
|
||
- Шрифт: системный sans-serif, читаемый, не мелкий
|
||
|
||
### Навигация
|
||
- **Горизонтальное меню в шапке** — 5 разделов: Дневник, База знаний, Планы, Инструкции, Креды
|
||
- **Боковое меню слева** — фильтры/подразделы для каждого раздела (теги, категории, статусы)
|
||
- **Мобильная адаптация** — hamburger menu, боковое меню скрывается, контент на всю ширину
|
||
|
||
### Разделы
|
||
|
||
#### 1. Дневник (Diary) — `/diary/`
|
||
- Формат блога, постинг по датам
|
||
- Каждый пост = один день
|
||
- Внутри поста: записи с указанием времени обсуждения и кратким описанием
|
||
- Timeline-вид на странице списка (дата → превью)
|
||
- Front matter: date, title, tags
|
||
|
||
#### 2. База знаний (Knowledge Base) — `/kb/`
|
||
- Сквозной список статей (одностраничных)
|
||
- Теги для категоризации
|
||
- Боковое меню: список тегов как фильтр
|
||
- Поиск по заголовкам и содержимому (client-side, fuse.js)
|
||
|
||
#### 3. Планы (Plans) — `/plans/`
|
||
- Список планов-карточек
|
||
- Статусы: 🟡 Запланировано, 🟠 В процессе, ✅ Сделано, ❌ Отменено
|
||
- **Ранжирование**: завершённые (✅, ❌) в конце по дате завершения, предстоящие (🟡, 🟠) — ближайшая дата первой
|
||
- На карточке: что планируется, когда планируем, статус, когда и при каких обстоятельствах запланировали (с цитатой автора)
|
||
- Front matter: title, date, plan_date (когда планируется), status (planned/in_progress/done/cancelled), done_date, context_quote
|
||
|
||
#### 4. Инструкции (Guides) — `/guides/`
|
||
- Аналогичен Базе знаний
|
||
- Пошаговые инструкции
|
||
- Теги, боковое меню с фильтрами
|
||
|
||
#### 5. Креды (Credentials) — `/creds/`
|
||
- Одни креды = одна запись
|
||
- **Шифрование содержимого**: пароли хранятся зашифрованными (AES через Web Crypto API)
|
||
- При загрузке страницы — кнопка "Расшифровать", пользователь вводит мастер-пароль
|
||
- Без мастер-пароля видны только названия/описания, значения скрыты
|
||
- Front matter: title, description, service
|
||
- Тело: зашифрованный JSON с полями (user, password, host, port, notes и т.д.)
|
||
|
||
### Шифрование кредов (ВАЖНО!)
|
||
Реализовать через JavaScript Web Crypto API:
|
||
1. При создании записи — JS-скрипт шифрует JSON с кредами мастер-паролем → сохраняет encrypted payload в Markdown
|
||
2. При просмотре — кнопка "Расшифровать" → prompt для мастер-пароля → AES-GCM дешифровка → показать поля
|
||
3. Использовать PBKDF2 для деривации ключа из пароля, AES-256-GCM для шифрования
|
||
4.Salt и IV хранить вместе с payload (base64 encoded)
|
||
|
||
### Поиск
|
||
- Client-side поиск через Fuse.js (CDN)
|
||
- Индекс строится при сборке Hugo (JSON index)
|
||
- Поле поиска в шапке
|
||
|
||
### Адаптивность
|
||
- Mobile-first
|
||
- На мобильных: hamburger menu, без боковой панели, контент на полную ширину
|
||
- На планшетах: боковая панель сворачиваемая
|
||
- На десктопе: полная навигация + боковая панель
|
||
|
||
---
|
||
|
||
## Контент для наполнения
|
||
|
||
### База знаний — API Eversolo
|
||
|
||
Создать статью `/content/kb/eversolo-api.md`:
|
||
|
||
Eversolo T8 — музыкальный стример, IP: 192.168.0.156, порт API: 9529, без авторизации.
|
||
|
||
#### Воспроизведение
|
||
| Действие | URL |
|
||
|----------|-----|
|
||
| Play/Pause | `/ZidooMusicControl/v2/playOrPause` |
|
||
| Следующий трек | `/ZidooMusicControl/v2/playNext` |
|
||
| Предыдущий трек | `/ZidooMusicControl/v2/playLast` |
|
||
| Перемотка (ms) | `/ZidooMusicControl/v2/seekTo?time=<ms>` |
|
||
| Воспроизвести по ID | `/ZidooMusicControl/v2/playMusic?type=4&id=<id>` |
|
||
| Состояние | `/ZidooMusicControl/v2/getState` |
|
||
|
||
#### Громкость
|
||
| Действие | URL |
|
||
|----------|-----|
|
||
| Громкость вверх | `/ZidooControlCenter/RemoteControl/sendkey?key=Key.VolumeUp` |
|
||
| Громкость вниз | `/ZidooControlCenter/RemoteControl/sendkey?key=Key.VolumeDown` |
|
||
| Точная громкость | `/ZidooMusicControl/v2/setDevicesVolume?volume=<0-200>` |
|
||
| Mute | `/ZidooMusicControl/v2/setMuteVolume?isMute=1` |
|
||
| Unmute | `/ZidooMusicControl/v2/setMuteVolume?isMute=0` |
|
||
|
||
#### Входы/Выходы
|
||
| Действие | URL |
|
||
|----------|-----|
|
||
| Получить список | `/ZidooMusicControl/v2/getInputAndOutputList` |
|
||
| Установить вход | `/ZidooMusicControl/v2/setInputList?tag=<tag>&index=<n>` |
|
||
| Установить выход | `/ZidooMusicControl/v2/setOutInputList?tag=<tag>&index=<n>` |
|
||
| Теги выхода: RCA, XLRRCA, XLR, HDMI, SPDIF, USB |
|
||
|
||
#### Дисплей
|
||
| Действие | URL |
|
||
|----------|-----|
|
||
| Яркость экрана (get) | `/SystemSettings/displaySettings/getScreenBrightness` |
|
||
| Яркость экрана (set) | `/SystemSettings/displaySettings/setScreenBrightness?index=<0-115>` |
|
||
| Яркость ручки (get) | `/SystemSettings/displaySettings/getKnobBrightness` |
|
||
| Яркость ручки (set) | `/SystemSettings/displaySettings/setKnobBrightness?index=<0-255>` |
|
||
| VU-режим (get) | `/SystemSettings/displaySettings/getVUModeList` |
|
||
| VU-режим (set) | `/SystemSettings/displaySettings/setVUMode?index=<n>` |
|
||
| Спектр (get) | `/SystemSettings/displaySettings/getSpPlayModeList` |
|
||
| Спектр (set) | `/SystemSettings/displaySettings/setSpPlayModeList?index=<n>` |
|
||
| Переключить VU/Спектр | `/ZidooMusicControl/v2/changVUDisplay?openType=<0|1>` |
|
||
|
||
#### Питание
|
||
| Действие | URL |
|
||
|----------|-----|
|
||
| Параметры питания | `/ZidooMusicControl/v2/getPowerOption` |
|
||
| Перезагрузка | `/ZidooMusicControl/v2/setPowerOption?tag=reboot` |
|
||
| Выключение | `/ZidooMusicControl/v2/setPowerOption?tag=poweroff` |
|
||
| Переключить экран | `/ZidooMusicControl/v2/setPowerOption?tag=screen` |
|
||
| Включить экран | `/ZidooControlCenter/RemoteControl/sendkey?key=Key.Screen.ON` |
|
||
| Выключить экран | `/ZidooControlCenter/RemoteControl/sendkey?key=Key.Screen.OFF` |
|
||
|
||
#### Поиск
|
||
| Поиск | URL |
|
||
|-------|-----|
|
||
| По трекам | `/ZidooMusicControl/v2/searchMusicV2?key=<text>&start=0&count=100` |
|
||
| По артистам | `/ZidooMusicControl/v2/searchArtistV2?key=<text>&start=0&count=100` |
|
||
| По альбомам | `/ZidooMusicControl/v2/searchAlbumV2?key=<text>&start=0&count=100` |
|
||
|
||
#### Обложки и устройство
|
||
| Действие | URL |
|
||
|----------|-----|
|
||
| Обложка по ID | `/ZidooMusicControl/v2/getImage?id=<song_id>&target=16` |
|
||
| Модель устройства | `/ControlCenter/getModel` |
|
||
|
||
Источники:
|
||
- Форум Zidoo: https://forum.zidoo.tv/index.php?threads/some-api.96983/
|
||
- HA интеграция: https://github.com/hchris1/Eversolo/blob/main/custom_components/eversolo/api.py
|
||
|
||
---
|
||
|
||
### Инструкции
|
||
|
||
#### Инструкция: Подключение claw.a2v.space (OpenClaw)
|
||
|
||
**Архитектура:** Mac Studio (192.168.0.37:18789) → autossh SSH-туннель → VPS 95.163.232.9:8080 → nginx HTTPS → https://claw.a2v.space
|
||
|
||
**Шаги:**
|
||
1. DNS: A-запись claw.a2v.space → 95.163.232.9 (ns1/ns2.hosting.reg.ru)
|
||
2. Mac Studio: OpenClaw запущен на порту 18789, конфиг ~/.openclaw/openclaw.json
|
||
3. SSH-туннель: launchd plist `~/Library/LaunchAgents/com.openclaw.sshtunnel.plist` с `-R 8080:localhost:18789`
|
||
4. VPS nginx конфиг:
|
||
- listen 80 → redirect to https
|
||
- listen 443 ssl, cert `/etc/letsencrypt/live/claw.a2v.space/`
|
||
- proxy_pass http://127.0.0.1:8080
|
||
- proxy_set_header Host $host, X-Real-IP, X-Forwarded-For, X-Forwarded-Proto
|
||
5. SSL: certbot certonly --nginx -d claw.a2v.space
|
||
6. OpenClaw config: allowedOrigins ["https://claw.a2v.space"], trustedProxies
|
||
|
||
#### Инструкция: Подключение code.a2v.space (OpenCode)
|
||
|
||
**Порт:** 4096, pm2 процесс "opencode"
|
||
**SSH-туннель:** `-R 8081:localhost:4096`
|
||
**nginx:** proxy_pass http://127.0.0.1:8081
|
||
**SSL:** /etc/letsencrypt/live/code.a2v.space/
|
||
|
||
#### Инструкция: Подключение sand.a2v.space (Leadera Project)
|
||
|
||
**Порты:** Frontend 4200 (Angular, pm2 leadera-fe), Backend 8080 (Go, pm2 leadera-api)
|
||
**SSH-туннель:** `-R 8082:localhost:4200 -R 8083:localhost:8080`
|
||
**nginx:** location / → proxy_pass :8082, location /api → proxy_pass :8083
|
||
**SSL:** /etc/letsencrypt/live/sand.a2v.space/
|
||
**БД:** PostgreSQL 16 в Docker (Colima), container app-leadera-db
|
||
|
||
#### Инструкция: Настройка VPS как реверс-прокси
|
||
|
||
Общая схема: Mac Studio (локальная сеть) → autossh (SSH-туннели) → VPS 95.163.232.9 (Debian) → nginx (HTTPS reverse proxy) → интернет
|
||
|
||
**Что нужно на VPS:**
|
||
- nginx + certbot (Let's Encrypt)
|
||
- SSH-доступ с ключами с Mac Studio
|
||
- Для каждого домена: server block с SSL, proxy_pass на localhost-порт туннеля
|
||
|
||
**Что нужно на Mac Studio:**
|
||
- autossh через launchd (com.openclaw.sshtunnel.plist)
|
||
- Один plist с несколькими -R флагами для всех сервисов
|
||
|
||
---
|
||
|
||
### Креды (зашифровать!)
|
||
|
||
#### VPS reg.ru
|
||
- **Сервис:** VPS хостинг (реверс-прокси)
|
||
- **IP:** 95.163.232.9
|
||
- **User:** root
|
||
- **Auth:** SSH ключ
|
||
|
||
#### VPN VPS
|
||
- **Сервис:** VPN сервер
|
||
- **IP:** 185.234.64.52
|
||
- **User:** root
|
||
- **Password:** lO6kC9gY7r
|
||
- **VPN:** Amnezia (xray порт 443, AWG порт 46002)
|
||
|
||
#### Mac Studio — leadera-api БД (локальная)
|
||
- **Сервис:** PostgreSQL (Docker)
|
||
- **Host:** localhost:5432
|
||
- **User:** leadera
|
||
- **Password:** popoloka16
|
||
- **Database:** leadera
|
||
|
||
#### Mac Studio — leadera-api БД (docker-compose)
|
||
- **Сервис:** PostgreSQL (docker-compose)
|
||
- **Host:** localhost:5432
|
||
- **User:** postgres
|
||
- **Password:** password
|
||
- **Database:** it_landscape
|
||
|
||
---
|
||
|
||
### Планы
|
||
|
||
#### Настроить интеграцию Ollama с OpenClaw
|
||
- **Статус:** 🟡 Запланировано
|
||
- **Дата:** TBD
|
||
- **Контекст:** Добавлен qwen3.5:9b в openclaw.json, но модель не появилась в openclaw models list. Отложено по решению Антона.
|
||
|
||
#### Реализовать управление Eversolo из OpenClaw
|
||
- **Статус:** 🟡 Запланировано
|
||
- **Дата:** TBD
|
||
- **Контекст:** API изучен, записан в TOOLS.md. Проблема: нет доступа к LAN из sandbox OpenClaw.
|
||
|
||
---
|
||
|
||
### Дневник — сегодня (29.03.2026)
|
||
|
||
- 20:03 — Настроили Angular + Go проекты (leadera) через pm2, удалили proxy.conf, подняли PostgreSQL в Docker
|
||
- 20:31 — Изучили API Eversolo T8 — полный список REST-эндпоинтов для управления музыкой
|
||
- 20:49 — Обсудили важность записи контекста в файлы для сохранения памяти между сессиями
|
||
- 21:13 — Начали проект docs.a2v.space — персональная документация на Hugo
|
||
|
||
---
|
||
|
||
## Структура Hugo
|
||
|
||
```
|
||
content/
|
||
diary/
|
||
2026-03-29.md
|
||
kb/
|
||
eversolo-api.md
|
||
plans/
|
||
ollama-openclaw.md
|
||
eversolo-control.md
|
||
guides/
|
||
claw-a2v-space.md
|
||
code-a2v-space.md
|
||
sand-a2v-space.md
|
||
vps-reverse-proxy.md
|
||
creds/
|
||
vps-reg-ru.md
|
||
vpn-vps.md
|
||
leadera-db-local.md
|
||
leadera-db-docker.md
|
||
```
|