daily update 2026-03-29

This commit is contained in:
Агальцов Антон
2026-03-30 00:02:10 +03:00
commit 690abf379c
145 changed files with 14399 additions and 0 deletions
Vendored
BIN
View File
Binary file not shown.
View File
+272
View File
@@ -0,0 +1,272 @@
# Проект: 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
```
+5
View File
@@ -0,0 +1,5 @@
+++
date = '{{ .Date }}'
draft = true
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
+++
BIN
View File
Binary file not shown.
+46
View File
@@ -0,0 +1,46 @@
---
title: "docs.a2v.space Basic Auth"
date: 2026-03-29
tags: ["docs", "authentication", "nginx"]
description: "Учетные данные для доступа к docs.a2v.space"
---
## Basic Authentication
```bash
Username: agaltsovav
Password: Magamet787!
```
## Конфигурация Nginx
```nginx
server {
listen 8091;
server_name docs.a2v.space;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.htpasswd;
}
```
## Доступ
- **URL**: https://docs.a2v.space (через reverse proxy)
- **Local**: http://localhost:8091 (для разработки)
- **Auth**: всегда требуется
## Мастер-пароль для шифрования
**Важно**: Пароль для расшифровки файлов в разделе `creds/`
```bash
Master Password: Popoloka16!
```
## Шифрование
- Алгоритм: AES-256-GCM
- Хранилище: client-side encryption
- Файлы шифруются при сохранении
- Расшифровываются при чтении
@@ -0,0 +1,37 @@
---
title: "Eversolo Companion PostgreSQL"
date: 2026-03-29
tags: ["eversolo", "companion", "postgresql", "docker"]
description: "Учетные данные для базы данных Eversolo Companion"
---
## Docker Compose креды (~/Projects/eversolo-companion/docker-compose.yml)
```yaml
services:
postgres:
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
POSTGRES_DB: eversolo
```
## Локальные креды (.env файл)
```bash
POSTGRES_USER=postgres
POSTGRES_PASSWORD=password
POSTGRES_DB=eversolo
```
## Хостинг
- **Host**: localhost
- **Port**: 5433
- **Database**: eversolo
## Безопасность
- Используйте разные пароли для production
- Включите SSL для удаленного подключения
- Регулярно делайте бэкапы
+11
View File
@@ -0,0 +1,11 @@
---
title: "Mac Studio — leadera-api БД (docker-compose)"
description: "PostgreSQL (docker-compose) для Leadera"
service: "PostgreSQL"
date: 2026-03-29
tags: ["postgresql", "docker-compose", "leadera", "database"]
---
{{< encrypted-creds >}}
NYVK4PEGwmOHmAnGk8IAUc+lyFJtnEAvX6ZddBro/ILRWHOXBGYywgglFvQZ18BLDLb5DuA8GPAIdB/LwTHRXYO0KsmtlZQVWGEeeXlXAoEXpa5theoOQhebkW6LmiKyNGAVW2z9rK3nz6NnztYdn49LvGMjrHuR4IwCLbl/pYa96CPNRnxGDFlduFi8lMSspM0rBFi/bZhNGhzy36ViCl+aKr5P9cle0ZvM8E8av/6c5JjgDt88QFI3VYdTaTCE0+uHsXlnJN7Qgg/KH7kD
{{< /encrypted-creds >}}
+11
View File
@@ -0,0 +1,11 @@
---
title: "Mac Studio — leadera-api БД (локальная)"
description: "PostgreSQL (Docker) для Leadera"
service: "PostgreSQL"
date: 2026-03-29
tags: ["postgresql", "docker", "leadera", "database"]
---
{{< encrypted-creds >}}
p7Iw7Y3zbj1kLBcbOXGoO27oDwF85AhxBW7saT538hxi0ogJpyFeM49GDuLHzxuyknvdNC/rx3tb4AFnGkCeHSrrCmj+VK8Zxt7ujeujVJSRuOeeUlsqkHdlmaiXl2KQknrIsqVCi3Tnn0V5qcFxvo+1Ktc+surF6bBpWrTHzWV5mLtWVfD6C6kvvP/UFldFBD6v+FQs79yfoOe/j/bUrtpt6v5VndbbBmhUAQcy1BV2rpXxO373dTcLQ6coRWkt/RFo
{{< /encrypted-creds >}}
+11
View File
@@ -0,0 +1,11 @@
---
title: "VPN VPS"
description: "VPN сервер (Amnezia)"
service: "VPN"
date: 2026-03-29
tags: ["vpn", "amnezia", "infrastructure"]
---
{{< encrypted-creds >}}
YEI16NAJ78d3lmSa/lca8Zxczt+u6GyMUYHduX47VoFQdj0Ixozd8R6yXoB7eM+AjhCtNGkOxGlOj2s73ABOBjLEIVIhD4Z+xTyzdtah4VpyLoltYOeNYsnbIIFARdF/FBYq5COXohhXs33K5ozznrtDd/awbKMjl/sbQqjXAZ+A3ZSob6/5uU+fFKetXLR6v4ZLAYQ57iiD21ImSLSggwv+rJgK5XyPDKEPD4N5nOsiDrLgoukVBMvgJ54PqfPp2Hni+2tdKOlMnOG2npTuu4SkyALcfFar
{{< /encrypted-creds >}}
+11
View File
@@ -0,0 +1,11 @@
---
title: "VPS reg.ru"
description: "VPS хостинг (реверс-прокси)"
service: "VPS"
date: 2026-03-29
tags: ["vps", "reg.ru", "infrastructure"]
---
{{< encrypted-creds >}}
IpYXLMtgCFlGQ550DZCLjq37VsnNqL08Rn03iRS7kQ7ozBZNsiZySFzDAvYh4xIHytRDy0Sz0KGUXekr0S+cNiJsmtZ8kj0Pd0JhevhxTMZF2khFvs/LFWoTL5ZwAJ34y/qfLw2gaWX90VZDu0wO+KeAQeXhrWmol/2zUlfWX1AihyYqD2vRz+h2FcjD8ubYOXG35PyX7OlV1HPXgDv5X/bFNrxzPc867UOwB4aGxY9a
{{< /encrypted-creds >}}
+38
View File
@@ -0,0 +1,38 @@
---
title: "29 марта 2026"
date: 2026-03-29
tags: ["angular", "go", "docker", "eversolo", "hugo", "docs", "identity", "infrastructure", "companion"]
---
## Timeline
- **20:03** — Настроили Angular + Go проекты (leadera) через pm2, удалили proxy.conf, подняли PostgreSQL в Docker
- **20:31** — Изучили API Eversolo T8 — полный список REST-эндпоинтов для управления музыкой
- **20:49** — Обсудили важность записи контекста в файлы для сохранения памяти между сессиями
- **21:13** — Начали проект docs.a2v.space — персональная документация на Hugo
- **21:44** — Завершили настройку Identity (Братан, SOUL.md, USER.md, IDENTITY.md)
- **22:15** — Документировали инфраструктуру: VPS reverse proxy (claw.a2v.space, code.a2v.space, sand.a2v.space, docs.a2v.space)
- **22:31** — Настроили docs.a2v.space: Hugo сайт, 83 страницы, Bootstrap 5 тёмная тема, AES-256-GCM шифрование кредов (мастер-пароль: Popoloka16!)
- **22:47** — Добавили Basic auth: agaltsovav / Magamet787! для доступа к документации
- **23:02** — Создали cron задачу docs-a2v-daily-sync на ежедневное обновление в 03:00 МСК
- **23:18** — Полностью задокументировали Eversolo T8 API (воспроизведение, громкость, дисплей, питание, поиск и т.д.)
- **23:45** — Переписали TOOLS.md как полный справочник по инфраструктуре
## Eversolo Companion — статус проекта
**Backend (Go + Gin):**
- Репозиторий: ~/Projects/eversolo-companion
- Состояние: собран, 17+ REST API эндпоинтов, WebSocket, CORS, state poller
**Frontend (Angular 17):**
- Состояние: собран, тёмная тема (Spotify-like), 5 экранов, 5 сервисов
- Dev server: pm2 (eversolo-fe), порт 8096
**Инфраструктура:**
- PostgreSQL: Docker, порт 5433, миграции готовы
- Docker Compose: рабочий (postgres + api + frontend)
**Проблема:** нет доступа к Eversolo из OpenClaw sandbox (192.168.0.156)
- Решение: настройка tools.elevated.allowFrom.webchat или запуск через launchd
**Следующие шаги:** после решения сети — этапы 3-9 (библиотека sync, плейлисты, scrobbler, обложки)
+75
View File
@@ -0,0 +1,75 @@
---
title: "Подключение claw.a2v.space (OpenClaw)"
date: 2026-03-29
tags: ["openclaw", "ssh", "nginx", "vps", "reverse-proxy"]
---
## Архитектура
```
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`
NS-серверы: `ns1.hosting.reg.ru`, `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 конфиг
```nginx
server {
listen 80;
server_name claw.a2v.space;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name claw.a2v.space;
ssl_certificate /etc/letsencrypt/live/claw.a2v.space/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/claw.a2v.space/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
```
### 5. SSL-сертификат
```bash
certbot certonly --nginx -d claw.a2v.space
```
### 6. OpenClaw config
```json
{
"allowedOrigins": ["https://claw.a2v.space"],
"trustedProxies": ["127.0.0.1"]
}
```
+59
View File
@@ -0,0 +1,59 @@
---
title: "Подключение code.a2v.space (OpenCode)"
date: 2026-03-29
tags: ["opencode", "ssh", "nginx", "vps", "reverse-proxy"]
---
## Архитектура
```
Mac Studio (localhost:4096)
→ autossh SSH-туннель (-R 8081:localhost:4096)
→ VPS 95.163.232.9:8081
→ nginx HTTPS
→ https://code.a2v.space
```
## Параметры
| Параметр | Значение |
|----------|----------|
| Локальный порт | 4096 |
| Туннель порт | 8081 |
| pm2 процесс | `opencode` |
| SSL сертификат | `/etc/letsencrypt/live/code.a2v.space/` |
## nginx конфиг
```nginx
server {
listen 80;
server_name code.a2v.space;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name code.a2v.space;
ssl_certificate /etc/letsencrypt/live/code.a2v.space/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/code.a2v.space/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
```
## SSL-сертификат
```bash
certbot certonly --nginx -d code.a2v.space
```
+73
View File
@@ -0,0 +1,73 @@
---
title: "Подключение sand.a2v.space (Leadera Project)"
date: 2026-03-29
tags: ["angular", "go", "docker", "nginx", "vps", "reverse-proxy"]
---
## Архитектура
```
Mac Studio
├─ Frontend (Angular) :4200 (pm2: leadera-fe)
├─ Backend (Go) :8080 (pm2: leadera-api)
└─ PostgreSQL 16 в Docker (Colima, container: app-leadera-db)
→ autossh SSH-туннель (-R 8082:localhost:4200 -R 8083:localhost:8080)
→ VPS 95.163.232.9
→ nginx HTTPS
→ https://sand.a2v.space
```
## Параметры
| Компонент | Локальный порт | Туннель порт | pm2 имя |
|-----------|----------------|--------------|---------|
| Frontend (Angular) | 4200 | 8082 | leadera-fe |
| Backend (Go) | 8080 | 8083 | leadera-api |
SSL сертификат: `/etc/letsencrypt/live/sand.a2v.space/`
## nginx конфиг
```nginx
server {
listen 80;
server_name sand.a2v.space;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name sand.a2v.space;
ssl_certificate /etc/letsencrypt/live/sand.a2v.space/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/sand.a2v.space/privkey.pem;
location /api {
proxy_pass http://127.0.0.1:8083;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location / {
proxy_pass http://127.0.0.1:8082;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
```
## База данных
PostgreSQL 16 в Docker через Colima:
- Container: `app-leadera-db`
- Port: 5432
## SSL-сертификат
```bash
certbot certonly --nginx -d sand.a2v.space
```
+72
View File
@@ -0,0 +1,72 @@
---
title: "SSH туннели для VPS reverse proxy"
date: 2026-03-29
tags: ["ssh", "tunnel", "vps", "reverse-proxy"]
description: "Настройка SSH туннелей для доступа к сервисам на Mac Studio через VPS"
---
## Настройка SSH туннелей
### VPS reg.ru (95.163.232.9)
```bash
# На Mac Studio: создать туннель для каждого сервиса
ssh -N -R 8080:localhost:8080 root@95.163.232.9 # leadera-api
ssh -N -R 8081:localhost:4096 root@95.163.232.9 # opencode
ssh -N -R 8082:localhost:4200 root@95.163.232.9 # leadera-fe
ssh -N -R 8083:localhost:8080 root@95.163.232.9 # docs-a2v
```
### Настройка launchd plist
**Файл**: `~/Library/LaunchAgents/com.openclaw.sshtunnel.plist`
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.openclaw.sshtunnel</string>
<key>ProgramArguments</key>
<array>
<string>ssh</string>
<string>-N</string>
<string>-R</string>
<string>8080:localhost:8080</string>
<string>root@95.163.232.9</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
```
### Автозапуск
```bash
# Загрузить plist
launchctl load ~/Library/LaunchAgents/com.openclaw.sshtunnel.plist
# Проверить статус
launchctl list | grep sshtunnel
# Удалить (при необходимости)
launchctl unload ~/Library/LaunchAgents/com.openclaw.sshtunnel.plist
```
## Доступ к сервисам
Через reverse proxy на VPS:
- **code.a2v.space**: порт 8080 → Mac Studio:4096
- **claw.a2v.space**: порт 8081 → Mac Studio:8080 (leadera-api)
- **sand.a2v.space**: порт 8082 → Mac Studio:4200 (leadera-fe)
- **docs.a2v.space**: порт 8083 → Mac Studio:8080 (docs-a2v)
## SSL
Все сервисы используют Let's Encrypt сертификаты:
- Путь: `/etc/letsencrypt/live/{claw,code,sand}.a2v.space/`
- Автопродление через certbot
+102
View File
@@ -0,0 +1,102 @@
---
title: "Настройка VPS как реверс-прокси"
date: 2026-03-29
tags: ["vps", "nginx", "ssh", "reverse-proxy", "devops"]
---
## Общая схема
```
Mac Studio (локальная сеть)
→ autossh (SSH-туннели)
→ VPS 95.163.232.9 (Debian)
→ nginx (HTTPS reverse proxy)
→ интернет
```
## Что нужно на VPS
### 1. Установленные пакеты
```bash
apt update
apt install nginx certbot python3-certbot-nginx
```
### 2. SSH-доступ
- Авторизация только по ключам
- Публичный ключ с Mac Studio добавлен в `/root/.ssh/authorized_keys`
### 3. nginx
Для каждого домена создать server block:
- HTTP → редирект на HTTPS
- HTTPS с SSL-сертификатом Let's Encrypt
- `proxy_pass` на localhost-порт туннеля
Пример структуры:
```
/etc/nginx/sites-available/
claw.a2v.space.conf
code.a2v.space.conf
sand.a2v.space.conf
```
### 4. SSL-сертификаты
```bash
certbot certonly --nginx -d <domain>
certbot renew --dry-run # проверить автообновление
```
## Что нужно на Mac Studio
### autossh через launchd
Plist: `~/Library/LaunchAgents/com.openclaw.sshtunnel.plist`
Один plist с несколькими `-R` флагами:
```xml
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/autossh</string>
<string>-M</string>
<string>0</string>
<string>-R</string>
<string>8080:localhost:18789</string>
<string>-R</string>
<string>8081:localhost:4096</string>
<string>-R</string>
<string>8082:localhost:4200</string>
<string>-R</string>
<string>8083:localhost:8080</string>
<string>root@95.163.232.9</string>
<string>-N</string>
<string>-i</string>
<string>/Users/<user>/.ssh/id_rsa</string>
</array>
```
### Управление launchd
```bash
launchctl load ~/Library/LaunchAgents/com.openclaw.sshtunnel.plist
launchctl start com.openclaw.sshtunnel
launchctl stop com.openclaw.sshtunnel
```
## Проверка
```bash
# На VPS
ss -tlnp | grep -E '808[0-3]'
# Снаружи
curl -I https://claw.a2v.space
curl -I https://code.a2v.space
curl -I https://sand.a2v.space
```
+89
View File
@@ -0,0 +1,89 @@
---
title: "Eversolo T8 API"
date: 2026-03-29
tags: ["api", "eversolo", "music", "streamer"]
---
Eversolo T8 — музыкальный стример.
**IP:** 192.168.0.156
**Порт:** 9529
**Авторизация:** нет
Базовый URL: `http://192.168.0.156: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 Forum](https://forum.zidoo.tv/index.php?threads/some-api.96983/)
- [Home Assistant Integration](https://github.com/hchris1/Eversolo/blob/main/custom_components/eversolo/api.py)
@@ -0,0 +1,47 @@
---
title: "Завершить Eversolo Companion - этапы 3-9"
date: 2026-03-29
plan_date:
status: planned
done_date:
context_quote: "UI готов, API готов, БД готова — но API не может достучаться до Eversolo из-за ограничений OpenClaw sandbox"
tags: ["eversolo", "companion", "angular", "go", "docker"]
---
## Описание
Завершить разработку Eversolo Companion после решения проблемы с сетевым доступом.
## Что сделано
- **Backend (Go + Gin)**: собран, 17+ REST API эндпоинтов, WebSocket, CORS, state poller
- **Frontend (Angular 17)**: собран, тёмная тема (Spotify-like), 5 экранов, 5 сервисов
- **PostgreSQL**: Docker, порт 5433, миграции готовы
- **Docker Compose**: рабочий (postgres + api + frontend)
- **Спецификация**: полная в ~/Projects/eversolo-companion/SPEC.md
## Проблема
API не может достучаться до Eversolo T8 (192.168.0.156:9529) из-за ограничений OpenClaw sandbox.
## Возможные решения
1. Настроить `tools.elevated.allowFrom.webchat` для разрешения сетевых соединений
2. Запустить API через launchd plist (как SSH туннели)
3. Использовать отдельный контейнер без ограничений
## Этапы 3-9 (после решения сети)
1. **Библиотека синхронизации** — двухсторонний sync с Eversolo
2. **Плейлисты** — импорт/экспорт, редактирование
3. **Scrobbler** — Last.fm / ListenBrainz
4. **Обложки** — кэширование, отображение в UI
5. **Плеер** — улучшенный интерфейс управления
6. **Система уведомлений** — события от Eversolo
7. **Администрирование** — настройка подключений
## Связанные ресурсы
- [Спецификация проекта](/docs/eversolo-companion-spec/)
- [API документация](/kb/eversolo-api/)
- [Дневник разработки](/diary/2026-03-29/)
+27
View File
@@ -0,0 +1,27 @@
---
title: "Реализовать управление Eversolo из OpenClaw"
date: 2026-03-29
plan_date:
status: planned
done_date:
context_quote: "API изучен, записан в TOOLS.md. Проблема: нет доступа к LAN из sandbox OpenClaw."
tags: ["eversolo", "openclaw", "api"]
---
## Описание
Добавить инструменты управления Eversolo T8 в OpenClaw.
## Что сделано
- Изучен полный API Eversolo T8 (см. [Базу знаний](/kb/eversolo-api/))
## Проблема
Sandbox OpenClaw не имеет доступа к локальной сети, где находится Eversolo.
## Возможные решения
1. Настроить проброс портов
2. Запустить OpenClaw без sandbox-ограничений
3. Использовать промежуточный proxy-сервис
+21
View File
@@ -0,0 +1,21 @@
---
title: "Настроить интеграцию Ollama с OpenClaw"
date: 2026-03-29
plan_date:
status: planned
done_date:
context_quote: "Добавлен qwen3.5:9b в openclaw.json, но модель не появилась в openclaw models list. Отложено по решению Антона."
tags: ["ollama", "openclaw", "llm"]
---
## Описание
Добавить поддержку Ollama в OpenClaw для использования локальных LLM моделей.
## Проблема
Модель `qwen3.5:9b` добавлена в конфиг `openclaw.json`, но не отображается в `openclaw models list`.
## Статус
Отложено по решению Антона.
+53
View File
@@ -0,0 +1,53 @@
baseURL = '/'
languageCode = 'ru-ru'
title = 'docs.a2v.space'
theme = 'a2v'
relativeURLs = true
canonifyURLs = false
[params]
warmPrimary = "#c4623a"
warmBg = "#f5f0e8"
warmText = "#3d3530"
warmAccent = "#d4a853"
warmGray = "#6b6560"
[taxonomies]
tag = "tags"
category = "categories"
status = "statuses"
[menu]
[[menu.main]]
name = "Дневник"
url = "/diary/"
weight = 1
[[menu.main]]
name = "База знаний"
url = "/kb/"
weight = 2
[[menu.main]]
name = "Планы"
url = "/plans/"
weight = 3
[[menu.main]]
name = "Инструкции"
url = "/guides/"
weight = 4
[[menu.main]]
name = "Креды"
url = "/creds/"
weight = 5
[outputs]
home = ["HTML", "JSON"]
section = ["HTML", "JSON"]
[markup]
[markup.tableOfContents]
endLevel = 3
ordered = false
startLevel = 2
[markup.goldmark]
[markup.goldmark.renderer]
unsafe = true
+138
View File
@@ -0,0 +1,138 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Categories — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../creds/">Креды</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Categories</h1>
<ul>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../js/search.js"></script>
<script src="../js/creds.js"></script>
</body>
</html>
+11
View File
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Categories on docs.a2v.space</title>
<link>/categories/</link>
<description>Recent content in Categories on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<atom:link href="/categories/index.xml" rel="self" type="application/rss+xml" />
</channel>
</rss>
+177
View File
@@ -0,0 +1,177 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>docs.a2v.space Basic Auth — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Фильтры</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../creds/">Все креды</a></li>
</ul>
<h6 class="mt-3">Сервисы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../creds/?service=postgresql">PostgreSQL</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/?service=vpn">VPN</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/?service=vps">VPS</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content creds-card">
<h1>docs.a2v.space Basic Auth</h1>
<p>Учетные данные для доступа к docs.a2v.space</p>
<div class="encrypted-data" id="encrypted-docs-a2v-space-auth">
QmFzaWMgQXV0aGVudGljYXRpb24gVXNlcm5hbWU6IGFnYWx0c292YXYgUGFzc3dvcmQ6IE1hZ2FtZXQ3ODchINCa0L7QvdGE0LjQs9GD0YDQsNGG0LjRjyBOZ2lueCBzZXJ2ZXIgeyBsaXN0ZW4gODA5MTsgc2VydmVyX25hbWUgZG9jcy5hMnYuc3BhY2U7IGF1dGhfYmFzaWMgJiMzNDtSZXN0cmljdGVkIEFjY2VzcyYjMzQ7OyBhdXRoX2Jhc2ljX3VzZXJfZmlsZSAvZXRjL25naW54Ly5odHBhc3N3ZDsgfSDQlNC&#43;0YHRgtGD0L8gVVJMOiBodHRwczovL2RvY3MuYTJ2LnNwYWNlICjRh9C10YDQtdC3IHJldmVyc2UgcHJveHkpIExvY2FsOiBodHRwOi8vbG9jYWxob3N0OjgwOTEgKNC00LvRjyDRgNCw0LfRgNCw0LHQvtGC0LrQuCkgQXV0aDog0LLRgdC10LPQtNCwINGC0YDQtdCx0YPQtdGC0YHRjyDQnNCw0YHRgtC10YAt0L/QsNGA0L7Qu9GMINC00LvRjyDRiNC40YTRgNC&#43;0LLQsNC90LjRjyDQktCw0LbQvdC&#43;OiDQn9Cw0YDQvtC70Ywg0LTQu9GPINGA0LDRgdGI0LjRhNGA0L7QstC60Lgg0YTQsNC50LvQvtCyINCyINGA0LDQt9C00LXQu9C1IGNyZWRzLwpNYXN0ZXIgUGFzc3dvcmQ6IFBvcG9sb2thMTYhINCo0LjRhNGA0L7QstCw0L3QuNC1INCQ0LvQs9C&#43;0YDQuNGC0Lw6IEFFUy0yNTYtR0NNINCl0YDQsNC90LjQu9C40YnQtTogY2xpZW50LXNpZGUgZW5jcnlwdGlvbiDQpNCw0LnQu9GLINGI0LjRhNGA0YPRjtGC0YHRjyDQv9GA0Lgg0YHQvtGF0YDQsNC90LXQvdC40Lgg0KDQsNGB0YjQuNGE0YDQvtCy0YvQstCw0Y7RgtGB0Y8g0L/RgNC4INGH0YLQtdC90LjQuCA=
</div>
<div class="decrypted-fields" id="decrypted-docs-a2v-space-auth" style="display: none;">
</div>
<button class="btn btn-primary mt-3 decrypt-btn" data-id="docs-a2v-space-auth">
Расшифровать
</button>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
@@ -0,0 +1,177 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Eversolo Companion PostgreSQL — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Фильтры</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../creds/">Все креды</a></li>
</ul>
<h6 class="mt-3">Сервисы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../creds/?service=postgresql">PostgreSQL</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/?service=vpn">VPN</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/?service=vps">VPS</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content creds-card">
<h1>Eversolo Companion PostgreSQL</h1>
<p>Учетные данные для базы данных Eversolo Companion</p>
<div class="encrypted-data" id="encrypted-eversolo-companion-postgres">
RG9ja2VyIENvbXBvc2Ug0LrRgNC10LTRiyAofi9Qcm9qZWN0cy9ldmVyc29sby1jb21wYW5pb24vZG9ja2VyLWNvbXBvc2UueW1sKSBzZXJ2aWNlczogcG9zdGdyZXM6IGVudmlyb25tZW50OiBQT1NUR1JFU19VU0VSOiBwb3N0Z3JlcyBQT1NUR1JFU19QQVNTV09SRDogcGFzc3dvcmQgUE9TVEdSRVNfREI6IGV2ZXJzb2xvINCb0L7QutCw0LvRjNC90YvQtSDQutGA0LXQtNGLICguZW52INGE0LDQudC7KSBQT1NUR1JFU19VU0VSPXBvc3RncmVzIFBPU1RHUkVTX1BBU1NXT1JEPXBhc3N3b3JkIFBPU1RHUkVTX0RCPWV2ZXJzb2xvINCl0L7RgdGC0LjQvdCzIEhvc3Q6IGxvY2FsaG9zdCBQb3J0OiA1NDMzIERhdGFiYXNlOiBldmVyc29sbyDQkdC10LfQvtC/0LDRgdC90L7RgdGC0Ywg0JjRgdC/0L7Qu9GM0LfRg9C50YLQtSDRgNCw0LfQvdGL0LUg0L/QsNGA0L7Qu9C4INC00LvRjyBwcm9kdWN0aW9uINCS0LrQu9GO0YfQuNGC0LUgU1NMINC00LvRjyDRg9C00LDQu9C10L3QvdC&#43;0LPQviDQv9C&#43;0LTQutC70Y7Rh9C10L3QuNGPINCg0LXQs9GD0LvRj9GA0L3QviDQtNC10LvQsNC50YLQtSDQsdGN0LrQsNC/0Ysg
</div>
<div class="decrypted-fields" id="decrypted-eversolo-companion-postgres" style="display: none;">
</div>
<button class="btn btn-primary mt-3 decrypt-btn" data-id="eversolo-companion-postgres">
Расшифровать
</button>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+316
View File
@@ -0,0 +1,316 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Creds — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Фильтры</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../creds/">Все креды</a></li>
</ul>
<h6 class="mt-3">Сервисы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../creds/?service=postgresql">PostgreSQL</a></li>
<li class="nav-item"><a class="nav-link" href="../creds/?service=vpn">VPN</a></li>
<li class="nav-item"><a class="nav-link" href="../creds/?service=vps">VPS</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Креды</h1>
<p class="text-muted">Данные зашифрованы. Нажмите "Расшифровать" и введите мастер-пароль.</p>
<div class="row">
<div class="col-md-6 mb-4">
<div class="card creds-card h-100">
<div class="card-body">
<h3 class="card-title">docs.a2v.space Basic Auth</h3>
<p class="card-text">Учетные данные для доступа к docs.a2v.space</p>
<div class="encrypted-data" id="encrypted-docs-a2v-space-auth">
QmFzaWMgQXV0aGVudGljYXRpb24gVXNlcm5hbWU6IGFnYWx0c292YXYgUGFzc3dvcmQ6IE1hZ2FtZXQ3ODchINCa0L7QvdGE0LjQs9GD0YDQsNGG0LjRjyBOZ2lueCBzZXJ2ZXIgeyBsaXN0ZW4gODA5MTsgc2VydmVyX25hbWUgZG9jcy5hMnYuc3BhY2U7IGF1dGhfYmFzaWMgJiMzNDtSZXN0cmljdGVkIEFjY2VzcyYjMzQ7OyBhdXRoX2Jhc2ljX3VzZXJfZmlsZSAvZXRjL25naW54Ly5odHBhc3N3ZDsgfSDQlNC&#43;0YHRgtGD0L8gVVJMOiBodHRwczovL2RvY3MuYTJ2LnNwYWNlICjRh9C10YDQtdC3IHJldmVyc2UgcHJveHkpIExvY2FsOiBodHRwOi8vbG9jYWxob3N0OjgwOTEgKNC00LvRjyDRgNCw0LfRgNCw0LHQvtGC0LrQuCkgQXV0aDog0LLRgdC10LPQtNCwINGC0YDQtdCx0YPQtdGC0YHRjyDQnNCw0YHRgtC10YAt0L/QsNGA0L7Qu9GMINC00LvRjyDRiNC40YTRgNC&#43;0LLQsNC90LjRjyDQktCw0LbQvdC&#43;OiDQn9Cw0YDQvtC70Ywg0LTQu9GPINGA0LDRgdGI0LjRhNGA0L7QstC60Lgg0YTQsNC50LvQvtCyINCyINGA0LDQt9C00LXQu9C1IGNyZWRzLwpNYXN0ZXIgUGFzc3dvcmQ6IFBvcG9sb2thMTYhINCo0LjRhNGA0L7QstCw0L3QuNC1INCQ0LvQs9C&#43;0YDQuNGC0Lw6IEFFUy0yNTYtR0NNINCl0YDQsNC90LjQu9C40YnQtTogY2xpZW50LXNpZGUgZW5jcnlwdGlvbiDQpNCw0LnQu9GLINGI0LjRhNGA0YPRjtGC0YHRjyDQv9GA0Lgg0YHQvtGF0YDQsNC90LXQvdC40Lgg0KDQsNGB0YjQuNGE0YDQvtCy0YvQstCw0Y7RgtGB0Y8g0L/RgNC4INGH0YLQtdC90LjQuCA=
</div>
<div class="decrypted-fields" id="decrypted-docs-a2v-space-auth" style="display: none;">
</div>
<button class="btn btn-primary mt-2 decrypt-btn" data-id="docs-a2v-space-auth">
Расшифровать
</button>
</div>
</div>
</div>
<div class="col-md-6 mb-4">
<div class="card creds-card h-100">
<div class="card-body">
<h3 class="card-title">Eversolo Companion PostgreSQL</h3>
<p class="card-text">Учетные данные для базы данных Eversolo Companion</p>
<div class="encrypted-data" id="encrypted-eversolo-companion-postgres">
RG9ja2VyIENvbXBvc2Ug0LrRgNC10LTRiyAofi9Qcm9qZWN0cy9ldmVyc29sby1jb21wYW5pb24vZG9ja2VyLWNvbXBvc2UueW1sKSBzZXJ2aWNlczogcG9zdGdyZXM6IGVudmlyb25tZW50OiBQT1NUR1JFU19VU0VSOiBwb3N0Z3JlcyBQT1NUR1JFU19QQVNTV09SRDogcGFzc3dvcmQgUE9TVEdSRVNfREI6IGV2ZXJzb2xvINCb0L7QutCw0LvRjNC90YvQtSDQutGA0LXQtNGLICguZW52INGE0LDQudC7KSBQT1NUR1JFU19VU0VSPXBvc3RncmVzIFBPU1RHUkVTX1BBU1NXT1JEPXBhc3N3b3JkIFBPU1RHUkVTX0RCPWV2ZXJzb2xvINCl0L7RgdGC0LjQvdCzIEhvc3Q6IGxvY2FsaG9zdCBQb3J0OiA1NDMzIERhdGFiYXNlOiBldmVyc29sbyDQkdC10LfQvtC/0LDRgdC90L7RgdGC0Ywg0JjRgdC/0L7Qu9GM0LfRg9C50YLQtSDRgNCw0LfQvdGL0LUg0L/QsNGA0L7Qu9C4INC00LvRjyBwcm9kdWN0aW9uINCS0LrQu9GO0YfQuNGC0LUgU1NMINC00LvRjyDRg9C00LDQu9C10L3QvdC&#43;0LPQviDQv9C&#43;0LTQutC70Y7Rh9C10L3QuNGPINCg0LXQs9GD0LvRj9GA0L3QviDQtNC10LvQsNC50YLQtSDQsdGN0LrQsNC/0Ysg
</div>
<div class="decrypted-fields" id="decrypted-eversolo-companion-postgres" style="display: none;">
</div>
<button class="btn btn-primary mt-2 decrypt-btn" data-id="eversolo-companion-postgres">
Расшифровать
</button>
</div>
</div>
</div>
<div class="col-md-6 mb-4">
<div class="card creds-card h-100">
<div class="card-body">
<h3 class="card-title">Mac Studio — leadera-api БД (docker-compose)</h3>
<p class="card-text">PostgreSQL (docker-compose) для Leadera</p>
<p class="text-muted mb-2"><strong>Сервис:</strong> PostgreSQL</p>
<div class="encrypted-data" id="encrypted-leadera-db-docker">
Ck5ZVks0UEVHd21PSG1BbkdrOElBVWMrbHlGSnRuRUF2WDZaZGRCcm8vSUxSV0hPWEJHWXl3Z2dsRnZRWjE4QkxETGI1RHVBOEdQQUlkQi9Md1RIUlhZTzBLc210bFpRVldHRWVlWGxYQW9FWHBhNXRoZW9PUWhlYmtXNkxtaUt5TkdBVlcyejlySzNuejZObnp0WWRuNDlMdkdNanJIdVI0SXdDTGJsL3BZYTk2Q1BOUm54R0RGbGR1Rmk4bE1Tc3BNMHJCRmkvYlpoTkdoenkzNlZpQ2wrYUtyNVA5Y2xlMFp2TThFOGF2LzZjNUpqZ0R0ODhRRkkzVllkVGFUQ0UwK3VIc1hsbkpON1FnZy9LSDdrRAoKCg==
</div>
<div class="decrypted-fields" id="decrypted-leadera-db-docker" style="display: none;">
</div>
<button class="btn btn-primary mt-2 decrypt-btn" data-id="leadera-db-docker">
Расшифровать
</button>
</div>
</div>
</div>
<div class="col-md-6 mb-4">
<div class="card creds-card h-100">
<div class="card-body">
<h3 class="card-title">Mac Studio — leadera-api БД (локальная)</h3>
<p class="card-text">PostgreSQL (Docker) для Leadera</p>
<p class="text-muted mb-2"><strong>Сервис:</strong> PostgreSQL</p>
<div class="encrypted-data" id="encrypted-leadera-db-local">
CnA3SXc3WTN6Ymoxa0xCY2JPWEdvTzI3b0R3Rjg1QWh4Qlc3c2FUNTM4aHhpMG9nSnB5RmVNNDlHRHVMSHp4dXlrbnZkTkMvcngzdGI0QUZuR2tDZUhTcnJDbWorVks4Wnh0N3VqZXVqVkpTUnVPZWVVbHNxa0hkbG1haVhsMktRa25ySXNxVkNpM1RubjBWNXFjRnh2bysxS3RjK3N1ckY2YkJwV3JUSHpXVjVtTHRXVmZENkM2a3Z2UC9VRmxkRkJENnYrRlFzNzl5Zm9PZS9qL2JVcnRwdDZ2NVZuZGJiQm1oVUFRY3kxQlYycnBYeE8zNzNkVGNMUTZjb1JXa3QvUkZvCgoK
</div>
<div class="decrypted-fields" id="decrypted-leadera-db-local" style="display: none;">
</div>
<button class="btn btn-primary mt-2 decrypt-btn" data-id="leadera-db-local">
Расшифровать
</button>
</div>
</div>
</div>
<div class="col-md-6 mb-4">
<div class="card creds-card h-100">
<div class="card-body">
<h3 class="card-title">VPN VPS</h3>
<p class="card-text">VPN сервер (Amnezia)</p>
<p class="text-muted mb-2"><strong>Сервис:</strong> VPN</p>
<div class="encrypted-data" id="encrypted-vpn-vps">
CllFSTE2TkFKNzhkM2xtU2EvbGNhOFp4Y3p0K3U2R3lNVVlIZHVYNDdWb0ZRZGowSXhvemQ4UjZ5WG9CN2VNK0FqaEN0TkdrT3hHbE9qMnM3M0FCT0JqTEVJVkloRDRaK3hUeXpkdGFoNFZweUxvbHRZT2VOWXNuYklJRkFSZEYvRkJZcTVDT1hvaGhYczMzSzVvenpucnREZC9hd2JLTWpsL3NiUXFqWEFaK0EzWlNvYjYvNXVVK2ZGS2V0WExSNnY0WkxBWVE1N2lpRDIxSW1TTFNnZ3d2K3JKZ0s1WHlQREtFUEQ0TjVuT3NpRHJMZ291a1ZCTXZnSjU0UHFmUHAySG5pKzJ0ZEtPbE1uT0cybnBUdXU0U2t5QUxjZkZhcgoKCg==
</div>
<div class="decrypted-fields" id="decrypted-vpn-vps" style="display: none;">
</div>
<button class="btn btn-primary mt-2 decrypt-btn" data-id="vpn-vps">
Расшифровать
</button>
</div>
</div>
</div>
<div class="col-md-6 mb-4">
<div class="card creds-card h-100">
<div class="card-body">
<h3 class="card-title">VPS reg.ru</h3>
<p class="card-text">VPS хостинг (реверс-прокси)</p>
<p class="text-muted mb-2"><strong>Сервис:</strong> VPS</p>
<div class="encrypted-data" id="encrypted-vps-reg-ru">
CklwWVhMTXRnQ0ZsR1E1NTBEWkNManEzN1Zzbk5xTDA4Um4wM2lSUzdrUTdvekJaTnNpWnlTRnpEQXZZaDR4SUh5dFJEeTBTejBLR1VYZWtyMFMrY05pSnNtdFo4a2owUGQwSmhldmh4VE1aRjJraEZ2cy9MRldvVEw1WndBSjM0eS9xZkx3MmdhV1g5MFZaRHUwd08rS2VBUWVYaHJXbW9sLzJ6VWxmV1gxQWloeVlxRDJ2UnoraDJGY2pEOHViWU9YRzM1UHlYN09sVjFIUFhnRHY1WC9iRk5yeHpQYzg2N1VPd0I0YUd4WTlhCgoK
</div>
<div class="decrypted-fields" id="decrypted-vps-reg-ru" style="display: none;">
</div>
<button class="btn btn-primary mt-2 decrypt-btn" data-id="vps-reg-ru">
Расшифровать
</button>
</div>
</div>
</div>
</div>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../js/search.js"></script>
<script src="../js/creds.js"></script>
</body>
</html>
+1
View File
@@ -0,0 +1 @@
[{"content":"Basic Authentication Username: agaltsovav Password: Magamet787! Конфигурация Nginx server { listen 8091; server_name docs.a2v.space; auth_basic \u0026#34;Restricted Access\u0026#34;; auth_basic_user_file /etc/nginx/.htpasswd; } Доступ URL: https://docs.a2v.space (через reverse proxy) Local: http://localhost:8091 (для разработки) Auth: всегда требуется Мастер-пароль для шифрования Важно: Пароль для расшифровки файлов в разделе creds/\nMaster Password: Popoloka16! Шифрование Алгоритм: AES-256-GCM Хранилище: client-side encryption Файлы шифруются при сохранении Расшифровываются при чтении ","section":"creds","tags":["docs","authentication","nginx"],"title":"docs.a2v.space Basic Auth","url":"/creds/docs-a2v-space-auth/"},{"content":"Docker Compose креды (~/Projects/eversolo-companion/docker-compose.yml) services: postgres: environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: password POSTGRES_DB: eversolo Локальные креды (.env файл) POSTGRES_USER=postgres POSTGRES_PASSWORD=password POSTGRES_DB=eversolo Хостинг Host: localhost Port: 5433 Database: eversolo Безопасность Используйте разные пароли для production Включите SSL для удаленного подключения Регулярно делайте бэкапы ","section":"creds","tags":["eversolo","companion","postgresql","docker"],"title":"Eversolo Companion PostgreSQL","url":"/creds/eversolo-companion-postgres/"},{"content":"\nNYVK4PEGwmOHmAnGk8IAUc+lyFJtnEAvX6ZddBro/ILRWHOXBGYywgglFvQZ18BLDLb5DuA8GPAIdB/LwTHRXYO0KsmtlZQVWGEeeXlXAoEXpa5theoOQhebkW6LmiKyNGAVW2z9rK3nz6NnztYdn49LvGMjrHuR4IwCLbl/pYa96CPNRnxGDFlduFi8lMSspM0rBFi/bZhNGhzy36ViCl+aKr5P9cle0ZvM8E8av/6c5JjgDt88QFI3VYdTaTCE0+uHsXlnJN7Qgg/KH7kD\n\n\n","section":"creds","tags":["postgresql","docker-compose","leadera","database"],"title":"Mac Studio — leadera-api БД (docker-compose)","url":"/creds/leadera-db-docker/"},{"content":"\np7Iw7Y3zbj1kLBcbOXGoO27oDwF85AhxBW7saT538hxi0ogJpyFeM49GDuLHzxuyknvdNC/rx3tb4AFnGkCeHSrrCmj+VK8Zxt7ujeujVJSRuOeeUlsqkHdlmaiXl2KQknrIsqVCi3Tnn0V5qcFxvo+1Ktc+surF6bBpWrTHzWV5mLtWVfD6C6kvvP/UFldFBD6v+FQs79yfoOe/j/bUrtpt6v5VndbbBmhUAQcy1BV2rpXxO373dTcLQ6coRWkt/RFo\n\n\n","section":"creds","tags":["postgresql","docker","leadera","database"],"title":"Mac Studio — leadera-api БД (локальная)","url":"/creds/leadera-db-local/"},{"content":"\nYEI16NAJ78d3lmSa/lca8Zxczt+u6GyMUYHduX47VoFQdj0Ixozd8R6yXoB7eM+AjhCtNGkOxGlOj2s73ABOBjLEIVIhD4Z+xTyzdtah4VpyLoltYOeNYsnbIIFARdF/FBYq5COXohhXs33K5ozznrtDd/awbKMjl/sbQqjXAZ+A3ZSob6/5uU+fFKetXLR6v4ZLAYQ57iiD21ImSLSggwv+rJgK5XyPDKEPD4N5nOsiDrLgoukVBMvgJ54PqfPp2Hni+2tdKOlMnOG2npTuu4SkyALcfFar\n\n\n","section":"creds","tags":["vpn","amnezia","infrastructure"],"title":"VPN VPS","url":"/creds/vpn-vps/"},{"content":"\nIpYXLMtgCFlGQ550DZCLjq37VsnNqL08Rn03iRS7kQ7ozBZNsiZySFzDAvYh4xIHytRDy0Sz0KGUXekr0S+cNiJsmtZ8kj0Pd0JhevhxTMZF2khFvs/LFWoTL5ZwAJ34y/qfLw2gaWX90VZDu0wO+KeAQeXhrWmol/2zUlfWX1AihyYqD2vRz+h2FcjD8ubYOXG35PyX7OlV1HPXgDv5X/bFNrxzPc867UOwB4aGxY9a\n\n\n","section":"creds","tags":["vps","reg.ru","infrastructure"],"title":"VPS reg.ru","url":"/creds/vps-reg-ru/"}]
+179
View File
@@ -0,0 +1,179 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Mac Studio — leadera-api БД (docker-compose) — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Фильтры</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../creds/">Все креды</a></li>
</ul>
<h6 class="mt-3">Сервисы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../creds/?service=postgresql">PostgreSQL</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/?service=vpn">VPN</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/?service=vps">VPS</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content creds-card">
<h1>Mac Studio — leadera-api БД (docker-compose)</h1>
<p>PostgreSQL (docker-compose) для Leadera</p>
<p class="text-muted mb-2"><strong>Сервис:</strong> PostgreSQL</p>
<div class="encrypted-data" id="encrypted-leadera-db-docker">
Ck5ZVks0UEVHd21PSG1BbkdrOElBVWMrbHlGSnRuRUF2WDZaZGRCcm8vSUxSV0hPWEJHWXl3Z2dsRnZRWjE4QkxETGI1RHVBOEdQQUlkQi9Md1RIUlhZTzBLc210bFpRVldHRWVlWGxYQW9FWHBhNXRoZW9PUWhlYmtXNkxtaUt5TkdBVlcyejlySzNuejZObnp0WWRuNDlMdkdNanJIdVI0SXdDTGJsL3BZYTk2Q1BOUm54R0RGbGR1Rmk4bE1Tc3BNMHJCRmkvYlpoTkdoenkzNlZpQ2wrYUtyNVA5Y2xlMFp2TThFOGF2LzZjNUpqZ0R0ODhRRkkzVllkVGFUQ0UwK3VIc1hsbkpON1FnZy9LSDdrRAoKCg==
</div>
<div class="decrypted-fields" id="decrypted-leadera-db-docker" style="display: none;">
</div>
<button class="btn btn-primary mt-3 decrypt-btn" data-id="leadera-db-docker">
Расшифровать
</button>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+179
View File
@@ -0,0 +1,179 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Mac Studio — leadera-api БД (локальная) — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Фильтры</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../creds/">Все креды</a></li>
</ul>
<h6 class="mt-3">Сервисы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../creds/?service=postgresql">PostgreSQL</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/?service=vpn">VPN</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/?service=vps">VPS</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content creds-card">
<h1>Mac Studio — leadera-api БД (локальная)</h1>
<p>PostgreSQL (Docker) для Leadera</p>
<p class="text-muted mb-2"><strong>Сервис:</strong> PostgreSQL</p>
<div class="encrypted-data" id="encrypted-leadera-db-local">
CnA3SXc3WTN6Ymoxa0xCY2JPWEdvTzI3b0R3Rjg1QWh4Qlc3c2FUNTM4aHhpMG9nSnB5RmVNNDlHRHVMSHp4dXlrbnZkTkMvcngzdGI0QUZuR2tDZUhTcnJDbWorVks4Wnh0N3VqZXVqVkpTUnVPZWVVbHNxa0hkbG1haVhsMktRa25ySXNxVkNpM1RubjBWNXFjRnh2bysxS3RjK3N1ckY2YkJwV3JUSHpXVjVtTHRXVmZENkM2a3Z2UC9VRmxkRkJENnYrRlFzNzl5Zm9PZS9qL2JVcnRwdDZ2NVZuZGJiQm1oVUFRY3kxQlYycnBYeE8zNzNkVGNMUTZjb1JXa3QvUkZvCgoK
</div>
<div class="decrypted-fields" id="decrypted-leadera-db-local" style="display: none;">
</div>
<button class="btn btn-primary mt-3 decrypt-btn" data-id="leadera-db-local">
Расшифровать
</button>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+179
View File
@@ -0,0 +1,179 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>VPN VPS — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Фильтры</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../creds/">Все креды</a></li>
</ul>
<h6 class="mt-3">Сервисы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../creds/?service=postgresql">PostgreSQL</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/?service=vpn">VPN</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/?service=vps">VPS</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content creds-card">
<h1>VPN VPS</h1>
<p>VPN сервер (Amnezia)</p>
<p class="text-muted mb-2"><strong>Сервис:</strong> VPN</p>
<div class="encrypted-data" id="encrypted-vpn-vps">
CllFSTE2TkFKNzhkM2xtU2EvbGNhOFp4Y3p0K3U2R3lNVVlIZHVYNDdWb0ZRZGowSXhvemQ4UjZ5WG9CN2VNK0FqaEN0TkdrT3hHbE9qMnM3M0FCT0JqTEVJVkloRDRaK3hUeXpkdGFoNFZweUxvbHRZT2VOWXNuYklJRkFSZEYvRkJZcTVDT1hvaGhYczMzSzVvenpucnREZC9hd2JLTWpsL3NiUXFqWEFaK0EzWlNvYjYvNXVVK2ZGS2V0WExSNnY0WkxBWVE1N2lpRDIxSW1TTFNnZ3d2K3JKZ0s1WHlQREtFUEQ0TjVuT3NpRHJMZ291a1ZCTXZnSjU0UHFmUHAySG5pKzJ0ZEtPbE1uT0cybnBUdXU0U2t5QUxjZkZhcgoKCg==
</div>
<div class="decrypted-fields" id="decrypted-vpn-vps" style="display: none;">
</div>
<button class="btn btn-primary mt-3 decrypt-btn" data-id="vpn-vps">
Расшифровать
</button>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+179
View File
@@ -0,0 +1,179 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>VPS reg.ru — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Фильтры</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../creds/">Все креды</a></li>
</ul>
<h6 class="mt-3">Сервисы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../creds/?service=postgresql">PostgreSQL</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/?service=vpn">VPN</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/?service=vps">VPS</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content creds-card">
<h1>VPS reg.ru</h1>
<p>VPS хостинг (реверс-прокси)</p>
<p class="text-muted mb-2"><strong>Сервис:</strong> VPS</p>
<div class="encrypted-data" id="encrypted-vps-reg-ru">
CklwWVhMTXRnQ0ZsR1E1NTBEWkNManEzN1Zzbk5xTDA4Um4wM2lSUzdrUTdvekJaTnNpWnlTRnpEQXZZaDR4SUh5dFJEeTBTejBLR1VYZWtyMFMrY05pSnNtdFo4a2owUGQwSmhldmh4VE1aRjJraEZ2cy9MRldvVEw1WndBSjM0eS9xZkx3MmdhV1g5MFZaRHUwd08rS2VBUWVYaHJXbW9sLzJ6VWxmV1gxQWloeVlxRDJ2UnoraDJGY2pEOHViWU9YRzM1UHlYN09sVjFIUFhnRHY1WC9iRk5yeHpQYzg2N1VPd0I0YUd4WTlhCgoK
</div>
<div class="decrypted-fields" id="decrypted-vps-reg-ru" style="display: none;">
</div>
<button class="btn btn-primary mt-3 decrypt-btn" data-id="vps-reg-ru">
Расшифровать
</button>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+413
View File
@@ -0,0 +1,413 @@
:root {
--warm-bg: #f5f0e8;
--warm-primary: #c4623a;
--warm-text: #3d3530;
--warm-gray: #6b6560;
--warm-accent: #d4a853;
--warm-white: #fffdf9;
}
body {
background-color: var(--warm-bg);
color: var(--warm-text);
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-size: 1rem;
min-height: 100vh;
display: flex;
flex-direction: column;
}
/* Header */
.site-header {
background-color: var(--warm-primary);
padding: 0.5rem 0;
}
.site-header .navbar-brand {
color: var(--warm-white);
font-weight: 600;
}
.site-header .nav-link {
color: rgba(255, 255, 255, 0.85);
padding: 0.5rem 1rem;
transition: color 0.2s;
}
.site-header .nav-link:hover,
.site-header .nav-link.active {
color: var(--warm-white);
background-color: rgba(255, 255, 255, 0.1);
border-radius: 4px;
}
.navbar-toggler {
border-color: rgba(255, 255, 255, 0.5);
}
.navbar-toggler-icon {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
}
.search-form input {
background-color: rgba(255, 255, 255, 0.9);
border: none;
}
.search-form input:focus {
background-color: #fff;
box-shadow: 0 0 0 2px var(--warm-accent);
}
/* Search Results */
.search-results {
position: absolute;
top: 100%;
right: 0;
left: 0;
background: var(--warm-white);
border-top: 1px solid var(--warm-gray);
box-shadow: 0 4px 12px rgba(0,0,0,0.15);
z-index: 1000;
max-height: 400px;
overflow-y: auto;
}
.search-results-content {
padding: 1rem;
max-width: 600px;
margin: 0 auto;
}
.search-results ul {
list-style: none;
padding: 0;
margin: 0;
}
.search-results li {
padding: 0.5rem 0;
border-bottom: 1px solid var(--warm-bg);
}
.search-results li:last-child {
border-bottom: none;
}
.search-results a {
color: var(--warm-text);
text-decoration: none;
}
.search-results a:hover {
color: var(--warm-primary);
}
/* Sidebar */
.sidebar {
background-color: var(--warm-white);
border-right: 1px solid #e0d8cc;
min-height: calc(100vh - 60px);
padding: 1.5rem 1rem;
}
.sidebar-content h6 {
color: var(--warm-primary);
font-weight: 600;
margin-bottom: 0.75rem;
font-size: 0.875rem;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.sidebar-content .nav-link {
color: var(--warm-text);
padding: 0.375rem 0.75rem;
border-radius: 4px;
font-size: 0.9rem;
}
.sidebar-content .nav-link:hover {
background-color: var(--warm-bg);
}
/* Main Content */
.main-content {
padding: 2rem;
flex: 1;
}
/* Cards */
.card {
background-color: var(--warm-white);
border: 1px solid #e0d8cc;
border-radius: 8px;
transition: box-shadow 0.2s;
}
.card:hover {
box-shadow: 0 4px 12px rgba(0,0,0,0.08);
}
.card-title a {
color: var(--warm-text);
text-decoration: none;
}
.card-title a:hover {
color: var(--warm-primary);
}
/* Plan Cards */
.plan-card {
margin-bottom: 1rem;
}
.plan-card .status-badge {
font-size: 0.875rem;
}
.plan-card.planned {
border-left: 4px solid var(--warm-accent);
}
.plan-card.in-progress {
border-left: 4px solid #e67e22;
}
.plan-card.done {
border-left: 4px solid #27ae60;
opacity: 0.8;
}
.plan-card.cancelled {
border-left: 4px solid #e74c3c;
opacity: 0.6;
}
/* Diary Timeline */
.diary-timeline {
position: relative;
padding-left: 2rem;
}
.diary-timeline::before {
content: '';
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 2px;
background-color: var(--warm-primary);
}
.diary-entry {
position: relative;
margin-bottom: 2rem;
padding-bottom: 1.5rem;
border-bottom: 1px solid #e0d8cc;
}
.diary-entry:last-child {
border-bottom: none;
}
.diary-entry::before {
content: '';
position: absolute;
left: -2rem;
top: 0.5rem;
width: 12px;
height: 12px;
background-color: var(--warm-primary);
border-radius: 50%;
transform: translateX(-5px);
}
.diary-entry .time {
color: var(--warm-gray);
font-size: 0.875rem;
}
.diary-date {
color: var(--warm-primary);
font-weight: 600;
}
/* Credentials */
.creds-card {
position: relative;
}
.creds-card .encrypted-data {
font-family: monospace;
background: var(--warm-bg);
padding: 1rem;
border-radius: 4px;
word-break: break-all;
font-size: 0.75rem;
}
.creds-card .decrypted-fields {
background: var(--warm-bg);
padding: 1rem;
border-radius: 4px;
}
.creds-card .field-row {
display: flex;
margin-bottom: 0.5rem;
}
.creds-card .field-label {
font-weight: 600;
min-width: 100px;
color: var(--warm-gray);
}
.creds-card .field-value {
flex: 1;
font-family: monospace;
}
/* Article styles */
.article-content {
background-color: var(--warm-white);
padding: 2rem;
border-radius: 8px;
border: 1px solid #e0d8cc;
}
.article-content h1,
.article-content h2,
.article-content h3 {
color: var(--warm-text);
margin-top: 1.5rem;
}
.article-content h1 {
margin-top: 0;
padding-bottom: 0.5rem;
border-bottom: 2px solid var(--warm-primary);
}
.article-content table {
width: 100%;
margin-bottom: 1rem;
background: var(--warm-white);
}
.article-content th {
background-color: var(--warm-primary);
color: white;
font-weight: 600;
}
.article-content th,
.article-content td {
padding: 0.75rem;
border: 1px solid #e0d8cc;
}
.article-content code {
background-color: var(--warm-bg);
padding: 0.2rem 0.4rem;
border-radius: 3px;
font-size: 0.9em;
}
.article-content pre {
background-color: var(--warm-text);
color: var(--warm-bg);
padding: 1rem;
border-radius: 4px;
overflow-x: auto;
}
.article-content pre code {
background: none;
padding: 0;
}
.article-content a {
color: var(--warm-primary);
}
.article-content a:hover {
color: var(--warm-accent);
}
/* Tags */
.tags {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
margin-top: 1rem;
}
.tag {
background-color: var(--warm-bg);
color: var(--warm-gray);
padding: 0.25rem 0.75rem;
border-radius: 20px;
font-size: 0.8rem;
text-decoration: none;
}
.tag:hover {
background-color: var(--warm-primary);
color: white;
}
/* Footer */
.site-footer {
background-color: var(--warm-text);
color: var(--warm-bg);
padding: 1rem 0;
margin-top: auto;
}
/* Responsive */
@media (max-width: 767.98px) {
.sidebar {
position: fixed;
top: 60px;
left: 0;
bottom: 0;
z-index: 1000;
width: 280px;
transform: translateX(-100%);
transition: transform 0.3s;
}
.sidebar.show {
transform: translateX(0);
}
.main-content {
width: 100%;
padding: 1rem;
}
.search-form {
width: 100%;
margin-top: 0.5rem;
}
}
/* Context Quote */
.context-quote {
background-color: var(--warm-bg);
border-left: 4px solid var(--warm-accent);
padding: 1rem;
margin-top: 1rem;
font-style: italic;
}
.context-quote cite {
display: block;
text-align: right;
margin-top: 0.5rem;
font-style: normal;
color: var(--warm-gray);
}
+234
View File
@@ -0,0 +1,234 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>29 марта 2026 — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Фильтры</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Все записи</a></li>
</ul>
<h6 class="mt-3">Теги</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../tags/angular/">angular</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/go/">go</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/docker/">docker</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/eversolo/">eversolo</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/hugo/">hugo</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/docs/">docs</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/identity/">identity</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/infrastructure/">infrastructure</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/companion/">companion</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>29 марта 2026</h1>
<p class="diary-date">29.03.2026</p>
<h2 id="timeline">Timeline</h2>
<ul>
<li><strong>20:03</strong> — Настроили Angular + Go проекты (leadera) через pm2, удалили proxy.conf, подняли PostgreSQL в Docker</li>
<li><strong>20:31</strong> — Изучили API Eversolo T8 — полный список REST-эндпоинтов для управления музыкой</li>
<li><strong>20:49</strong> — Обсудили важность записи контекста в файлы для сохранения памяти между сессиями</li>
<li><strong>21:13</strong> — Начали проект docs.a2v.space — персональная документация на Hugo</li>
<li><strong>21:44</strong> — Завершили настройку Identity (Братан, SOUL.md, USER.md, IDENTITY.md)</li>
<li><strong>22:15</strong> — Документировали инфраструктуру: VPS reverse proxy (claw.a2v.space, code.a2v.space, sand.a2v.space, docs.a2v.space)</li>
<li><strong>22:31</strong> — Настроили docs.a2v.space: Hugo сайт, 83 страницы, Bootstrap 5 тёмная тема, AES-256-GCM шифрование кредов (мастер-пароль: Popoloka16!)</li>
<li><strong>22:47</strong> — Добавили Basic auth: agaltsovav / Magamet787! для доступа к документации</li>
<li><strong>23:02</strong> — Создали cron задачу docs-a2v-daily-sync на ежедневное обновление в 03:00 МСК</li>
<li><strong>23:18</strong> — Полностью задокументировали Eversolo T8 API (воспроизведение, громкость, дисплей, питание, поиск и т.д.)</li>
<li><strong>23:45</strong> — Переписали TOOLS.md как полный справочник по инфраструктуре</li>
</ul>
<h2 id="eversolo-companion--статус-проекта">Eversolo Companion — статус проекта</h2>
<p><strong>Backend (Go + Gin):</strong></p>
<ul>
<li>Репозиторий: ~/Projects/eversolo-companion</li>
<li>Состояние: собран, 17+ REST API эндпоинтов, WebSocket, CORS, state poller</li>
</ul>
<p><strong>Frontend (Angular 17):</strong></p>
<ul>
<li>Состояние: собран, тёмная тема (Spotify-like), 5 экранов, 5 сервисов</li>
<li>Dev server: pm2 (eversolo-fe), порт 8096</li>
</ul>
<p><strong>Инфраструктура:</strong></p>
<ul>
<li>PostgreSQL: Docker, порт 5433, миграции готовы</li>
<li>Docker Compose: рабочий (postgres + api + frontend)</li>
</ul>
<p><strong>Проблема:</strong> нет доступа к Eversolo из OpenClaw sandbox (192.168.0.156)</p>
<ul>
<li>Решение: настройка tools.elevated.allowFrom.webchat или запуск через launchd</li>
</ul>
<p><strong>Следующие шаги:</strong> после решения сети — этапы 3-9 (библиотека sync, плейлисты, scrobbler, обложки)</p>
<div class="tags">
<a href="../../tags/angular/" class="tag">angular</a>
<a href="../../tags/go/" class="tag">go</a>
<a href="../../tags/docker/" class="tag">docker</a>
<a href="../../tags/eversolo/" class="tag">eversolo</a>
<a href="../../tags/hugo/" class="tag">hugo</a>
<a href="../../tags/docs/" class="tag">docs</a>
<a href="../../tags/identity/" class="tag">identity</a>
<a href="../../tags/infrastructure/" class="tag">infrastructure</a>
<a href="../../tags/companion/" class="tag">companion</a>
</div>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+205
View File
@@ -0,0 +1,205 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Diaries — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Фильтры</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../diary/">Все записи</a></li>
</ul>
<h6 class="mt-3">Теги</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../tags/angular/">angular</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/go/">go</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/docker/">docker</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/eversolo/">eversolo</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/hugo/">hugo</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/docs/">docs</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/identity/">identity</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/infrastructure/">infrastructure</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/companion/">companion</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Дневник</h1>
<div class="diary-timeline">
<div class="diary-entry">
<div class="diary-date">29.03.2026</div>
<h3><a href="../diary/2026-03-29/">29 марта 2026</a></h3>
<div class="tags">
<a href="../tags/angular/" class="tag">angular</a>
<a href="../tags/go/" class="tag">go</a>
<a href="../tags/docker/" class="tag">docker</a>
<a href="../tags/eversolo/" class="tag">eversolo</a>
<a href="../tags/hugo/" class="tag">hugo</a>
<a href="../tags/docs/" class="tag">docs</a>
<a href="../tags/identity/" class="tag">identity</a>
<a href="../tags/infrastructure/" class="tag">infrastructure</a>
<a href="../tags/companion/" class="tag">companion</a>
</div>
</div>
</div>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../js/search.js"></script>
<script src="../js/creds.js"></script>
</body>
</html>
+1
View File
@@ -0,0 +1 @@
[{"content":"Timeline 20:03 — Настроили Angular + Go проекты (leadera) через pm2, удалили proxy.conf, подняли PostgreSQL в Docker 20:31 — Изучили API Eversolo T8 — полный список REST-эндпоинтов для управления музыкой 20:49 — Обсудили важность записи контекста в файлы для сохранения памяти между сессиями 21:13 — Начали проект docs.a2v.space — персональная документация на Hugo 21:44 — Завершили настройку Identity (Братан, SOUL.md, USER.md, IDENTITY.md) 22:15 — Документировали инфраструктуру: VPS reverse proxy (claw.a2v.space, code.a2v.space, sand.a2v.space, docs.a2v.space) 22:31 — Настроили docs.a2v.space: Hugo сайт, 83 страницы, Bootstrap 5 тёмная тема, AES-256-GCM шифрование кредов (мастер-пароль: Popoloka16!) 22:47 — Добавили Basic auth: agaltsovav / Magamet787! для доступа к документации 23:02 — Создали cron задачу docs-a2v-daily-sync на ежедневное обновление в 03:00 МСК 23:18 — Полностью задокументировали Eversolo T8 API (воспроизведение, громкость, дисплей, питание, поиск и т.д.) 23:45 — Переписали TOOLS.md как полный справочник по инфраструктуре Eversolo Companion — статус проекта Backend (Go + Gin):\nРепозиторий: ~/Projects/eversolo-companion Состояние: собран, 17+ REST API эндпоинтов, WebSocket, CORS, state poller Frontend (Angular 17):\nСостояние: собран, тёмная тема (Spotify-like), 5 экранов, 5 сервисов Dev server: pm2 (eversolo-fe), порт 8096 Инфраструктура:\nPostgreSQL: Docker, порт 5433, миграции готовы Docker Compose: рабочий (postgres + api + frontend) Проблема: нет доступа к Eversolo из OpenClaw sandbox (192.168.0.156)\nРешение: настройка tools.elevated.allowFrom.webchat или запуск через launchd Следующие шаги: после решения сети — этапы 3-9 (библиотека sync, плейлисты, scrobbler, обложки)\n","section":"diary","tags":["angular","go","docker","eversolo","hugo","docs","identity","infrastructure","companion"],"title":"29 марта 2026","url":"/diary/2026-03-29/"}]
+280
View File
@@ -0,0 +1,280 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Подключение claw.a2v.space (OpenClaw) — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Фильтры</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../guides/">Все инструкции</a></li>
</ul>
<h6 class="mt-3">Теги</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../tags/ssh/">ssh</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/tunnel/">tunnel</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/vps/">vps</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/reverse-proxy/">reverse-proxy</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/nginx/">nginx</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/devops/">devops</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/openclaw/">openclaw</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/opencode/">opencode</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/angular/">angular</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/go/">go</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/docker/">docker</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Подключение claw.a2v.space (OpenClaw)</h1>
<div class="tags mb-3">
<a href="../../tags/openclaw/" class="tag">openclaw</a>
<a href="../../tags/ssh/" class="tag">ssh</a>
<a href="../../tags/nginx/" class="tag">nginx</a>
<a href="../../tags/vps/" class="tag">vps</a>
<a href="../../tags/reverse-proxy/" class="tag">reverse-proxy</a>
</div>
<h2 id="архитектура">Архитектура</h2>
<pre tabindex="0"><code>Mac Studio (192.168.0.37:18789)
→ autossh SSH-туннель
→ VPS 95.163.232.9:8080
→ nginx HTTPS
→ https://claw.a2v.space
</code></pre><h2 id="шаги-настройки">Шаги настройки</h2>
<h3 id="1-dns">1. DNS</h3>
<p>A-запись <code>claw.a2v.space</code><code>95.163.232.9</code></p>
<p>NS-серверы: <code>ns1.hosting.reg.ru</code>, <code>ns2.hosting.reg.ru</code></p>
<h3 id="2-mac-studio--openclaw">2. Mac Studio — OpenClaw</h3>
<ul>
<li>Порт: 18789</li>
<li>Конфиг: <code>~/.openclaw/openclaw.json</code></li>
</ul>
<h3 id="3-ssh-туннель-launchd">3. SSH-туннель (launchd)</h3>
<p>Plist: <code>~/Library/LaunchAgents/com.openclaw.sshtunnel.plist</code></p>
<p>Ключевой флаг: <code>-R 8080:localhost:18789</code></p>
<h3 id="4-vps--nginx-конфиг">4. VPS — nginx конфиг</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-nginx" data-lang="nginx"><span style="display:flex;"><span><span style="color:#66d9ef">server</span> {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">listen</span> <span style="color:#ae81ff">80</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">server_name</span> <span style="color:#e6db74">claw.a2v.space</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">return</span> <span style="color:#ae81ff">301</span> <span style="color:#e6db74">https://</span>$server_name$request_uri;
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">server</span> {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">listen</span> <span style="color:#ae81ff">443</span> <span style="color:#e6db74">ssl</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">server_name</span> <span style="color:#e6db74">claw.a2v.space</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">ssl_certificate</span> <span style="color:#e6db74">/etc/letsencrypt/live/claw.a2v.space/fullchain.pem</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">ssl_certificate_key</span> <span style="color:#e6db74">/etc/letsencrypt/live/claw.a2v.space/privkey.pem</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">location</span> <span style="color:#e6db74">/</span> {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_pass</span> <span style="color:#e6db74">http://127.0.0.1:8080</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">Host</span> $host;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">X-Real-IP</span> $remote_addr;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">X-Forwarded-For</span> $proxy_add_x_forwarded_for;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">X-Forwarded-Proto</span> $scheme;
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><h3 id="5-ssl-сертификат">5. SSL-сертификат</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>certbot certonly --nginx -d claw.a2v.space
</span></span></code></pre></div><h3 id="6-openclaw-config">6. OpenClaw config</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;allowedOrigins&#34;</span>: [<span style="color:#e6db74">&#34;https://claw.a2v.space&#34;</span>],
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;trustedProxies&#34;</span>: [<span style="color:#e6db74">&#34;127.0.0.1&#34;</span>]
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+293
View File
@@ -0,0 +1,293 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Подключение code.a2v.space (OpenCode) — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Фильтры</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../guides/">Все инструкции</a></li>
</ul>
<h6 class="mt-3">Теги</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../tags/ssh/">ssh</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/tunnel/">tunnel</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/vps/">vps</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/reverse-proxy/">reverse-proxy</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/nginx/">nginx</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/devops/">devops</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/openclaw/">openclaw</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/opencode/">opencode</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/angular/">angular</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/go/">go</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/docker/">docker</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Подключение code.a2v.space (OpenCode)</h1>
<div class="tags mb-3">
<a href="../../tags/opencode/" class="tag">opencode</a>
<a href="../../tags/ssh/" class="tag">ssh</a>
<a href="../../tags/nginx/" class="tag">nginx</a>
<a href="../../tags/vps/" class="tag">vps</a>
<a href="../../tags/reverse-proxy/" class="tag">reverse-proxy</a>
</div>
<h2 id="архитектура">Архитектура</h2>
<pre tabindex="0"><code>Mac Studio (localhost:4096)
→ autossh SSH-туннель (-R 8081:localhost:4096)
→ VPS 95.163.232.9:8081
→ nginx HTTPS
→ https://code.a2v.space
</code></pre><h2 id="параметры">Параметры</h2>
<table>
<thead>
<tr>
<th>Параметр</th>
<th>Значение</th>
</tr>
</thead>
<tbody>
<tr>
<td>Локальный порт</td>
<td>4096</td>
</tr>
<tr>
<td>Туннель порт</td>
<td>8081</td>
</tr>
<tr>
<td>pm2 процесс</td>
<td><code>opencode</code></td>
</tr>
<tr>
<td>SSL сертификат</td>
<td><code>/etc/letsencrypt/live/code.a2v.space/</code></td>
</tr>
</tbody>
</table>
<h2 id="nginx-конфиг">nginx конфиг</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-nginx" data-lang="nginx"><span style="display:flex;"><span><span style="color:#66d9ef">server</span> {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">listen</span> <span style="color:#ae81ff">80</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">server_name</span> <span style="color:#e6db74">code.a2v.space</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">return</span> <span style="color:#ae81ff">301</span> <span style="color:#e6db74">https://</span>$server_name$request_uri;
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">server</span> {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">listen</span> <span style="color:#ae81ff">443</span> <span style="color:#e6db74">ssl</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">server_name</span> <span style="color:#e6db74">code.a2v.space</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">ssl_certificate</span> <span style="color:#e6db74">/etc/letsencrypt/live/code.a2v.space/fullchain.pem</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">ssl_certificate_key</span> <span style="color:#e6db74">/etc/letsencrypt/live/code.a2v.space/privkey.pem</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">location</span> <span style="color:#e6db74">/</span> {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_pass</span> <span style="color:#e6db74">http://127.0.0.1:8081</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">Host</span> $host;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">X-Real-IP</span> $remote_addr;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">X-Forwarded-For</span> $proxy_add_x_forwarded_for;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">X-Forwarded-Proto</span> $scheme;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_http_version</span> <span style="color:#ae81ff">1</span><span style="color:#e6db74">.1</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">Upgrade</span> $http_upgrade;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">Connection</span> <span style="color:#e6db74">&#34;upgrade&#34;</span>;
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><h2 id="ssl-сертификат">SSL-сертификат</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>certbot certonly --nginx -d code.a2v.space
</span></span></code></pre></div>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+573
View File
@@ -0,0 +1,573 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Guides — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Фильтры</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../guides/">Все инструкции</a></li>
</ul>
<h6 class="mt-3">Теги</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../tags/ssh/">ssh</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/tunnel/">tunnel</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/vps/">vps</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/reverse-proxy/">reverse-proxy</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/nginx/">nginx</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/devops/">devops</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/openclaw/">openclaw</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/opencode/">opencode</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/angular/">angular</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/go/">go</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/docker/">docker</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Инструкции</h1>
<div class="row">
<div class="col-md-6 mb-4">
<div class="card h-100">
<div class="card-body">
<h3 class="card-title"><a href="../guides/ssh-tunnels-vps/">SSH туннели для VPS reverse proxy</a></h3>
<p class="card-text"><h2 id="настройка-ssh-туннелей">Настройка SSH туннелей</h2>
<h3 id="vps-regru-951632329">VPS reg.ru (95.163.232.9)</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># На Mac Studio: создать туннель для каждого сервиса</span>
</span></span><span style="display:flex;"><span>ssh -N -R 8080:localhost:8080 root@95.163.232.9 <span style="color:#75715e"># leadera-api</span>
</span></span><span style="display:flex;"><span>ssh -N -R 8081:localhost:4096 root@95.163.232.9 <span style="color:#75715e"># opencode</span>
</span></span><span style="display:flex;"><span>ssh -N -R 8082:localhost:4200 root@95.163.232.9 <span style="color:#75715e"># leadera-fe</span>
</span></span><span style="display:flex;"><span>ssh -N -R 8083:localhost:8080 root@95.163.232.9 <span style="color:#75715e"># docs-a2v</span>
</span></span></code></pre></div><h3 id="настройка-launchd-plist">Настройка launchd plist</h3>
<p><strong>Файл</strong>: <code>~/Library/LaunchAgents/com.openclaw.sshtunnel.plist</code></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#75715e">&lt;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">&lt;!DOCTYPE plist PUBLIC &#34;-//Apple//DTD PLIST 1.0//EN&#34; &#34;http://www.apple.com/DTDs/PropertyList-1.0.dtd&#34;&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;plist</span> <span style="color:#a6e22e">version=</span><span style="color:#e6db74">&#34;1.0&#34;</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;dict&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;key&gt;</span>Label<span style="color:#f92672">&lt;/key&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>com.openclaw.sshtunnel<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;key&gt;</span>ProgramArguments<span style="color:#f92672">&lt;/key&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;array&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>ssh<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>-N<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>-R<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>8080:localhost:8080<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>root@95.163.232.9<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;/array&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;key&gt;</span>RunAtLoad<span style="color:#f92672">&lt;/key&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;true/&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;key&gt;</span>KeepAlive<span style="color:#f92672">&lt;/key&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;true/&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;/dict&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;/plist&gt;</span>
</span></span></code></pre></div><h3 id="автозапуск">Автозапуск</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># Загрузить plist</span>
</span></span><span style="display:flex;"><span>launchctl load ~/Library/LaunchAgents/com.openclaw.sshtunnel.plist
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Проверить статус</span>
</span></span><span style="display:flex;"><span>launchctl list | grep sshtunnel
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Удалить (при необходимости)</span>
</span></span><span style="display:flex;"><span>launchctl unload ~/Library/LaunchAgents/com.openclaw.sshtunnel.plist
</span></span></code></pre></div><h2 id="доступ-к-сервисам">Доступ к сервисам</h2>
<p>Через reverse proxy на VPS:</p></p>
<div class="tags">
<a href="../tags/ssh/" class="tag">ssh</a>
<a href="../tags/tunnel/" class="tag">tunnel</a>
<a href="../tags/vps/" class="tag">vps</a>
<a href="../tags/reverse-proxy/" class="tag">reverse-proxy</a>
</div>
</div>
</div>
</div>
<div class="col-md-6 mb-4">
<div class="card h-100">
<div class="card-body">
<h3 class="card-title"><a href="../guides/vps-reverse-proxy/">Настройка VPS как реверс-прокси</a></h3>
<p class="card-text"><h2 id="общая-схема">Общая схема</h2>
<pre tabindex="0"><code>Mac Studio (локальная сеть)
→ autossh (SSH-туннели)
→ VPS 95.163.232.9 (Debian)
→ nginx (HTTPS reverse proxy)
→ интернет
</code></pre><h2 id="что-нужно-на-vps">Что нужно на VPS</h2>
<h3 id="1-установленные-пакеты">1. Установленные пакеты</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>apt update
</span></span><span style="display:flex;"><span>apt install nginx certbot python3-certbot-nginx
</span></span></code></pre></div><h3 id="2-ssh-доступ">2. SSH-доступ</h3>
<ul>
<li>Авторизация только по ключам</li>
<li>Публичный ключ с Mac Studio добавлен в <code>/root/.ssh/authorized_keys</code></li>
</ul>
<h3 id="3-nginx">3. nginx</h3>
<p>Для каждого домена создать server block:</p>
<ul>
<li>HTTP → редирект на HTTPS</li>
<li>HTTPS с SSL-сертификатом Let&rsquo;s Encrypt</li>
<li><code>proxy_pass</code> на localhost-порт туннеля</li>
</ul>
<p>Пример структуры:</p></p>
<div class="tags">
<a href="../tags/vps/" class="tag">vps</a>
<a href="../tags/nginx/" class="tag">nginx</a>
<a href="../tags/ssh/" class="tag">ssh</a>
<a href="../tags/reverse-proxy/" class="tag">reverse-proxy</a>
<a href="../tags/devops/" class="tag">devops</a>
</div>
</div>
</div>
</div>
<div class="col-md-6 mb-4">
<div class="card h-100">
<div class="card-body">
<h3 class="card-title"><a href="../guides/claw-a2v-space/">Подключение claw.a2v.space (OpenClaw)</a></h3>
<p class="card-text"><h2 id="архитектура">Архитектура</h2>
<pre tabindex="0"><code>Mac Studio (192.168.0.37:18789)
→ autossh SSH-туннель
→ VPS 95.163.232.9:8080
→ nginx HTTPS
→ https://claw.a2v.space
</code></pre><h2 id="шаги-настройки">Шаги настройки</h2>
<h3 id="1-dns">1. DNS</h3>
<p>A-запись <code>claw.a2v.space</code><code>95.163.232.9</code></p>
<p>NS-серверы: <code>ns1.hosting.reg.ru</code>, <code>ns2.hosting.reg.ru</code></p>
<h3 id="2-mac-studio--openclaw">2. Mac Studio — OpenClaw</h3>
<ul>
<li>Порт: 18789</li>
<li>Конфиг: <code>~/.openclaw/openclaw.json</code></li>
</ul>
<h3 id="3-ssh-туннель-launchd">3. SSH-туннель (launchd)</h3>
<p>Plist: <code>~/Library/LaunchAgents/com.openclaw.sshtunnel.plist</code></p>
<p>Ключевой флаг: <code>-R 8080:localhost:18789</code></p>
<h3 id="4-vps--nginx-конфиг">4. VPS — nginx конфиг</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-nginx" data-lang="nginx"><span style="display:flex;"><span><span style="color:#66d9ef">server</span> {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">listen</span> <span style="color:#ae81ff">80</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">server_name</span> <span style="color:#e6db74">claw.a2v.space</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">return</span> <span style="color:#ae81ff">301</span> <span style="color:#e6db74">https://</span>$server_name$request_uri;
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">server</span> {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">listen</span> <span style="color:#ae81ff">443</span> <span style="color:#e6db74">ssl</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">server_name</span> <span style="color:#e6db74">claw.a2v.space</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">ssl_certificate</span> <span style="color:#e6db74">/etc/letsencrypt/live/claw.a2v.space/fullchain.pem</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">ssl_certificate_key</span> <span style="color:#e6db74">/etc/letsencrypt/live/claw.a2v.space/privkey.pem</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">location</span> <span style="color:#e6db74">/</span> {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_pass</span> <span style="color:#e6db74">http://127.0.0.1:8080</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">Host</span> $host;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">X-Real-IP</span> $remote_addr;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">X-Forwarded-For</span> $proxy_add_x_forwarded_for;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">X-Forwarded-Proto</span> $scheme;
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><h3 id="5-ssl-сертификат">5. SSL-сертификат</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>certbot certonly --nginx -d claw.a2v.space
</span></span></code></pre></div><h3 id="6-openclaw-config">6. OpenClaw config</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;allowedOrigins&#34;</span>: [<span style="color:#e6db74">&#34;https://claw.a2v.space&#34;</span>],
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;trustedProxies&#34;</span>: [<span style="color:#e6db74">&#34;127.0.0.1&#34;</span>]
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div></p>
<div class="tags">
<a href="../tags/openclaw/" class="tag">openclaw</a>
<a href="../tags/ssh/" class="tag">ssh</a>
<a href="../tags/nginx/" class="tag">nginx</a>
<a href="../tags/vps/" class="tag">vps</a>
<a href="../tags/reverse-proxy/" class="tag">reverse-proxy</a>
</div>
</div>
</div>
</div>
<div class="col-md-6 mb-4">
<div class="card h-100">
<div class="card-body">
<h3 class="card-title"><a href="../guides/code-a2v-space/">Подключение code.a2v.space (OpenCode)</a></h3>
<p class="card-text"><h2 id="архитектура">Архитектура</h2>
<pre tabindex="0"><code>Mac Studio (localhost:4096)
→ autossh SSH-туннель (-R 8081:localhost:4096)
→ VPS 95.163.232.9:8081
→ nginx HTTPS
→ https://code.a2v.space
</code></pre><h2 id="параметры">Параметры</h2>
<table>
<thead>
<tr>
<th>Параметр</th>
<th>Значение</th>
</tr>
</thead>
<tbody>
<tr>
<td>Локальный порт</td>
<td>4096</td>
</tr>
<tr>
<td>Туннель порт</td>
<td>8081</td>
</tr>
<tr>
<td>pm2 процесс</td>
<td><code>opencode</code></td>
</tr>
<tr>
<td>SSL сертификат</td>
<td><code>/etc/letsencrypt/live/code.a2v.space/</code></td>
</tr>
</tbody>
</table>
<h2 id="nginx-конфиг">nginx конфиг</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-nginx" data-lang="nginx"><span style="display:flex;"><span><span style="color:#66d9ef">server</span> {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">listen</span> <span style="color:#ae81ff">80</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">server_name</span> <span style="color:#e6db74">code.a2v.space</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">return</span> <span style="color:#ae81ff">301</span> <span style="color:#e6db74">https://</span>$server_name$request_uri;
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">server</span> {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">listen</span> <span style="color:#ae81ff">443</span> <span style="color:#e6db74">ssl</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">server_name</span> <span style="color:#e6db74">code.a2v.space</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">ssl_certificate</span> <span style="color:#e6db74">/etc/letsencrypt/live/code.a2v.space/fullchain.pem</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">ssl_certificate_key</span> <span style="color:#e6db74">/etc/letsencrypt/live/code.a2v.space/privkey.pem</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">location</span> <span style="color:#e6db74">/</span> {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_pass</span> <span style="color:#e6db74">http://127.0.0.1:8081</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">Host</span> $host;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">X-Real-IP</span> $remote_addr;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">X-Forwarded-For</span> $proxy_add_x_forwarded_for;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">X-Forwarded-Proto</span> $scheme;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_http_version</span> <span style="color:#ae81ff">1</span><span style="color:#e6db74">.1</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">Upgrade</span> $http_upgrade;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">Connection</span> <span style="color:#e6db74">&#34;upgrade&#34;</span>;
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><h2 id="ssl-сертификат">SSL-сертификат</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>certbot certonly --nginx -d code.a2v.space
</span></span></code></pre></div></p>
<div class="tags">
<a href="../tags/opencode/" class="tag">opencode</a>
<a href="../tags/ssh/" class="tag">ssh</a>
<a href="../tags/nginx/" class="tag">nginx</a>
<a href="../tags/vps/" class="tag">vps</a>
<a href="../tags/reverse-proxy/" class="tag">reverse-proxy</a>
</div>
</div>
</div>
</div>
<div class="col-md-6 mb-4">
<div class="card h-100">
<div class="card-body">
<h3 class="card-title"><a href="../guides/sand-a2v-space/">Подключение sand.a2v.space (Leadera Project)</a></h3>
<p class="card-text"><h2 id="архитектура">Архитектура</h2>
<pre tabindex="0"><code>Mac Studio
├─ Frontend (Angular) :4200 (pm2: leadera-fe)
├─ Backend (Go) :8080 (pm2: leadera-api)
└─ PostgreSQL 16 в Docker (Colima, container: app-leadera-db)
→ autossh SSH-туннель (-R 8082:localhost:4200 -R 8083:localhost:8080)
→ VPS 95.163.232.9
→ nginx HTTPS
→ https://sand.a2v.space
</code></pre><h2 id="параметры">Параметры</h2>
<table>
<thead>
<tr>
<th>Компонент</th>
<th>Локальный порт</th>
<th>Туннель порт</th>
<th>pm2 имя</th>
</tr>
</thead>
<tbody>
<tr>
<td>Frontend (Angular)</td>
<td>4200</td>
<td>8082</td>
<td>leadera-fe</td>
</tr>
<tr>
<td>Backend (Go)</td>
<td>8080</td>
<td>8083</td>
<td>leadera-api</td>
</tr>
</tbody>
</table>
<p>SSL сертификат: <code>/etc/letsencrypt/live/sand.a2v.space/</code></p>
<h2 id="nginx-конфиг">nginx конфиг</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-nginx" data-lang="nginx"><span style="display:flex;"><span><span style="color:#66d9ef">server</span> {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">listen</span> <span style="color:#ae81ff">80</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">server_name</span> <span style="color:#e6db74">sand.a2v.space</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">return</span> <span style="color:#ae81ff">301</span> <span style="color:#e6db74">https://</span>$server_name$request_uri;
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">server</span> {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">listen</span> <span style="color:#ae81ff">443</span> <span style="color:#e6db74">ssl</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">server_name</span> <span style="color:#e6db74">sand.a2v.space</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">ssl_certificate</span> <span style="color:#e6db74">/etc/letsencrypt/live/sand.a2v.space/fullchain.pem</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">ssl_certificate_key</span> <span style="color:#e6db74">/etc/letsencrypt/live/sand.a2v.space/privkey.pem</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">location</span> <span style="color:#e6db74">/api</span> {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_pass</span> <span style="color:#e6db74">http://127.0.0.1:8083</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">Host</span> $host;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">X-Real-IP</span> $remote_addr;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">X-Forwarded-For</span> $proxy_add_x_forwarded_for;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">X-Forwarded-Proto</span> $scheme;
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">location</span> <span style="color:#e6db74">/</span> {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_pass</span> <span style="color:#e6db74">http://127.0.0.1:8082</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">Host</span> $host;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">X-Real-IP</span> $remote_addr;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">X-Forwarded-For</span> $proxy_add_x_forwarded_for;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">X-Forwarded-Proto</span> $scheme;
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><h2 id="база-данных">База данных</h2>
<p>PostgreSQL 16 в Docker через Colima:</p></p>
<div class="tags">
<a href="../tags/angular/" class="tag">angular</a>
<a href="../tags/go/" class="tag">go</a>
<a href="../tags/docker/" class="tag">docker</a>
<a href="../tags/nginx/" class="tag">nginx</a>
<a href="../tags/vps/" class="tag">vps</a>
<a href="../tags/reverse-proxy/" class="tag">reverse-proxy</a>
</div>
</div>
</div>
</div>
</div>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../js/search.js"></script>
<script src="../js/creds.js"></script>
</body>
</html>
File diff suppressed because one or more lines are too long
+308
View File
@@ -0,0 +1,308 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Подключение sand.a2v.space (Leadera Project) — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Фильтры</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../guides/">Все инструкции</a></li>
</ul>
<h6 class="mt-3">Теги</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../tags/ssh/">ssh</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/tunnel/">tunnel</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/vps/">vps</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/reverse-proxy/">reverse-proxy</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/nginx/">nginx</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/devops/">devops</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/openclaw/">openclaw</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/opencode/">opencode</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/angular/">angular</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/go/">go</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/docker/">docker</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Подключение sand.a2v.space (Leadera Project)</h1>
<div class="tags mb-3">
<a href="../../tags/angular/" class="tag">angular</a>
<a href="../../tags/go/" class="tag">go</a>
<a href="../../tags/docker/" class="tag">docker</a>
<a href="../../tags/nginx/" class="tag">nginx</a>
<a href="../../tags/vps/" class="tag">vps</a>
<a href="../../tags/reverse-proxy/" class="tag">reverse-proxy</a>
</div>
<h2 id="архитектура">Архитектура</h2>
<pre tabindex="0"><code>Mac Studio
├─ Frontend (Angular) :4200 (pm2: leadera-fe)
├─ Backend (Go) :8080 (pm2: leadera-api)
└─ PostgreSQL 16 в Docker (Colima, container: app-leadera-db)
→ autossh SSH-туннель (-R 8082:localhost:4200 -R 8083:localhost:8080)
→ VPS 95.163.232.9
→ nginx HTTPS
→ https://sand.a2v.space
</code></pre><h2 id="параметры">Параметры</h2>
<table>
<thead>
<tr>
<th>Компонент</th>
<th>Локальный порт</th>
<th>Туннель порт</th>
<th>pm2 имя</th>
</tr>
</thead>
<tbody>
<tr>
<td>Frontend (Angular)</td>
<td>4200</td>
<td>8082</td>
<td>leadera-fe</td>
</tr>
<tr>
<td>Backend (Go)</td>
<td>8080</td>
<td>8083</td>
<td>leadera-api</td>
</tr>
</tbody>
</table>
<p>SSL сертификат: <code>/etc/letsencrypt/live/sand.a2v.space/</code></p>
<h2 id="nginx-конфиг">nginx конфиг</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-nginx" data-lang="nginx"><span style="display:flex;"><span><span style="color:#66d9ef">server</span> {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">listen</span> <span style="color:#ae81ff">80</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">server_name</span> <span style="color:#e6db74">sand.a2v.space</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">return</span> <span style="color:#ae81ff">301</span> <span style="color:#e6db74">https://</span>$server_name$request_uri;
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">server</span> {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">listen</span> <span style="color:#ae81ff">443</span> <span style="color:#e6db74">ssl</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">server_name</span> <span style="color:#e6db74">sand.a2v.space</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">ssl_certificate</span> <span style="color:#e6db74">/etc/letsencrypt/live/sand.a2v.space/fullchain.pem</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">ssl_certificate_key</span> <span style="color:#e6db74">/etc/letsencrypt/live/sand.a2v.space/privkey.pem</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">location</span> <span style="color:#e6db74">/api</span> {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_pass</span> <span style="color:#e6db74">http://127.0.0.1:8083</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">Host</span> $host;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">X-Real-IP</span> $remote_addr;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">X-Forwarded-For</span> $proxy_add_x_forwarded_for;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">X-Forwarded-Proto</span> $scheme;
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">location</span> <span style="color:#e6db74">/</span> {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_pass</span> <span style="color:#e6db74">http://127.0.0.1:8082</span>;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">Host</span> $host;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">X-Real-IP</span> $remote_addr;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">X-Forwarded-For</span> $proxy_add_x_forwarded_for;
</span></span><span style="display:flex;"><span> <span style="color:#f92672">proxy_set_header</span> <span style="color:#e6db74">X-Forwarded-Proto</span> $scheme;
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><h2 id="база-данных">База данных</h2>
<p>PostgreSQL 16 в Docker через Colima:</p>
<ul>
<li>Container: <code>app-leadera-db</code></li>
<li>Port: 5432</li>
</ul>
<h2 id="ssl-сертификат">SSL-сертификат</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>certbot certonly --nginx -d sand.a2v.space
</span></span></code></pre></div>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+283
View File
@@ -0,0 +1,283 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>SSH туннели для VPS reverse proxy — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Фильтры</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../guides/">Все инструкции</a></li>
</ul>
<h6 class="mt-3">Теги</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../tags/ssh/">ssh</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/tunnel/">tunnel</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/vps/">vps</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/reverse-proxy/">reverse-proxy</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/nginx/">nginx</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/devops/">devops</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/openclaw/">openclaw</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/opencode/">opencode</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/angular/">angular</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/go/">go</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/docker/">docker</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>SSH туннели для VPS reverse proxy</h1>
<div class="tags mb-3">
<a href="../../tags/ssh/" class="tag">ssh</a>
<a href="../../tags/tunnel/" class="tag">tunnel</a>
<a href="../../tags/vps/" class="tag">vps</a>
<a href="../../tags/reverse-proxy/" class="tag">reverse-proxy</a>
</div>
<h2 id="настройка-ssh-туннелей">Настройка SSH туннелей</h2>
<h3 id="vps-regru-951632329">VPS reg.ru (95.163.232.9)</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># На Mac Studio: создать туннель для каждого сервиса</span>
</span></span><span style="display:flex;"><span>ssh -N -R 8080:localhost:8080 root@95.163.232.9 <span style="color:#75715e"># leadera-api</span>
</span></span><span style="display:flex;"><span>ssh -N -R 8081:localhost:4096 root@95.163.232.9 <span style="color:#75715e"># opencode</span>
</span></span><span style="display:flex;"><span>ssh -N -R 8082:localhost:4200 root@95.163.232.9 <span style="color:#75715e"># leadera-fe</span>
</span></span><span style="display:flex;"><span>ssh -N -R 8083:localhost:8080 root@95.163.232.9 <span style="color:#75715e"># docs-a2v</span>
</span></span></code></pre></div><h3 id="настройка-launchd-plist">Настройка launchd plist</h3>
<p><strong>Файл</strong>: <code>~/Library/LaunchAgents/com.openclaw.sshtunnel.plist</code></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#75715e">&lt;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">&lt;!DOCTYPE plist PUBLIC &#34;-//Apple//DTD PLIST 1.0//EN&#34; &#34;http://www.apple.com/DTDs/PropertyList-1.0.dtd&#34;&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;plist</span> <span style="color:#a6e22e">version=</span><span style="color:#e6db74">&#34;1.0&#34;</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;dict&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;key&gt;</span>Label<span style="color:#f92672">&lt;/key&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>com.openclaw.sshtunnel<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;key&gt;</span>ProgramArguments<span style="color:#f92672">&lt;/key&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;array&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>ssh<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>-N<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>-R<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>8080:localhost:8080<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>root@95.163.232.9<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;/array&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;key&gt;</span>RunAtLoad<span style="color:#f92672">&lt;/key&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;true/&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;key&gt;</span>KeepAlive<span style="color:#f92672">&lt;/key&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;true/&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;/dict&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;/plist&gt;</span>
</span></span></code></pre></div><h3 id="автозапуск">Автозапуск</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># Загрузить plist</span>
</span></span><span style="display:flex;"><span>launchctl load ~/Library/LaunchAgents/com.openclaw.sshtunnel.plist
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Проверить статус</span>
</span></span><span style="display:flex;"><span>launchctl list | grep sshtunnel
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Удалить (при необходимости)</span>
</span></span><span style="display:flex;"><span>launchctl unload ~/Library/LaunchAgents/com.openclaw.sshtunnel.plist
</span></span></code></pre></div><h2 id="доступ-к-сервисам">Доступ к сервисам</h2>
<p>Через reverse proxy на VPS:</p>
<ul>
<li><strong>code.a2v.space</strong>: порт 8080 → Mac Studio:4096</li>
<li><strong>claw.a2v.space</strong>: порт 8081 → Mac Studio:8080 (leadera-api)</li>
<li><strong>sand.a2v.space</strong>: порт 8082 → Mac Studio:4200 (leadera-fe)</li>
<li><strong>docs.a2v.space</strong>: порт 8083 → Mac Studio:8080 (docs-a2v)</li>
</ul>
<h2 id="ssl">SSL</h2>
<p>Все сервисы используют Let&rsquo;s Encrypt сертификаты:</p>
<ul>
<li>Путь: <code>/etc/letsencrypt/live/{claw,code,sand}.a2v.space/</code></li>
<li>Автопродление через certbot</li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+297
View File
@@ -0,0 +1,297 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Настройка VPS как реверс-прокси — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Фильтры</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../guides/">Все инструкции</a></li>
</ul>
<h6 class="mt-3">Теги</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../tags/ssh/">ssh</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/tunnel/">tunnel</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/vps/">vps</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/reverse-proxy/">reverse-proxy</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/nginx/">nginx</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/devops/">devops</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/openclaw/">openclaw</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/opencode/">opencode</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/angular/">angular</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/go/">go</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/docker/">docker</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Настройка VPS как реверс-прокси</h1>
<div class="tags mb-3">
<a href="../../tags/vps/" class="tag">vps</a>
<a href="../../tags/nginx/" class="tag">nginx</a>
<a href="../../tags/ssh/" class="tag">ssh</a>
<a href="../../tags/reverse-proxy/" class="tag">reverse-proxy</a>
<a href="../../tags/devops/" class="tag">devops</a>
</div>
<h2 id="общая-схема">Общая схема</h2>
<pre tabindex="0"><code>Mac Studio (локальная сеть)
→ autossh (SSH-туннели)
→ VPS 95.163.232.9 (Debian)
→ nginx (HTTPS reverse proxy)
→ интернет
</code></pre><h2 id="что-нужно-на-vps">Что нужно на VPS</h2>
<h3 id="1-установленные-пакеты">1. Установленные пакеты</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>apt update
</span></span><span style="display:flex;"><span>apt install nginx certbot python3-certbot-nginx
</span></span></code></pre></div><h3 id="2-ssh-доступ">2. SSH-доступ</h3>
<ul>
<li>Авторизация только по ключам</li>
<li>Публичный ключ с Mac Studio добавлен в <code>/root/.ssh/authorized_keys</code></li>
</ul>
<h3 id="3-nginx">3. nginx</h3>
<p>Для каждого домена создать server block:</p>
<ul>
<li>HTTP → редирект на HTTPS</li>
<li>HTTPS с SSL-сертификатом Let&rsquo;s Encrypt</li>
<li><code>proxy_pass</code> на localhost-порт туннеля</li>
</ul>
<p>Пример структуры:</p>
<pre tabindex="0"><code>/etc/nginx/sites-available/
claw.a2v.space.conf
code.a2v.space.conf
sand.a2v.space.conf
</code></pre><h3 id="4-ssl-сертификаты">4. SSL-сертификаты</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>certbot certonly --nginx -d &lt;domain&gt;
</span></span><span style="display:flex;"><span>certbot renew --dry-run <span style="color:#75715e"># проверить автообновление</span>
</span></span></code></pre></div><h2 id="что-нужно-на-mac-studio">Что нужно на Mac Studio</h2>
<h3 id="autossh-через-launchd">autossh через launchd</h3>
<p>Plist: <code>~/Library/LaunchAgents/com.openclaw.sshtunnel.plist</code></p>
<p>Один plist с несколькими <code>-R</code> флагами:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#f92672">&lt;key&gt;</span>ProgramArguments<span style="color:#f92672">&lt;/key&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;array&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>/usr/local/bin/autossh<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>-M<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>0<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>-R<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>8080:localhost:18789<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>-R<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>8081:localhost:4096<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>-R<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>8082:localhost:4200<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>-R<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>8083:localhost:8080<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>root@95.163.232.9<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>-N<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>-i<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;string&gt;</span>/Users/<span style="color:#f92672">&lt;user&gt;</span>/.ssh/id_rsa<span style="color:#f92672">&lt;/string&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;/array&gt;</span>
</span></span></code></pre></div><h3 id="управление-launchd">Управление launchd</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>launchctl load ~/Library/LaunchAgents/com.openclaw.sshtunnel.plist
</span></span><span style="display:flex;"><span>launchctl start com.openclaw.sshtunnel
</span></span><span style="display:flex;"><span>launchctl stop com.openclaw.sshtunnel
</span></span></code></pre></div><h2 id="проверка">Проверка</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># На VPS</span>
</span></span><span style="display:flex;"><span>ss -tlnp | grep -E <span style="color:#e6db74">&#39;808[0-3]&#39;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Снаружи</span>
</span></span><span style="display:flex;"><span>curl -I https://claw.a2v.space
</span></span><span style="display:flex;"><span>curl -I https://code.a2v.space
</span></span><span style="display:flex;"><span>curl -I https://sand.a2v.space
</span></span></code></pre></div>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+187
View File
@@ -0,0 +1,187 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta name="generator" content="Hugo 0.159.1">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>docs.a2v.space — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="./css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="./">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="./diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="./kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="./plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="./guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="./creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="./diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="./kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="./plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="./guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="./creds/">Креды</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Добро пожаловать в docs.a2v.space</h1>
<p class="lead">Персональная документация и база знаний.</p>
<div class="row mt-4">
<div class="col-md-6 mb-4">
<div class="card h-100">
<div class="card-body">
<h3 class="card-title">Дневник</h3>
<p class="card-text">Записи по датам о событиях и обсуждениях.</p>
<a href="./diary/" class="btn btn-outline-primary">Открыть</a>
</div>
</div>
</div>
<div class="col-md-6 mb-4">
<div class="card h-100">
<div class="card-body">
<h3 class="card-title">База знаний</h3>
<p class="card-text">Статьи и документация по различным темам.</p>
<a href="./kb/" class="btn btn-outline-primary">Открыть</a>
</div>
</div>
</div>
<div class="col-md-6 mb-4">
<div class="card h-100">
<div class="card-body">
<h3 class="card-title">Планы</h3>
<p class="card-text">Запланированные задачи и их статус.</p>
<a href="./plans/" class="btn btn-outline-primary">Открыть</a>
</div>
</div>
</div>
<div class="col-md-6 mb-4">
<div class="card h-100">
<div class="card-body">
<h3 class="card-title">Инструкции</h3>
<p class="card-text">Пошаговые инструкции для различных задач.</p>
<a href="./guides/" class="btn btn-outline-primary">Открыть</a>
</div>
</div>
</div>
<div class="col-md-6 mb-4">
<div class="card h-100">
<div class="card-body">
<h3 class="card-title">Креды</h3>
<p class="card-text">Зашифрованные учётные данные (требуется мастер-пароль).</p>
<a href="./creds/" class="btn btn-outline-primary">Открыть</a>
</div>
</div>
</div>
</div>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="./js/search.js"></script>
<script src="./js/creds.js"></script>
</body>
</html>
File diff suppressed because one or more lines are too long
+145
View File
@@ -0,0 +1,145 @@
// Credentials encryption/decryption using Web Crypto API
document.addEventListener('DOMContentLoaded', function() {
const decryptButtons = document.querySelectorAll('.decrypt-btn');
decryptButtons.forEach(button => {
button.addEventListener('click', async function() {
const id = this.dataset.id;
const encryptedDiv = document.getElementById('encrypted-' + id);
const decryptedDiv = document.getElementById('decrypted-' + id);
// Get master password
const password = prompt('Введите мастер-пароль:');
if (!password) return;
try {
const encryptedBase64 = encryptedDiv.textContent.trim();
const decrypted = await decrypt(encryptedBase64, password);
// Parse and display decrypted content
const data = JSON.parse(decrypted);
let html = '';
for (const [key, value] of Object.entries(data)) {
const label = formatLabel(key);
html += `<div class="field-row">
<span class="field-label">${label}:</span>
<span class="field-value">${value}</span>
</div>`;
}
decryptedDiv.innerHTML = html;
decryptedDiv.style.display = 'block';
encryptedDiv.style.display = 'none';
this.textContent = 'Скрыть';
this.classList.remove('btn-primary');
this.classList.add('btn-secondary');
// Change button to toggle
this.onclick = function() {
if (decryptedDiv.style.display === 'none') {
decryptedDiv.style.display = 'block';
encryptedDiv.style.display = 'none';
this.textContent = 'Скрыть';
} else {
decryptedDiv.style.display = 'none';
encryptedDiv.style.display = 'block';
this.textContent = 'Расшифровать';
}
};
} catch (error) {
console.error('Decryption error:', error);
alert('Ошибка расшифровки. Проверьте мастер-пароль.');
}
});
});
});
function formatLabel(key) {
const labels = {
'user': 'Пользователь',
'password': 'Пароль',
'host': 'Хост',
'port': 'Порт',
'database': 'База данных',
'notes': 'Заметки',
'ip': 'IP',
'auth': 'Авторизация',
'vpn': 'VPN'
};
return labels[key] || key;
}
// Derive encryption key from password using PBKDF2
async function deriveKey(password, salt) {
const encoder = new TextEncoder();
const keyMaterial = await crypto.subtle.importKey(
'raw',
encoder.encode(password),
{ name: 'PBKDF2' },
false,
['deriveBits', 'deriveKey']
);
return crypto.subtle.deriveKey(
{
name: 'PBKDF2',
salt: salt,
iterations: 100000,
hash: 'SHA-256'
},
keyMaterial,
{ name: 'AES-GCM', length: 256 },
false,
['encrypt', 'decrypt']
);
}
// Decrypt data
async function decrypt(encryptedBase64, password) {
const encryptedData = Uint8Array.from(atob(encryptedBase64), c => c.charCodeAt(0));
// Extract salt (first 16 bytes), IV (next 12 bytes), and ciphertext
const salt = encryptedData.slice(0, 16);
const iv = encryptedData.slice(16, 28);
const ciphertext = encryptedData.slice(28);
const key = await deriveKey(password, salt);
const decrypted = await crypto.subtle.decrypt(
{ name: 'AES-GCM', iv: iv },
key,
ciphertext
);
return new TextDecoder().decode(decrypted);
}
// Encrypt data (for creating new credentials)
async function encrypt(plaintext, password) {
const encoder = new TextEncoder();
const salt = crypto.getRandomValues(new Uint8Array(16));
const iv = crypto.getRandomValues(new Uint8Array(12));
const key = await deriveKey(password, salt);
const ciphertext = await crypto.subtle.encrypt(
{ name: 'AES-GCM', iv: iv },
key,
encoder.encode(plaintext)
);
// Combine salt + iv + ciphertext
const combined = new Uint8Array(16 + 12 + ciphertext.byteLength);
combined.set(salt, 0);
combined.set(iv, 16);
combined.set(new Uint8Array(ciphertext), 28);
return btoa(String.fromCharCode(...combined));
}
// Utility function for encrypting credentials (can be used in console)
window.encryptCreds = async function(data, password) {
const json = JSON.stringify(data);
return await encrypt(json, password);
};
+90
View File
@@ -0,0 +1,90 @@
// Search functionality using Fuse.js
document.addEventListener('DOMContentLoaded', function() {
const searchInput = document.getElementById('search-input');
const searchForm = document.querySelector('.search-form');
const searchResults = document.getElementById('search-results');
const resultsList = document.getElementById('results-list');
const closeSearch = document.getElementById('close-search');
if (!searchInput) return;
let fuse;
// Load search index
fetch('/index.json')
.then(response => response.json())
.then(data => {
fuse = new Fuse(data, {
keys: ['title', 'content', 'tags'],
includeScore: true,
threshold: 0.3,
ignoreLocation: true,
minMatchCharLength: 2
});
})
.catch(err => console.error('Failed to load search index:', err));
function performSearch(query) {
if (!fuse || !query.trim()) {
searchResults.style.display = 'none';
return;
}
const results = fuse.search(query, { limit: 10 });
if (results.length === 0) {
resultsList.innerHTML = '<li>Ничего не найдено</li>';
} else {
resultsList.innerHTML = results.map(result => {
const item = result.item;
const sectionLabels = {
'diary': 'Дневник',
'kb': 'База знаний',
'plans': 'Планы',
'guides': 'Инструкции',
'creds': 'Креды'
};
const label = sectionLabels[item.section] || item.section;
return `<li>
<a href="${item.url}">
<strong>${item.title}</strong>
<small class="text-muted d-block">${label}</small>
</a>
</li>`;
}).join('');
}
searchResults.style.display = 'block';
}
// Debounce function
let debounceTimer;
function debounce(func, delay) {
return function() {
const context = this;
const args = arguments;
clearTimeout(debounceTimer);
debounceTimer = setTimeout(() => func.apply(context, args), delay);
};
}
searchInput.addEventListener('input', debounce(function(e) {
performSearch(e.target.value);
}, 200));
searchForm.addEventListener('submit', function(e) {
e.preventDefault();
performSearch(searchInput.value);
});
closeSearch.addEventListener('click', function() {
searchResults.style.display = 'none';
});
// Close search when clicking outside
document.addEventListener('click', function(e) {
if (!searchForm.contains(e.target) && !searchResults.contains(e.target)) {
searchResults.style.display = 'none';
}
});
});
+391
View File
@@ -0,0 +1,391 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Eversolo T8 API — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Фильтры</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../kb/">Все статьи</a></li>
</ul>
<h6 class="mt-3">Теги</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../tags/api/">api</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/eversolo/">eversolo</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/music/">music</a></li>
<li class="nav-item"><a class="nav-link" href="../../tags/streamer/">streamer</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Eversolo T8 API</h1>
<div class="tags mb-3">
<a href="../../tags/api/" class="tag">api</a>
<a href="../../tags/eversolo/" class="tag">eversolo</a>
<a href="../../tags/music/" class="tag">music</a>
<a href="../../tags/streamer/" class="tag">streamer</a>
</div>
<p>Eversolo T8 — музыкальный стример.</p>
<p><strong>IP:</strong> 192.168.0.156
<strong>Порт:</strong> 9529
<strong>Авторизация:</strong> нет</p>
<p>Базовый URL: <code>http://192.168.0.156:9529</code></p>
<h2 id="воспроизведение">Воспроизведение</h2>
<table>
<thead>
<tr>
<th>Действие</th>
<th>URL</th>
</tr>
</thead>
<tbody>
<tr>
<td>Play/Pause</td>
<td><code>/ZidooMusicControl/v2/playOrPause</code></td>
</tr>
<tr>
<td>Следующий трек</td>
<td><code>/ZidooMusicControl/v2/playNext</code></td>
</tr>
<tr>
<td>Предыдущий трек</td>
<td><code>/ZidooMusicControl/v2/playLast</code></td>
</tr>
<tr>
<td>Перемотка (ms)</td>
<td><code>/ZidooMusicControl/v2/seekTo?time=&lt;ms&gt;</code></td>
</tr>
<tr>
<td>Воспроизвести по ID</td>
<td><code>/ZidooMusicControl/v2/playMusic?type=4&amp;id=&lt;id&gt;</code></td>
</tr>
<tr>
<td>Состояние</td>
<td><code>/ZidooMusicControl/v2/getState</code></td>
</tr>
</tbody>
</table>
<h2 id="громкость">Громкость</h2>
<table>
<thead>
<tr>
<th>Действие</th>
<th>URL</th>
</tr>
</thead>
<tbody>
<tr>
<td>Громкость вверх</td>
<td><code>/ZidooControlCenter/RemoteControl/sendkey?key=Key.VolumeUp</code></td>
</tr>
<tr>
<td>Громкость вниз</td>
<td><code>/ZidooControlCenter/RemoteControl/sendkey?key=Key.VolumeDown</code></td>
</tr>
<tr>
<td>Точная громкость</td>
<td><code>/ZidooMusicControl/v2/setDevicesVolume?volume=&lt;0-200&gt;</code></td>
</tr>
<tr>
<td>Mute</td>
<td><code>/ZidooMusicControl/v2/setMuteVolume?isMute=1</code></td>
</tr>
<tr>
<td>Unmute</td>
<td><code>/ZidooMusicControl/v2/setMuteVolume?isMute=0</code></td>
</tr>
</tbody>
</table>
<h2 id="входывыходы">Входы/Выходы</h2>
<table>
<thead>
<tr>
<th>Действие</th>
<th>URL</th>
</tr>
</thead>
<tbody>
<tr>
<td>Получить список</td>
<td><code>/ZidooMusicControl/v2/getInputAndOutputList</code></td>
</tr>
<tr>
<td>Установить вход</td>
<td><code>/ZidooMusicControl/v2/setInputList?tag=&lt;tag&gt;&amp;index=&lt;n&gt;</code></td>
</tr>
<tr>
<td>Установить выход</td>
<td><code>/ZidooMusicControl/v2/setOutInputList?tag=&lt;tag&gt;&amp;index=&lt;n&gt;</code></td>
</tr>
</tbody>
</table>
<p>Теги выхода: RCA, XLRRCA, XLR, HDMI, SPDIF, USB</p>
<h2 id="дисплей">Дисплей</h2>
<table>
<thead>
<tr>
<th>Действие</th>
<th>URL</th>
</tr>
</thead>
<tbody>
<tr>
<td>Яркость экрана (get)</td>
<td><code>/SystemSettings/displaySettings/getScreenBrightness</code></td>
</tr>
<tr>
<td>Яркость экрана (set)</td>
<td><code>/SystemSettings/displaySettings/setScreenBrightness?index=&lt;0-115&gt;</code></td>
</tr>
<tr>
<td>Яркость ручки (get)</td>
<td><code>/SystemSettings/displaySettings/getKnobBrightness</code></td>
</tr>
<tr>
<td>Яркость ручки (set)</td>
<td><code>/SystemSettings/displaySettings/setKnobBrightness?index=&lt;0-255&gt;</code></td>
</tr>
<tr>
<td>VU-режим (get)</td>
<td><code>/SystemSettings/displaySettings/getVUModeList</code></td>
</tr>
<tr>
<td>VU-режим (set)</td>
<td><code>/SystemSettings/displaySettings/setVUMode?index=&lt;n&gt;</code></td>
</tr>
<tr>
<td>Спектр (get)</td>
<td><code>/SystemSettings/displaySettings/getSpPlayModeList</code></td>
</tr>
<tr>
<td>Спектр (set)</td>
<td><code>/SystemSettings/displaySettings/setSpPlayModeList?index=&lt;n&gt;</code></td>
</tr>
<tr>
<td>Переключить VU/Спектр</td>
<td>`/ZidooMusicControl/v2/changVUDisplay?openType=&lt;0</td>
</tr>
</tbody>
</table>
<h2 id="питание">Питание</h2>
<table>
<thead>
<tr>
<th>Действие</th>
<th>URL</th>
</tr>
</thead>
<tbody>
<tr>
<td>Параметры питания</td>
<td><code>/ZidooMusicControl/v2/getPowerOption</code></td>
</tr>
<tr>
<td>Перезагрузка</td>
<td><code>/ZidooMusicControl/v2/setPowerOption?tag=reboot</code></td>
</tr>
<tr>
<td>Выключение</td>
<td><code>/ZidooMusicControl/v2/setPowerOption?tag=poweroff</code></td>
</tr>
<tr>
<td>Переключить экран</td>
<td><code>/ZidooMusicControl/v2/setPowerOption?tag=screen</code></td>
</tr>
<tr>
<td>Включить экран</td>
<td><code>/ZidooControlCenter/RemoteControl/sendkey?key=Key.Screen.ON</code></td>
</tr>
<tr>
<td>Выключить экран</td>
<td><code>/ZidooControlCenter/RemoteControl/sendkey?key=Key.Screen.OFF</code></td>
</tr>
</tbody>
</table>
<h2 id="поиск">Поиск</h2>
<table>
<thead>
<tr>
<th>Поиск</th>
<th>URL</th>
</tr>
</thead>
<tbody>
<tr>
<td>По трекам</td>
<td><code>/ZidooMusicControl/v2/searchMusicV2?key=&lt;text&gt;&amp;start=0&amp;count=100</code></td>
</tr>
<tr>
<td>По артистам</td>
<td><code>/ZidooMusicControl/v2/searchArtistV2?key=&lt;text&gt;&amp;start=0&amp;count=100</code></td>
</tr>
<tr>
<td>По альбомам</td>
<td><code>/ZidooMusicControl/v2/searchAlbumV2?key=&lt;text&gt;&amp;start=0&amp;count=100</code></td>
</tr>
</tbody>
</table>
<h2 id="обложки-и-устройство">Обложки и устройство</h2>
<table>
<thead>
<tr>
<th>Действие</th>
<th>URL</th>
</tr>
</thead>
<tbody>
<tr>
<td>Обложка по ID</td>
<td><code>/ZidooMusicControl/v2/getImage?id=&lt;song_id&gt;&amp;target=16</code></td>
</tr>
<tr>
<td>Модель устройства</td>
<td><code>/ControlCenter/getModel</code></td>
</tr>
</tbody>
</table>
<h2 id="источники">Источники</h2>
<ul>
<li><a href="https://forum.zidoo.tv/index.php?threads/some-api.96983/">Zidoo Forum</a></li>
<li><a href="https://github.com/hchris1/Eversolo/blob/main/custom_components/eversolo/api.py">Home Assistant Integration</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+271
View File
@@ -0,0 +1,271 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Kbs — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Фильтры</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../kb/">Все статьи</a></li>
</ul>
<h6 class="mt-3">Теги</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../tags/api/">api</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/eversolo/">eversolo</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/music/">music</a></li>
<li class="nav-item"><a class="nav-link" href="../tags/streamer/">streamer</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>База знаний</h1>
<div class="row">
<div class="col-md-6 mb-4">
<div class="card h-100">
<div class="card-body">
<h3 class="card-title"><a href="../kb/eversolo-api/">Eversolo T8 API</a></h3>
<p class="card-text"><p>Eversolo T8 — музыкальный стример.</p>
<p><strong>IP:</strong> 192.168.0.156
<strong>Порт:</strong> 9529
<strong>Авторизация:</strong> нет</p>
<p>Базовый URL: <code>http://192.168.0.156:9529</code></p>
<h2 id="воспроизведение">Воспроизведение</h2>
<table>
<thead>
<tr>
<th>Действие</th>
<th>URL</th>
</tr>
</thead>
<tbody>
<tr>
<td>Play/Pause</td>
<td><code>/ZidooMusicControl/v2/playOrPause</code></td>
</tr>
<tr>
<td>Следующий трек</td>
<td><code>/ZidooMusicControl/v2/playNext</code></td>
</tr>
<tr>
<td>Предыдущий трек</td>
<td><code>/ZidooMusicControl/v2/playLast</code></td>
</tr>
<tr>
<td>Перемотка (ms)</td>
<td><code>/ZidooMusicControl/v2/seekTo?time=&lt;ms&gt;</code></td>
</tr>
<tr>
<td>Воспроизвести по ID</td>
<td><code>/ZidooMusicControl/v2/playMusic?type=4&amp;id=&lt;id&gt;</code></td>
</tr>
<tr>
<td>Состояние</td>
<td><code>/ZidooMusicControl/v2/getState</code></td>
</tr>
</tbody>
</table>
<h2 id="громкость">Громкость</h2>
<table>
<thead>
<tr>
<th>Действие</th>
<th>URL</th>
</tr>
</thead>
<tbody>
<tr>
<td>Громкость вверх</td>
<td><code>/ZidooControlCenter/RemoteControl/sendkey?key=Key.VolumeUp</code></td>
</tr>
<tr>
<td>Громкость вниз</td>
<td><code>/ZidooControlCenter/RemoteControl/sendkey?key=Key.VolumeDown</code></td>
</tr>
<tr>
<td>Точная громкость</td>
<td><code>/ZidooMusicControl/v2/setDevicesVolume?volume=&lt;0-200&gt;</code></td>
</tr>
<tr>
<td>Mute</td>
<td><code>/ZidooMusicControl/v2/setMuteVolume?isMute=1</code></td>
</tr>
<tr>
<td>Unmute</td>
<td><code>/ZidooMusicControl/v2/setMuteVolume?isMute=0</code></td>
</tr>
</tbody>
</table>
<h2 id="входывыходы">Входы/Выходы</h2>
<table>
<thead>
<tr>
<th>Действие</th>
<th>URL</th>
</tr>
</thead>
<tbody>
<tr>
<td>Получить список</td>
<td><code>/ZidooMusicControl/v2/getInputAndOutputList</code></td>
</tr>
<tr>
<td>Установить вход</td>
<td><code>/ZidooMusicControl/v2/setInputList?tag=&lt;tag&gt;&amp;index=&lt;n&gt;</code></td>
</tr>
<tr>
<td>Установить выход</td>
<td><code>/ZidooMusicControl/v2/setOutInputList?tag=&lt;tag&gt;&amp;index=&lt;n&gt;</code></td>
</tr>
</tbody>
</table>
<p>Теги выхода: RCA, XLRRCA, XLR, HDMI, SPDIF, USB</p></p>
<div class="tags">
<a href="../tags/api/" class="tag">api</a>
<a href="../tags/eversolo/" class="tag">eversolo</a>
<a href="../tags/music/" class="tag">music</a>
<a href="../tags/streamer/" class="tag">streamer</a>
</div>
</div>
</div>
</div>
</div>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../js/search.js"></script>
<script src="../js/creds.js"></script>
</body>
</html>
+1
View File
@@ -0,0 +1 @@
[{"content":"Eversolo T8 — музыкальный стример.\nIP: 192.168.0.156 Порт: 9529 Авторизация: нет\nБазовый URL: http://192.168.0.156:9529\nВоспроизведение Действие URL Play/Pause /ZidooMusicControl/v2/playOrPause Следующий трек /ZidooMusicControl/v2/playNext Предыдущий трек /ZidooMusicControl/v2/playLast Перемотка (ms) /ZidooMusicControl/v2/seekTo?time=\u0026lt;ms\u0026gt; Воспроизвести по ID /ZidooMusicControl/v2/playMusic?type=4\u0026amp;id=\u0026lt;id\u0026gt; Состояние /ZidooMusicControl/v2/getState Громкость Действие URL Громкость вверх /ZidooControlCenter/RemoteControl/sendkey?key=Key.VolumeUp Громкость вниз /ZidooControlCenter/RemoteControl/sendkey?key=Key.VolumeDown Точная громкость /ZidooMusicControl/v2/setDevicesVolume?volume=\u0026lt;0-200\u0026gt; Mute /ZidooMusicControl/v2/setMuteVolume?isMute=1 Unmute /ZidooMusicControl/v2/setMuteVolume?isMute=0 Входы/Выходы Действие URL Получить список /ZidooMusicControl/v2/getInputAndOutputList Установить вход /ZidooMusicControl/v2/setInputList?tag=\u0026lt;tag\u0026gt;\u0026amp;index=\u0026lt;n\u0026gt; Установить выход /ZidooMusicControl/v2/setOutInputList?tag=\u0026lt;tag\u0026gt;\u0026amp;index=\u0026lt;n\u0026gt; Теги выхода: RCA, XLRRCA, XLR, HDMI, SPDIF, USB\nДисплей Действие URL Яркость экрана (get) /SystemSettings/displaySettings/getScreenBrightness Яркость экрана (set) /SystemSettings/displaySettings/setScreenBrightness?index=\u0026lt;0-115\u0026gt; Яркость ручки (get) /SystemSettings/displaySettings/getKnobBrightness Яркость ручки (set) /SystemSettings/displaySettings/setKnobBrightness?index=\u0026lt;0-255\u0026gt; VU-режим (get) /SystemSettings/displaySettings/getVUModeList VU-режим (set) /SystemSettings/displaySettings/setVUMode?index=\u0026lt;n\u0026gt; Спектр (get) /SystemSettings/displaySettings/getSpPlayModeList Спектр (set) /SystemSettings/displaySettings/setSpPlayModeList?index=\u0026lt;n\u0026gt; Переключить VU/Спектр `/ZidooMusicControl/v2/changVUDisplay?openType=\u0026lt;0 Питание Действие 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=\u0026lt;text\u0026gt;\u0026amp;start=0\u0026amp;count=100 По артистам /ZidooMusicControl/v2/searchArtistV2?key=\u0026lt;text\u0026gt;\u0026amp;start=0\u0026amp;count=100 По альбомам /ZidooMusicControl/v2/searchAlbumV2?key=\u0026lt;text\u0026gt;\u0026amp;start=0\u0026amp;count=100 Обложки и устройство Действие URL Обложка по ID /ZidooMusicControl/v2/getImage?id=\u0026lt;song_id\u0026gt;\u0026amp;target=16 Модель устройства /ControlCenter/getModel Источники Zidoo Forum Home Assistant Integration ","section":"kb","tags":["api","eversolo","music","streamer"],"title":"Eversolo T8 API","url":"/kb/eversolo-api/"}]
@@ -0,0 +1,186 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Завершить Eversolo Companion - этапы 3-9 — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Статусы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../plans/">Все планы</a></li>
<li class="nav-item"><a class="nav-link status-planned" href="../../plans/?status=planned">🟡 Запланировано</a></li>
<li class="nav-item"><a class="nav-link status-in-progress" href="../../plans/?status=in_progress">🟠 В процессе</a></li>
<li class="nav-item"><a class="nav-link status-done" href="../../plans/?status=done">✅ Сделано</a></li>
<li class="nav-item"><a class="nav-link status-cancelled" href="../../plans/?status=cancelled">❌ Отменено</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<div class="d-flex justify-content-between align-items-start mb-3">
<h1>Завершить Eversolo Companion - этапы 3-9</h1>
<span class="status-badge h5">
🟡 Запланировано
</span>
</div>
<div class="row mb-3">
<div class="col">
<strong>Запланировано:</strong> 29.03.2026
</div>
</div>
<h2 id="описание">Описание</h2>
<p>Завершить разработку Eversolo Companion после решения проблемы с сетевым доступом.</p>
<h2 id="что-сделано">Что сделано</h2>
<ul>
<li><strong>Backend (Go + Gin)</strong>: собран, 17+ REST API эндпоинтов, WebSocket, CORS, state poller</li>
<li><strong>Frontend (Angular 17)</strong>: собран, тёмная тема (Spotify-like), 5 экранов, 5 сервисов</li>
<li><strong>PostgreSQL</strong>: Docker, порт 5433, миграции готовы</li>
<li><strong>Docker Compose</strong>: рабочий (postgres + api + frontend)</li>
<li><strong>Спецификация</strong>: полная в ~/Projects/eversolo-companion/SPEC.md</li>
</ul>
<h2 id="проблема">Проблема</h2>
<p>API не может достучаться до Eversolo T8 (192.168.0.156:9529) из-за ограничений OpenClaw sandbox.</p>
<h2 id="возможные-решения">Возможные решения</h2>
<ol>
<li>Настроить <code>tools.elevated.allowFrom.webchat</code> для разрешения сетевых соединений</li>
<li>Запустить API через launchd plist (как SSH туннели)</li>
<li>Использовать отдельный контейнер без ограничений</li>
</ol>
<h2 id="этапы-3-9-после-решения-сети">Этапы 3-9 (после решения сети)</h2>
<ol>
<li><strong>Библиотека синхронизации</strong> — двухсторонний sync с Eversolo</li>
<li><strong>Плейлисты</strong> — импорт/экспорт, редактирование</li>
<li><strong>Scrobbler</strong> — Last.fm / ListenBrainz</li>
<li><strong>Обложки</strong> — кэширование, отображение в UI</li>
<li><strong>Плеер</strong> — улучшенный интерфейс управления</li>
<li><strong>Система уведомлений</strong> — события от Eversolo</li>
<li><strong>Администрирование</strong> — настройка подключений</li>
</ol>
<h2 id="связанные-ресурсы">Связанные ресурсы</h2>
<ul>
<li><a href="../../docs/eversolo-companion-spec/">Спецификация проекта</a></li>
<li><a href="../../kb/eversolo-api/">API документация</a></li>
<li><a href="../../diary/2026-03-29/">Дневник разработки</a></li>
</ul>
<blockquote class="context-quote">
UI готов, API готов, БД готова — но API не может достучаться до Eversolo из-за ограничений OpenClaw sandbox
</blockquote>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+166
View File
@@ -0,0 +1,166 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Реализовать управление Eversolo из OpenClaw — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Статусы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../plans/">Все планы</a></li>
<li class="nav-item"><a class="nav-link status-planned" href="../../plans/?status=planned">🟡 Запланировано</a></li>
<li class="nav-item"><a class="nav-link status-in-progress" href="../../plans/?status=in_progress">🟠 В процессе</a></li>
<li class="nav-item"><a class="nav-link status-done" href="../../plans/?status=done">✅ Сделано</a></li>
<li class="nav-item"><a class="nav-link status-cancelled" href="../../plans/?status=cancelled">❌ Отменено</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<div class="d-flex justify-content-between align-items-start mb-3">
<h1>Реализовать управление Eversolo из OpenClaw</h1>
<span class="status-badge h5">
🟡 Запланировано
</span>
</div>
<div class="row mb-3">
<div class="col">
<strong>Запланировано:</strong> 29.03.2026
</div>
</div>
<h2 id="описание">Описание</h2>
<p>Добавить инструменты управления Eversolo T8 в OpenClaw.</p>
<h2 id="что-сделано">Что сделано</h2>
<ul>
<li>Изучен полный API Eversolo T8 (см. <a href="../../kb/eversolo-api/">Базу знаний</a>)</li>
</ul>
<h2 id="проблема">Проблема</h2>
<p>Sandbox OpenClaw не имеет доступа к локальной сети, где находится Eversolo.</p>
<h2 id="возможные-решения">Возможные решения</h2>
<ol>
<li>Настроить проброс портов</li>
<li>Запустить OpenClaw без sandbox-ограничений</li>
<li>Использовать промежуточный proxy-сервис</li>
</ol>
<blockquote class="context-quote">
API изучен, записан в TOOLS.md. Проблема: нет доступа к LAN из sandbox OpenClaw.
</blockquote>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+210
View File
@@ -0,0 +1,210 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Plans — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Статусы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../plans/">Все планы</a></li>
<li class="nav-item"><a class="nav-link status-planned" href="../plans/?status=planned">🟡 Запланировано</a></li>
<li class="nav-item"><a class="nav-link status-in-progress" href="../plans/?status=in_progress">🟠 В процессе</a></li>
<li class="nav-item"><a class="nav-link status-done" href="../plans/?status=done">✅ Сделано</a></li>
<li class="nav-item"><a class="nav-link status-cancelled" href="../plans/?status=cancelled">❌ Отменено</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Планы</h1>
<h3 class="mb-3">Предстоящие</h3>
<div class="card plan-card planned mb-3">
<div class="card-body">
<div class="d-flex justify-content-between align-items-start">
<h4 class="card-title"><a href="../plans/eversolo-companion-phases-3-9/">Завершить Eversolo Companion - этапы 3-9</a></h4>
<span class="status-badge">
🟡 Запланировано
</span>
</div>
</div>
</div>
<div class="card plan-card planned mb-3">
<div class="card-body">
<div class="d-flex justify-content-between align-items-start">
<h4 class="card-title"><a href="../plans/ollama-openclaw/">Настроить интеграцию Ollama с OpenClaw</a></h4>
<span class="status-badge">
🟡 Запланировано
</span>
</div>
</div>
</div>
<div class="card plan-card planned mb-3">
<div class="card-body">
<div class="d-flex justify-content-between align-items-start">
<h4 class="card-title"><a href="../plans/eversolo-control/">Реализовать управление Eversolo из OpenClaw</a></h4>
<span class="status-badge">
🟡 Запланировано
</span>
</div>
</div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const urlParams = new URLSearchParams(window.location.search);
const status = urlParams.get('status');
if (status) {
document.querySelectorAll('.plan-card').forEach(card => {
if (!card.classList.contains(status)) {
card.style.display = 'none';
}
});
}
});
</script>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../js/search.js"></script>
<script src="../js/creds.js"></script>
</body>
</html>
+1
View File
@@ -0,0 +1 @@
[{"content":"Описание Завершить разработку Eversolo Companion после решения проблемы с сетевым доступом.\nЧто сделано Backend (Go + Gin): собран, 17+ REST API эндпоинтов, WebSocket, CORS, state poller Frontend (Angular 17): собран, тёмная тема (Spotify-like), 5 экранов, 5 сервисов PostgreSQL: Docker, порт 5433, миграции готовы Docker Compose: рабочий (postgres + api + frontend) Спецификация: полная в ~/Projects/eversolo-companion/SPEC.md Проблема API не может достучаться до Eversolo T8 (192.168.0.156:9529) из-за ограничений OpenClaw sandbox.\nВозможные решения Настроить tools.elevated.allowFrom.webchat для разрешения сетевых соединений Запустить API через launchd plist (как SSH туннели) Использовать отдельный контейнер без ограничений Этапы 3-9 (после решения сети) Библиотека синхронизации — двухсторонний sync с Eversolo Плейлисты — импорт/экспорт, редактирование Scrobbler — Last.fm / ListenBrainz Обложки — кэширование, отображение в UI Плеер — улучшенный интерфейс управления Система уведомлений — события от Eversolo Администрирование — настройка подключений Связанные ресурсы Спецификация проекта API документация Дневник разработки ","section":"plans","tags":["eversolo","companion","angular","go","docker"],"title":"Завершить Eversolo Companion - этапы 3-9","url":"/plans/eversolo-companion-phases-3-9/"},{"content":"Описание Добавить поддержку Ollama в OpenClaw для использования локальных LLM моделей.\nПроблема Модель qwen3.5:9b добавлена в конфиг openclaw.json, но не отображается в openclaw models list.\nСтатус Отложено по решению Антона.\n","section":"plans","tags":["ollama","openclaw","llm"],"title":"Настроить интеграцию Ollama с OpenClaw","url":"/plans/ollama-openclaw/"},{"content":"Описание Добавить инструменты управления Eversolo T8 в OpenClaw.\nЧто сделано Изучен полный API Eversolo T8 (см. Базу знаний) Проблема Sandbox OpenClaw не имеет доступа к локальной сети, где находится Eversolo.\nВозможные решения Настроить проброс портов Запустить OpenClaw без sandbox-ограничений Использовать промежуточный proxy-сервис ","section":"plans","tags":["eversolo","openclaw","api"],"title":"Реализовать управление Eversolo из OpenClaw","url":"/plans/eversolo-control/"}]
+158
View File
@@ -0,0 +1,158 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Настроить интеграцию Ollama с OpenClaw — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Статусы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../plans/">Все планы</a></li>
<li class="nav-item"><a class="nav-link status-planned" href="../../plans/?status=planned">🟡 Запланировано</a></li>
<li class="nav-item"><a class="nav-link status-in-progress" href="../../plans/?status=in_progress">🟠 В процессе</a></li>
<li class="nav-item"><a class="nav-link status-done" href="../../plans/?status=done">✅ Сделано</a></li>
<li class="nav-item"><a class="nav-link status-cancelled" href="../../plans/?status=cancelled">❌ Отменено</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<div class="d-flex justify-content-between align-items-start mb-3">
<h1>Настроить интеграцию Ollama с OpenClaw</h1>
<span class="status-badge h5">
🟡 Запланировано
</span>
</div>
<div class="row mb-3">
<div class="col">
<strong>Запланировано:</strong> 29.03.2026
</div>
</div>
<h2 id="описание">Описание</h2>
<p>Добавить поддержку Ollama в OpenClaw для использования локальных LLM моделей.</p>
<h2 id="проблема">Проблема</h2>
<p>Модель <code>qwen3.5:9b</code> добавлена в конфиг <code>openclaw.json</code>, но не отображается в <code>openclaw models list</code>.</p>
<h2 id="статус">Статус</h2>
<p>Отложено по решению Антона.</p>
<blockquote class="context-quote">
Добавлен qwen3.5:9b в openclaw.json, но модель не появилась в openclaw models list. Отложено по решению Антона.
</blockquote>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+168
View File
@@ -0,0 +1,168 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>/diary/2026-03-29/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/amnezia/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/angular/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/api/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/authentication/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/companion/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/creds/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/database/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/devops/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/diary/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/docker/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/docker-compose/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/docs/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/creds/docs-a2v-space-auth/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/eversolo/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/creds/eversolo-companion-postgres/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/kb/eversolo-api/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/go/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/guides/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/hugo/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/identity/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/infrastructure/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/kb/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/leadera/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/llm/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/creds/leadera-db-docker/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/creds/leadera-db-local/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/music/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/nginx/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/ollama/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/openclaw/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/opencode/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/plans/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/postgresql/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/reg.ru/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/reverse-proxy/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/ssh/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/guides/ssh-tunnels-vps/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/streamer/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/tunnel/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/vpn/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/creds/vpn-vps/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/tags/vps/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/creds/vps-reg-ru/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/plans/eversolo-companion-phases-3-9/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/plans/ollama-openclaw/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/guides/vps-reverse-proxy/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/guides/claw-a2v-space/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/guides/code-a2v-space/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/guides/sand-a2v-space/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/plans/eversolo-control/</loc>
<lastmod>2026-03-29T00:00:00+00:00</lastmod>
</url><url>
<loc>/categories/</loc>
</url><url>
<loc>/statuses/</loc>
</url>
</urlset>
+138
View File
@@ -0,0 +1,138 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Statuses — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../creds/">Креды</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Statuses</h1>
<ul>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../js/search.js"></script>
<script src="../js/creds.js"></script>
</body>
</html>
+11
View File
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Statuses on docs.a2v.space</title>
<link>/statuses/</link>
<description>Recent content in Statuses on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<atom:link href="/statuses/index.xml" rel="self" type="application/rss+xml" />
</channel>
</rss>
+140
View File
@@ -0,0 +1,140 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Amnezia — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Amnezia</h1>
<ul>
<li><a href="../../creds/vpn-vps/">VPN VPS</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+19
View File
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Amnezia on docs.a2v.space</title>
<link>/tags/amnezia/</link>
<description>Recent content in Amnezia on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Sun, 29 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/amnezia/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>VPN VPS</title>
<link>/creds/vpn-vps/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/creds/vpn-vps/</guid>
<description>YEI16NAJ78d3lmSa/lca8Zxczt+u6GyMUYHduX47VoFQdj0Ixozd8R6yXoB7eM+AjhCtNGkOxGlOj2s73ABOBjLEIVIhD4Z+xTyzdtah4VpyLoltYOeNYsnbIIFARdF/FBYq5COXohhXs33K5ozznrtDd/awbKMjl/sbQqjXAZ+A3ZSob6/5uU+fFKetXLR6v4ZLAYQ57iiD21ImSLSggwv+rJgK5XyPDKEPD4N5nOsiDrLgoukVBMvgJ54PqfPp2Hni+2tdKOlMnOG2npTuu4SkyALcfFar</description>
</item>
</channel>
</rss>
+144
View File
@@ -0,0 +1,144 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Angular — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Angular</h1>
<ul>
<li><a href="../../diary/2026-03-29/">29 марта 2026</a></li>
<li><a href="../../plans/eversolo-companion-phases-3-9/">Завершить Eversolo Companion - этапы 3-9</a></li>
<li><a href="../../guides/sand-a2v-space/">Подключение sand.a2v.space (Leadera Project)</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
File diff suppressed because one or more lines are too long
+142
View File
@@ -0,0 +1,142 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Api — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Api</h1>
<ul>
<li><a href="../../kb/eversolo-api/">Eversolo T8 API</a></li>
<li><a href="../../plans/eversolo-control/">Реализовать управление Eversolo из OpenClaw</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+26
View File
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Api on docs.a2v.space</title>
<link>/tags/api/</link>
<description>Recent content in Api on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Sun, 29 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/api/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Eversolo T8 API</title>
<link>/kb/eversolo-api/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/kb/eversolo-api/</guid>
<description>&lt;p&gt;Eversolo T8 — музыкальный стример.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;IP:&lt;/strong&gt; 192.168.0.156&#xA;&lt;strong&gt;Порт:&lt;/strong&gt; 9529&#xA;&lt;strong&gt;Авторизация:&lt;/strong&gt; нет&lt;/p&gt;&#xA;&lt;p&gt;Базовый URL: &lt;code&gt;http://192.168.0.156:9529&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;воспроизведение&#34;&gt;Воспроизведение&lt;/h2&gt;&#xA;&lt;table&gt;&#xA; &lt;thead&gt;&#xA; &lt;tr&gt;&#xA; &lt;th&gt;Действие&lt;/th&gt;&#xA; &lt;th&gt;URL&lt;/th&gt;&#xA; &lt;/tr&gt;&#xA; &lt;/thead&gt;&#xA; &lt;tbody&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Play/Pause&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/playOrPause&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Следующий трек&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/playNext&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Предыдущий трек&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/playLast&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Перемотка (ms)&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/seekTo?time=&amp;lt;ms&amp;gt;&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Воспроизвести по ID&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/playMusic?type=4&amp;amp;id=&amp;lt;id&amp;gt;&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Состояние&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/getState&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;громкость&#34;&gt;Громкость&lt;/h2&gt;&#xA;&lt;table&gt;&#xA; &lt;thead&gt;&#xA; &lt;tr&gt;&#xA; &lt;th&gt;Действие&lt;/th&gt;&#xA; &lt;th&gt;URL&lt;/th&gt;&#xA; &lt;/tr&gt;&#xA; &lt;/thead&gt;&#xA; &lt;tbody&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Громкость вверх&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooControlCenter/RemoteControl/sendkey?key=Key.VolumeUp&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Громкость вниз&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooControlCenter/RemoteControl/sendkey?key=Key.VolumeDown&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Точная громкость&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/setDevicesVolume?volume=&amp;lt;0-200&amp;gt;&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Mute&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/setMuteVolume?isMute=1&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Unmute&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/setMuteVolume?isMute=0&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;входывыходы&#34;&gt;Входы/Выходы&lt;/h2&gt;&#xA;&lt;table&gt;&#xA; &lt;thead&gt;&#xA; &lt;tr&gt;&#xA; &lt;th&gt;Действие&lt;/th&gt;&#xA; &lt;th&gt;URL&lt;/th&gt;&#xA; &lt;/tr&gt;&#xA; &lt;/thead&gt;&#xA; &lt;tbody&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Получить список&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/getInputAndOutputList&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Установить вход&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/setInputList?tag=&amp;lt;tag&amp;gt;&amp;amp;index=&amp;lt;n&amp;gt;&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Установить выход&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/setOutInputList?tag=&amp;lt;tag&amp;gt;&amp;amp;index=&amp;lt;n&amp;gt;&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Теги выхода: RCA, XLRRCA, XLR, HDMI, SPDIF, USB&lt;/p&gt;</description>
</item>
<item>
<title>Реализовать управление Eversolo из OpenClaw</title>
<link>/plans/eversolo-control/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/plans/eversolo-control/</guid>
<description>&lt;h2 id=&#34;описание&#34;&gt;Описание&lt;/h2&gt;&#xA;&lt;p&gt;Добавить инструменты управления Eversolo T8 в OpenClaw.&lt;/p&gt;&#xA;&lt;h2 id=&#34;что-сделано&#34;&gt;Что сделано&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Изучен полный API Eversolo T8 (см. &lt;a href=&#34;../../kb/eversolo-api/&#34;&gt;Базу знаний&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;проблема&#34;&gt;Проблема&lt;/h2&gt;&#xA;&lt;p&gt;Sandbox OpenClaw не имеет доступа к локальной сети, где находится Eversolo.&lt;/p&gt;&#xA;&lt;h2 id=&#34;возможные-решения&#34;&gt;Возможные решения&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Настроить проброс портов&lt;/li&gt;&#xA;&lt;li&gt;Запустить OpenClaw без sandbox-ограничений&lt;/li&gt;&#xA;&lt;li&gt;Использовать промежуточный proxy-сервис&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
</item>
</channel>
</rss>
+140
View File
@@ -0,0 +1,140 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Authentication — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Authentication</h1>
<ul>
<li><a href="../../creds/docs-a2v-space-auth/">docs.a2v.space Basic Auth</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+19
View File
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Authentication on docs.a2v.space</title>
<link>/tags/authentication/</link>
<description>Recent content in Authentication on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Sun, 29 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/authentication/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>docs.a2v.space Basic Auth</title>
<link>/creds/docs-a2v-space-auth/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/creds/docs-a2v-space-auth/</guid>
<description>&lt;h2 id=&#34;basic-authentication&#34;&gt;Basic Authentication&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Username: agaltsovav&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Password: Magamet787!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;конфигурация-nginx&#34;&gt;Конфигурация Nginx&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-nginx&#34; data-lang=&#34;nginx&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;server&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;8091&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;docs.a2v.space&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;auth_basic&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Restricted&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;Access&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;auth_basic_user_file&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;/etc/nginx/.htpasswd&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;доступ&#34;&gt;Доступ&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;URL&lt;/strong&gt;: &lt;a href=&#34;https://docs.a2v.space&#34;&gt;https://docs.a2v.space&lt;/a&gt; (через reverse proxy)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Local&lt;/strong&gt;: http://localhost:8091 (для разработки)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Auth&lt;/strong&gt;: всегда требуется&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;мастер-пароль-для-шифрования&#34;&gt;Мастер-пароль для шифрования&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Важно&lt;/strong&gt;: Пароль для расшифровки файлов в разделе &lt;code&gt;creds/&lt;/code&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Master Password: Popoloka16!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;шифрование&#34;&gt;Шифрование&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Алгоритм: AES-256-GCM&lt;/li&gt;&#xA;&lt;li&gt;Хранилище: client-side encryption&lt;/li&gt;&#xA;&lt;li&gt;Файлы шифруются при сохранении&lt;/li&gt;&#xA;&lt;li&gt;Расшифровываются при чтении&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
</item>
</channel>
</rss>
+144
View File
@@ -0,0 +1,144 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Companion — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Companion</h1>
<ul>
<li><a href="../../diary/2026-03-29/">29 марта 2026</a></li>
<li><a href="../../creds/eversolo-companion-postgres/">Eversolo Companion PostgreSQL</a></li>
<li><a href="../../plans/eversolo-companion-phases-3-9/">Завершить Eversolo Companion - этапы 3-9</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+33
View File
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Companion on docs.a2v.space</title>
<link>/tags/companion/</link>
<description>Recent content in Companion on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Sun, 29 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/companion/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>29 марта 2026</title>
<link>/diary/2026-03-29/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/diary/2026-03-29/</guid>
<description>&lt;h2 id=&#34;timeline&#34;&gt;Timeline&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;20:03&lt;/strong&gt; — Настроили Angular + Go проекты (leadera) через pm2, удалили proxy.conf, подняли PostgreSQL в Docker&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;20:31&lt;/strong&gt; — Изучили API Eversolo T8 — полный список REST-эндпоинтов для управления музыкой&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;20:49&lt;/strong&gt; — Обсудили важность записи контекста в файлы для сохранения памяти между сессиями&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;21:13&lt;/strong&gt; — Начали проект docs.a2v.space — персональная документация на Hugo&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;21:44&lt;/strong&gt; — Завершили настройку Identity (Братан, SOUL.md, USER.md, IDENTITY.md)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;22:15&lt;/strong&gt; — Документировали инфраструктуру: VPS reverse proxy (claw.a2v.space, code.a2v.space, sand.a2v.space, docs.a2v.space)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;22:31&lt;/strong&gt; — Настроили docs.a2v.space: Hugo сайт, 83 страницы, Bootstrap 5 тёмная тема, AES-256-GCM шифрование кредов (мастер-пароль: Popoloka16!)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;22:47&lt;/strong&gt; — Добавили Basic auth: agaltsovav / Magamet787! для доступа к документации&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;23:02&lt;/strong&gt; — Создали cron задачу docs-a2v-daily-sync на ежедневное обновление в 03:00 МСК&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;23:18&lt;/strong&gt; — Полностью задокументировали Eversolo T8 API (воспроизведение, громкость, дисплей, питание, поиск и т.д.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;23:45&lt;/strong&gt; — Переписали TOOLS.md как полный справочник по инфраструктуре&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;eversolo-companion--статус-проекта&#34;&gt;Eversolo Companion — статус проекта&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Backend (Go + Gin):&lt;/strong&gt;&lt;/p&gt;</description>
</item>
<item>
<title>Eversolo Companion PostgreSQL</title>
<link>/creds/eversolo-companion-postgres/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/creds/eversolo-companion-postgres/</guid>
<description>&lt;h2 id=&#34;docker-compose-креды-projectseversolo-companiondocker-composeyml&#34;&gt;Docker Compose креды (~/Projects/eversolo-companion/docker-compose.yml)&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;services&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;postgres&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;environment&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;POSTGRES_USER&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;postgres&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;POSTGRES_PASSWORD&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;password&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;POSTGRES_DB&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;eversolo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;локальные-креды-env-файл&#34;&gt;Локальные креды (.env файл)&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;POSTGRES_USER&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;postgres&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;POSTGRES_PASSWORD&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;password&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;POSTGRES_DB&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;eversolo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;хостинг&#34;&gt;Хостинг&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Host&lt;/strong&gt;: localhost&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Port&lt;/strong&gt;: 5433&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Database&lt;/strong&gt;: eversolo&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;безопасность&#34;&gt;Безопасность&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Используйте разные пароли для production&lt;/li&gt;&#xA;&lt;li&gt;Включите SSL для удаленного подключения&lt;/li&gt;&#xA;&lt;li&gt;Регулярно делайте бэкапы&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
</item>
<item>
<title>Завершить Eversolo Companion - этапы 3-9</title>
<link>/plans/eversolo-companion-phases-3-9/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/plans/eversolo-companion-phases-3-9/</guid>
<description>&lt;h2 id=&#34;описание&#34;&gt;Описание&lt;/h2&gt;&#xA;&lt;p&gt;Завершить разработку Eversolo Companion после решения проблемы с сетевым доступом.&lt;/p&gt;&#xA;&lt;h2 id=&#34;что-сделано&#34;&gt;Что сделано&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Backend (Go + Gin)&lt;/strong&gt;: собран, 17+ REST API эндпоинтов, WebSocket, CORS, state poller&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Frontend (Angular 17)&lt;/strong&gt;: собран, тёмная тема (Spotify-like), 5 экранов, 5 сервисов&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;PostgreSQL&lt;/strong&gt;: Docker, порт 5433, миграции готовы&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Docker Compose&lt;/strong&gt;: рабочий (postgres + api + frontend)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Спецификация&lt;/strong&gt;: полная в ~/Projects/eversolo-companion/SPEC.md&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;проблема&#34;&gt;Проблема&lt;/h2&gt;&#xA;&lt;p&gt;API не может достучаться до Eversolo T8 (192.168.0.156:9529) из-за ограничений OpenClaw sandbox.&lt;/p&gt;&#xA;&lt;h2 id=&#34;возможные-решения&#34;&gt;Возможные решения&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Настроить &lt;code&gt;tools.elevated.allowFrom.webchat&lt;/code&gt; для разрешения сетевых соединений&lt;/li&gt;&#xA;&lt;li&gt;Запустить API через launchd plist (как SSH туннели)&lt;/li&gt;&#xA;&lt;li&gt;Использовать отдельный контейнер без ограничений&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;этапы-3-9-после-решения-сети&#34;&gt;Этапы 3-9 (после решения сети)&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Библиотека синхронизации&lt;/strong&gt; — двухсторонний sync с Eversolo&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Плейлисты&lt;/strong&gt; — импорт/экспорт, редактирование&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Scrobbler&lt;/strong&gt; — Last.fm / ListenBrainz&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Обложки&lt;/strong&gt; — кэширование, отображение в UI&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Плеер&lt;/strong&gt; — улучшенный интерфейс управления&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Система уведомлений&lt;/strong&gt; — события от Eversolo&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Администрирование&lt;/strong&gt; — настройка подключений&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;связанные-ресурсы&#34;&gt;Связанные ресурсы&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;../../docs/eversolo-companion-spec/&#34;&gt;Спецификация проекта&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;../../kb/eversolo-api/&#34;&gt;API документация&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;../../diary/2026-03-29/&#34;&gt;Дневник разработки&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
</item>
</channel>
</rss>
+142
View File
@@ -0,0 +1,142 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Database — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Database</h1>
<ul>
<li><a href="../../creds/leadera-db-docker/">Mac Studio — leadera-api БД (docker-compose)</a></li>
<li><a href="../../creds/leadera-db-local/">Mac Studio — leadera-api БД (локальная)</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+26
View File
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Database on docs.a2v.space</title>
<link>/tags/database/</link>
<description>Recent content in Database on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Sun, 29 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/database/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Mac Studio — leadera-api БД (docker-compose)</title>
<link>/creds/leadera-db-docker/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/creds/leadera-db-docker/</guid>
<description>NYVK4PEGwmOHmAnGk8IAUc+lyFJtnEAvX6ZddBro/ILRWHOXBGYywgglFvQZ18BLDLb5DuA8GPAIdB/LwTHRXYO0KsmtlZQVWGEeeXlXAoEXpa5theoOQhebkW6LmiKyNGAVW2z9rK3nz6NnztYdn49LvGMjrHuR4IwCLbl/pYa96CPNRnxGDFlduFi8lMSspM0rBFi/bZhNGhzy36ViCl+aKr5P9cle0ZvM8E8av/6c5JjgDt88QFI3VYdTaTCE0+uHsXlnJN7Qgg/KH7kD</description>
</item>
<item>
<title>Mac Studio — leadera-api БД (локальная)</title>
<link>/creds/leadera-db-local/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/creds/leadera-db-local/</guid>
<description>p7Iw7Y3zbj1kLBcbOXGoO27oDwF85AhxBW7saT538hxi0ogJpyFeM49GDuLHzxuyknvdNC/rx3tb4AFnGkCeHSrrCmj+VK8Zxt7ujeujVJSRuOeeUlsqkHdlmaiXl2KQknrIsqVCi3Tnn0V5qcFxvo+1Ktc+surF6bBpWrTHzWV5mLtWVfD6C6kvvP/UFldFBD6v+FQs79yfoOe/j/bUrtpt6v5VndbbBmhUAQcy1BV2rpXxO373dTcLQ6coRWkt/RFo</description>
</item>
</channel>
</rss>
+140
View File
@@ -0,0 +1,140 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Devops — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Devops</h1>
<ul>
<li><a href="../../guides/vps-reverse-proxy/">Настройка VPS как реверс-прокси</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+19
View File
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Devops on docs.a2v.space</title>
<link>/tags/devops/</link>
<description>Recent content in Devops on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Sun, 29 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/devops/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Настройка VPS как реверс-прокси</title>
<link>/guides/vps-reverse-proxy/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/guides/vps-reverse-proxy/</guid>
<description>&lt;h2 id=&#34;общая-схема&#34;&gt;Общая схема&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Mac Studio (локальная сеть)&#xA; → autossh (SSH-туннели)&#xA; → VPS 95.163.232.9 (Debian)&#xA; → nginx (HTTPS reverse proxy)&#xA; → интернет&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;что-нужно-на-vps&#34;&gt;Что нужно на VPS&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-установленные-пакеты&#34;&gt;1. Установленные пакеты&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apt install nginx certbot python3-certbot-nginx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;2-ssh-доступ&#34;&gt;2. SSH-доступ&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Авторизация только по ключам&lt;/li&gt;&#xA;&lt;li&gt;Публичный ключ с Mac Studio добавлен в &lt;code&gt;/root/.ssh/authorized_keys&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;3-nginx&#34;&gt;3. nginx&lt;/h3&gt;&#xA;&lt;p&gt;Для каждого домена создать server block:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;HTTP → редирект на HTTPS&lt;/li&gt;&#xA;&lt;li&gt;HTTPS с SSL-сертификатом Let&amp;rsquo;s Encrypt&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;proxy_pass&lt;/code&gt; на localhost-порт туннеля&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Пример структуры:&lt;/p&gt;</description>
</item>
</channel>
</rss>
+140
View File
@@ -0,0 +1,140 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Docker-Compose — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Docker-Compose</h1>
<ul>
<li><a href="../../creds/leadera-db-docker/">Mac Studio — leadera-api БД (docker-compose)</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+19
View File
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Docker-Compose on docs.a2v.space</title>
<link>/tags/docker-compose/</link>
<description>Recent content in Docker-Compose on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Sun, 29 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/docker-compose/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Mac Studio — leadera-api БД (docker-compose)</title>
<link>/creds/leadera-db-docker/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/creds/leadera-db-docker/</guid>
<description>NYVK4PEGwmOHmAnGk8IAUc+lyFJtnEAvX6ZddBro/ILRWHOXBGYywgglFvQZ18BLDLb5DuA8GPAIdB/LwTHRXYO0KsmtlZQVWGEeeXlXAoEXpa5theoOQhebkW6LmiKyNGAVW2z9rK3nz6NnztYdn49LvGMjrHuR4IwCLbl/pYa96CPNRnxGDFlduFi8lMSspM0rBFi/bZhNGhzy36ViCl+aKr5P9cle0ZvM8E8av/6c5JjgDt88QFI3VYdTaTCE0+uHsXlnJN7Qgg/KH7kD</description>
</item>
</channel>
</rss>
+148
View File
@@ -0,0 +1,148 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Docker — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Docker</h1>
<ul>
<li><a href="../../diary/2026-03-29/">29 марта 2026</a></li>
<li><a href="../../creds/eversolo-companion-postgres/">Eversolo Companion PostgreSQL</a></li>
<li><a href="../../creds/leadera-db-local/">Mac Studio — leadera-api БД (локальная)</a></li>
<li><a href="../../plans/eversolo-companion-phases-3-9/">Завершить Eversolo Companion - этапы 3-9</a></li>
<li><a href="../../guides/sand-a2v-space/">Подключение sand.a2v.space (Leadera Project)</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
File diff suppressed because one or more lines are too long
+142
View File
@@ -0,0 +1,142 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Docs — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Docs</h1>
<ul>
<li><a href="../../diary/2026-03-29/">29 марта 2026</a></li>
<li><a href="../../creds/docs-a2v-space-auth/">docs.a2v.space Basic Auth</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+26
View File
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Docs on docs.a2v.space</title>
<link>/tags/docs/</link>
<description>Recent content in Docs on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Sun, 29 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/docs/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>29 марта 2026</title>
<link>/diary/2026-03-29/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/diary/2026-03-29/</guid>
<description>&lt;h2 id=&#34;timeline&#34;&gt;Timeline&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;20:03&lt;/strong&gt; — Настроили Angular + Go проекты (leadera) через pm2, удалили proxy.conf, подняли PostgreSQL в Docker&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;20:31&lt;/strong&gt; — Изучили API Eversolo T8 — полный список REST-эндпоинтов для управления музыкой&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;20:49&lt;/strong&gt; — Обсудили важность записи контекста в файлы для сохранения памяти между сессиями&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;21:13&lt;/strong&gt; — Начали проект docs.a2v.space — персональная документация на Hugo&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;21:44&lt;/strong&gt; — Завершили настройку Identity (Братан, SOUL.md, USER.md, IDENTITY.md)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;22:15&lt;/strong&gt; — Документировали инфраструктуру: VPS reverse proxy (claw.a2v.space, code.a2v.space, sand.a2v.space, docs.a2v.space)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;22:31&lt;/strong&gt; — Настроили docs.a2v.space: Hugo сайт, 83 страницы, Bootstrap 5 тёмная тема, AES-256-GCM шифрование кредов (мастер-пароль: Popoloka16!)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;22:47&lt;/strong&gt; — Добавили Basic auth: agaltsovav / Magamet787! для доступа к документации&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;23:02&lt;/strong&gt; — Создали cron задачу docs-a2v-daily-sync на ежедневное обновление в 03:00 МСК&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;23:18&lt;/strong&gt; — Полностью задокументировали Eversolo T8 API (воспроизведение, громкость, дисплей, питание, поиск и т.д.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;23:45&lt;/strong&gt; — Переписали TOOLS.md как полный справочник по инфраструктуре&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;eversolo-companion--статус-проекта&#34;&gt;Eversolo Companion — статус проекта&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Backend (Go + Gin):&lt;/strong&gt;&lt;/p&gt;</description>
</item>
<item>
<title>docs.a2v.space Basic Auth</title>
<link>/creds/docs-a2v-space-auth/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/creds/docs-a2v-space-auth/</guid>
<description>&lt;h2 id=&#34;basic-authentication&#34;&gt;Basic Authentication&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Username: agaltsovav&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Password: Magamet787!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;конфигурация-nginx&#34;&gt;Конфигурация Nginx&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-nginx&#34; data-lang=&#34;nginx&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;server&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;8091&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;docs.a2v.space&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;auth_basic&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Restricted&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;Access&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;auth_basic_user_file&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;/etc/nginx/.htpasswd&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;доступ&#34;&gt;Доступ&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;URL&lt;/strong&gt;: &lt;a href=&#34;https://docs.a2v.space&#34;&gt;https://docs.a2v.space&lt;/a&gt; (через reverse proxy)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Local&lt;/strong&gt;: http://localhost:8091 (для разработки)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Auth&lt;/strong&gt;: всегда требуется&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;мастер-пароль-для-шифрования&#34;&gt;Мастер-пароль для шифрования&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Важно&lt;/strong&gt;: Пароль для расшифровки файлов в разделе &lt;code&gt;creds/&lt;/code&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Master Password: Popoloka16!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;шифрование&#34;&gt;Шифрование&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Алгоритм: AES-256-GCM&lt;/li&gt;&#xA;&lt;li&gt;Хранилище: client-side encryption&lt;/li&gt;&#xA;&lt;li&gt;Файлы шифруются при сохранении&lt;/li&gt;&#xA;&lt;li&gt;Расшифровываются при чтении&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
</item>
</channel>
</rss>
+148
View File
@@ -0,0 +1,148 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Eversolo — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Eversolo</h1>
<ul>
<li><a href="../../diary/2026-03-29/">29 марта 2026</a></li>
<li><a href="../../creds/eversolo-companion-postgres/">Eversolo Companion PostgreSQL</a></li>
<li><a href="../../kb/eversolo-api/">Eversolo T8 API</a></li>
<li><a href="../../plans/eversolo-companion-phases-3-9/">Завершить Eversolo Companion - этапы 3-9</a></li>
<li><a href="../../plans/eversolo-control/">Реализовать управление Eversolo из OpenClaw</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+47
View File
@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Eversolo on docs.a2v.space</title>
<link>/tags/eversolo/</link>
<description>Recent content in Eversolo on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Sun, 29 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/eversolo/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>29 марта 2026</title>
<link>/diary/2026-03-29/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/diary/2026-03-29/</guid>
<description>&lt;h2 id=&#34;timeline&#34;&gt;Timeline&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;20:03&lt;/strong&gt; — Настроили Angular + Go проекты (leadera) через pm2, удалили proxy.conf, подняли PostgreSQL в Docker&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;20:31&lt;/strong&gt; — Изучили API Eversolo T8 — полный список REST-эндпоинтов для управления музыкой&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;20:49&lt;/strong&gt; — Обсудили важность записи контекста в файлы для сохранения памяти между сессиями&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;21:13&lt;/strong&gt; — Начали проект docs.a2v.space — персональная документация на Hugo&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;21:44&lt;/strong&gt; — Завершили настройку Identity (Братан, SOUL.md, USER.md, IDENTITY.md)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;22:15&lt;/strong&gt; — Документировали инфраструктуру: VPS reverse proxy (claw.a2v.space, code.a2v.space, sand.a2v.space, docs.a2v.space)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;22:31&lt;/strong&gt; — Настроили docs.a2v.space: Hugo сайт, 83 страницы, Bootstrap 5 тёмная тема, AES-256-GCM шифрование кредов (мастер-пароль: Popoloka16!)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;22:47&lt;/strong&gt; — Добавили Basic auth: agaltsovav / Magamet787! для доступа к документации&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;23:02&lt;/strong&gt; — Создали cron задачу docs-a2v-daily-sync на ежедневное обновление в 03:00 МСК&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;23:18&lt;/strong&gt; — Полностью задокументировали Eversolo T8 API (воспроизведение, громкость, дисплей, питание, поиск и т.д.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;23:45&lt;/strong&gt; — Переписали TOOLS.md как полный справочник по инфраструктуре&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;eversolo-companion--статус-проекта&#34;&gt;Eversolo Companion — статус проекта&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Backend (Go + Gin):&lt;/strong&gt;&lt;/p&gt;</description>
</item>
<item>
<title>Eversolo Companion PostgreSQL</title>
<link>/creds/eversolo-companion-postgres/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/creds/eversolo-companion-postgres/</guid>
<description>&lt;h2 id=&#34;docker-compose-креды-projectseversolo-companiondocker-composeyml&#34;&gt;Docker Compose креды (~/Projects/eversolo-companion/docker-compose.yml)&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;services&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;postgres&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;environment&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;POSTGRES_USER&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;postgres&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;POSTGRES_PASSWORD&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;password&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;POSTGRES_DB&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;eversolo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;локальные-креды-env-файл&#34;&gt;Локальные креды (.env файл)&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;POSTGRES_USER&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;postgres&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;POSTGRES_PASSWORD&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;password&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;POSTGRES_DB&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;eversolo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;хостинг&#34;&gt;Хостинг&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Host&lt;/strong&gt;: localhost&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Port&lt;/strong&gt;: 5433&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Database&lt;/strong&gt;: eversolo&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;безопасность&#34;&gt;Безопасность&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Используйте разные пароли для production&lt;/li&gt;&#xA;&lt;li&gt;Включите SSL для удаленного подключения&lt;/li&gt;&#xA;&lt;li&gt;Регулярно делайте бэкапы&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
</item>
<item>
<title>Eversolo T8 API</title>
<link>/kb/eversolo-api/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/kb/eversolo-api/</guid>
<description>&lt;p&gt;Eversolo T8 — музыкальный стример.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;IP:&lt;/strong&gt; 192.168.0.156&#xA;&lt;strong&gt;Порт:&lt;/strong&gt; 9529&#xA;&lt;strong&gt;Авторизация:&lt;/strong&gt; нет&lt;/p&gt;&#xA;&lt;p&gt;Базовый URL: &lt;code&gt;http://192.168.0.156:9529&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;воспроизведение&#34;&gt;Воспроизведение&lt;/h2&gt;&#xA;&lt;table&gt;&#xA; &lt;thead&gt;&#xA; &lt;tr&gt;&#xA; &lt;th&gt;Действие&lt;/th&gt;&#xA; &lt;th&gt;URL&lt;/th&gt;&#xA; &lt;/tr&gt;&#xA; &lt;/thead&gt;&#xA; &lt;tbody&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Play/Pause&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/playOrPause&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Следующий трек&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/playNext&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Предыдущий трек&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/playLast&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Перемотка (ms)&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/seekTo?time=&amp;lt;ms&amp;gt;&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Воспроизвести по ID&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/playMusic?type=4&amp;amp;id=&amp;lt;id&amp;gt;&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Состояние&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/getState&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;громкость&#34;&gt;Громкость&lt;/h2&gt;&#xA;&lt;table&gt;&#xA; &lt;thead&gt;&#xA; &lt;tr&gt;&#xA; &lt;th&gt;Действие&lt;/th&gt;&#xA; &lt;th&gt;URL&lt;/th&gt;&#xA; &lt;/tr&gt;&#xA; &lt;/thead&gt;&#xA; &lt;tbody&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Громкость вверх&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooControlCenter/RemoteControl/sendkey?key=Key.VolumeUp&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Громкость вниз&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooControlCenter/RemoteControl/sendkey?key=Key.VolumeDown&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Точная громкость&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/setDevicesVolume?volume=&amp;lt;0-200&amp;gt;&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Mute&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/setMuteVolume?isMute=1&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Unmute&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/setMuteVolume?isMute=0&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;входывыходы&#34;&gt;Входы/Выходы&lt;/h2&gt;&#xA;&lt;table&gt;&#xA; &lt;thead&gt;&#xA; &lt;tr&gt;&#xA; &lt;th&gt;Действие&lt;/th&gt;&#xA; &lt;th&gt;URL&lt;/th&gt;&#xA; &lt;/tr&gt;&#xA; &lt;/thead&gt;&#xA; &lt;tbody&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Получить список&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/getInputAndOutputList&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Установить вход&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/setInputList?tag=&amp;lt;tag&amp;gt;&amp;amp;index=&amp;lt;n&amp;gt;&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Установить выход&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/setOutInputList?tag=&amp;lt;tag&amp;gt;&amp;amp;index=&amp;lt;n&amp;gt;&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Теги выхода: RCA, XLRRCA, XLR, HDMI, SPDIF, USB&lt;/p&gt;</description>
</item>
<item>
<title>Завершить Eversolo Companion - этапы 3-9</title>
<link>/plans/eversolo-companion-phases-3-9/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/plans/eversolo-companion-phases-3-9/</guid>
<description>&lt;h2 id=&#34;описание&#34;&gt;Описание&lt;/h2&gt;&#xA;&lt;p&gt;Завершить разработку Eversolo Companion после решения проблемы с сетевым доступом.&lt;/p&gt;&#xA;&lt;h2 id=&#34;что-сделано&#34;&gt;Что сделано&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Backend (Go + Gin)&lt;/strong&gt;: собран, 17+ REST API эндпоинтов, WebSocket, CORS, state poller&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Frontend (Angular 17)&lt;/strong&gt;: собран, тёмная тема (Spotify-like), 5 экранов, 5 сервисов&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;PostgreSQL&lt;/strong&gt;: Docker, порт 5433, миграции готовы&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Docker Compose&lt;/strong&gt;: рабочий (postgres + api + frontend)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Спецификация&lt;/strong&gt;: полная в ~/Projects/eversolo-companion/SPEC.md&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;проблема&#34;&gt;Проблема&lt;/h2&gt;&#xA;&lt;p&gt;API не может достучаться до Eversolo T8 (192.168.0.156:9529) из-за ограничений OpenClaw sandbox.&lt;/p&gt;&#xA;&lt;h2 id=&#34;возможные-решения&#34;&gt;Возможные решения&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Настроить &lt;code&gt;tools.elevated.allowFrom.webchat&lt;/code&gt; для разрешения сетевых соединений&lt;/li&gt;&#xA;&lt;li&gt;Запустить API через launchd plist (как SSH туннели)&lt;/li&gt;&#xA;&lt;li&gt;Использовать отдельный контейнер без ограничений&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;этапы-3-9-после-решения-сети&#34;&gt;Этапы 3-9 (после решения сети)&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Библиотека синхронизации&lt;/strong&gt; — двухсторонний sync с Eversolo&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Плейлисты&lt;/strong&gt; — импорт/экспорт, редактирование&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Scrobbler&lt;/strong&gt; — Last.fm / ListenBrainz&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Обложки&lt;/strong&gt; — кэширование, отображение в UI&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Плеер&lt;/strong&gt; — улучшенный интерфейс управления&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Система уведомлений&lt;/strong&gt; — события от Eversolo&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Администрирование&lt;/strong&gt; — настройка подключений&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;связанные-ресурсы&#34;&gt;Связанные ресурсы&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;../../docs/eversolo-companion-spec/&#34;&gt;Спецификация проекта&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;../../kb/eversolo-api/&#34;&gt;API документация&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;../../diary/2026-03-29/&#34;&gt;Дневник разработки&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
</item>
<item>
<title>Реализовать управление Eversolo из OpenClaw</title>
<link>/plans/eversolo-control/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/plans/eversolo-control/</guid>
<description>&lt;h2 id=&#34;описание&#34;&gt;Описание&lt;/h2&gt;&#xA;&lt;p&gt;Добавить инструменты управления Eversolo T8 в OpenClaw.&lt;/p&gt;&#xA;&lt;h2 id=&#34;что-сделано&#34;&gt;Что сделано&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Изучен полный API Eversolo T8 (см. &lt;a href=&#34;../../kb/eversolo-api/&#34;&gt;Базу знаний&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;проблема&#34;&gt;Проблема&lt;/h2&gt;&#xA;&lt;p&gt;Sandbox OpenClaw не имеет доступа к локальной сети, где находится Eversolo.&lt;/p&gt;&#xA;&lt;h2 id=&#34;возможные-решения&#34;&gt;Возможные решения&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Настроить проброс портов&lt;/li&gt;&#xA;&lt;li&gt;Запустить OpenClaw без sandbox-ограничений&lt;/li&gt;&#xA;&lt;li&gt;Использовать промежуточный proxy-сервис&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
</item>
</channel>
</rss>
+144
View File
@@ -0,0 +1,144 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Go — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Go</h1>
<ul>
<li><a href="../../diary/2026-03-29/">29 марта 2026</a></li>
<li><a href="../../plans/eversolo-companion-phases-3-9/">Завершить Eversolo Companion - этапы 3-9</a></li>
<li><a href="../../guides/sand-a2v-space/">Подключение sand.a2v.space (Leadera Project)</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
File diff suppressed because one or more lines are too long
+140
View File
@@ -0,0 +1,140 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Hugo — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Hugo</h1>
<ul>
<li><a href="../../diary/2026-03-29/">29 марта 2026</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+19
View File
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Hugo on docs.a2v.space</title>
<link>/tags/hugo/</link>
<description>Recent content in Hugo on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Sun, 29 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/hugo/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>29 марта 2026</title>
<link>/diary/2026-03-29/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/diary/2026-03-29/</guid>
<description>&lt;h2 id=&#34;timeline&#34;&gt;Timeline&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;20:03&lt;/strong&gt; — Настроили Angular + Go проекты (leadera) через pm2, удалили proxy.conf, подняли PostgreSQL в Docker&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;20:31&lt;/strong&gt; — Изучили API Eversolo T8 — полный список REST-эндпоинтов для управления музыкой&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;20:49&lt;/strong&gt; — Обсудили важность записи контекста в файлы для сохранения памяти между сессиями&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;21:13&lt;/strong&gt; — Начали проект docs.a2v.space — персональная документация на Hugo&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;21:44&lt;/strong&gt; — Завершили настройку Identity (Братан, SOUL.md, USER.md, IDENTITY.md)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;22:15&lt;/strong&gt; — Документировали инфраструктуру: VPS reverse proxy (claw.a2v.space, code.a2v.space, sand.a2v.space, docs.a2v.space)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;22:31&lt;/strong&gt; — Настроили docs.a2v.space: Hugo сайт, 83 страницы, Bootstrap 5 тёмная тема, AES-256-GCM шифрование кредов (мастер-пароль: Popoloka16!)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;22:47&lt;/strong&gt; — Добавили Basic auth: agaltsovav / Magamet787! для доступа к документации&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;23:02&lt;/strong&gt; — Создали cron задачу docs-a2v-daily-sync на ежедневное обновление в 03:00 МСК&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;23:18&lt;/strong&gt; — Полностью задокументировали Eversolo T8 API (воспроизведение, громкость, дисплей, питание, поиск и т.д.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;23:45&lt;/strong&gt; — Переписали TOOLS.md как полный справочник по инфраструктуре&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;eversolo-companion--статус-проекта&#34;&gt;Eversolo Companion — статус проекта&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Backend (Go + Gin):&lt;/strong&gt;&lt;/p&gt;</description>
</item>
</channel>
</rss>
+140
View File
@@ -0,0 +1,140 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Identity — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Identity</h1>
<ul>
<li><a href="../../diary/2026-03-29/">29 марта 2026</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+19
View File
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Identity on docs.a2v.space</title>
<link>/tags/identity/</link>
<description>Recent content in Identity on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Sun, 29 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/identity/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>29 марта 2026</title>
<link>/diary/2026-03-29/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/diary/2026-03-29/</guid>
<description>&lt;h2 id=&#34;timeline&#34;&gt;Timeline&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;20:03&lt;/strong&gt; — Настроили Angular + Go проекты (leadera) через pm2, удалили proxy.conf, подняли PostgreSQL в Docker&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;20:31&lt;/strong&gt; — Изучили API Eversolo T8 — полный список REST-эндпоинтов для управления музыкой&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;20:49&lt;/strong&gt; — Обсудили важность записи контекста в файлы для сохранения памяти между сессиями&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;21:13&lt;/strong&gt; — Начали проект docs.a2v.space — персональная документация на Hugo&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;21:44&lt;/strong&gt; — Завершили настройку Identity (Братан, SOUL.md, USER.md, IDENTITY.md)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;22:15&lt;/strong&gt; — Документировали инфраструктуру: VPS reverse proxy (claw.a2v.space, code.a2v.space, sand.a2v.space, docs.a2v.space)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;22:31&lt;/strong&gt; — Настроили docs.a2v.space: Hugo сайт, 83 страницы, Bootstrap 5 тёмная тема, AES-256-GCM шифрование кредов (мастер-пароль: Popoloka16!)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;22:47&lt;/strong&gt; — Добавили Basic auth: agaltsovav / Magamet787! для доступа к документации&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;23:02&lt;/strong&gt; — Создали cron задачу docs-a2v-daily-sync на ежедневное обновление в 03:00 МСК&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;23:18&lt;/strong&gt; — Полностью задокументировали Eversolo T8 API (воспроизведение, громкость, дисплей, питание, поиск и т.д.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;23:45&lt;/strong&gt; — Переписали TOOLS.md как полный справочник по инфраструктуре&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;eversolo-companion--статус-проекта&#34;&gt;Eversolo Companion — статус проекта&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Backend (Go + Gin):&lt;/strong&gt;&lt;/p&gt;</description>
</item>
</channel>
</rss>
+198
View File
@@ -0,0 +1,198 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Tags — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../creds/">Креды</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Tags</h1>
<ul>
<li><a href="../tags/amnezia/">Amnezia</a></li>
<li><a href="../tags/angular/">Angular</a></li>
<li><a href="../tags/api/">Api</a></li>
<li><a href="../tags/authentication/">Authentication</a></li>
<li><a href="../tags/companion/">Companion</a></li>
<li><a href="../tags/database/">Database</a></li>
<li><a href="../tags/devops/">Devops</a></li>
<li><a href="../tags/docker/">Docker</a></li>
<li><a href="../tags/docker-compose/">Docker-Compose</a></li>
<li><a href="../tags/docs/">Docs</a></li>
<li><a href="../tags/eversolo/">Eversolo</a></li>
<li><a href="../tags/go/">Go</a></li>
<li><a href="../tags/hugo/">Hugo</a></li>
<li><a href="../tags/identity/">Identity</a></li>
<li><a href="../tags/infrastructure/">Infrastructure</a></li>
<li><a href="../tags/leadera/">Leadera</a></li>
<li><a href="../tags/llm/">Llm</a></li>
<li><a href="../tags/music/">Music</a></li>
<li><a href="../tags/nginx/">Nginx</a></li>
<li><a href="../tags/ollama/">Ollama</a></li>
<li><a href="../tags/openclaw/">Openclaw</a></li>
<li><a href="../tags/opencode/">Opencode</a></li>
<li><a href="../tags/postgresql/">Postgresql</a></li>
<li><a href="../tags/reg.ru/">Reg.ru</a></li>
<li><a href="../tags/reverse-proxy/">Reverse-Proxy</a></li>
<li><a href="../tags/ssh/">Ssh</a></li>
<li><a href="../tags/streamer/">Streamer</a></li>
<li><a href="../tags/tunnel/">Tunnel</a></li>
<li><a href="../tags/vpn/">Vpn</a></li>
<li><a href="../tags/vps/">Vps</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../js/search.js"></script>
<script src="../js/creds.js"></script>
</body>
</html>
+222
View File
@@ -0,0 +1,222 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Tags on docs.a2v.space</title>
<link>/tags/</link>
<description>Recent content in Tags on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Sun, 29 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Amnezia</title>
<link>/tags/amnezia/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/amnezia/</guid>
<description></description>
</item>
<item>
<title>Angular</title>
<link>/tags/angular/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/angular/</guid>
<description></description>
</item>
<item>
<title>Api</title>
<link>/tags/api/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/api/</guid>
<description></description>
</item>
<item>
<title>Authentication</title>
<link>/tags/authentication/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/authentication/</guid>
<description></description>
</item>
<item>
<title>Companion</title>
<link>/tags/companion/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/companion/</guid>
<description></description>
</item>
<item>
<title>Database</title>
<link>/tags/database/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/database/</guid>
<description></description>
</item>
<item>
<title>Devops</title>
<link>/tags/devops/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/devops/</guid>
<description></description>
</item>
<item>
<title>Docker</title>
<link>/tags/docker/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/docker/</guid>
<description></description>
</item>
<item>
<title>Docker-Compose</title>
<link>/tags/docker-compose/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/docker-compose/</guid>
<description></description>
</item>
<item>
<title>Docs</title>
<link>/tags/docs/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/docs/</guid>
<description></description>
</item>
<item>
<title>Eversolo</title>
<link>/tags/eversolo/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/eversolo/</guid>
<description></description>
</item>
<item>
<title>Go</title>
<link>/tags/go/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/go/</guid>
<description></description>
</item>
<item>
<title>Hugo</title>
<link>/tags/hugo/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/hugo/</guid>
<description></description>
</item>
<item>
<title>Identity</title>
<link>/tags/identity/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/identity/</guid>
<description></description>
</item>
<item>
<title>Infrastructure</title>
<link>/tags/infrastructure/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/infrastructure/</guid>
<description></description>
</item>
<item>
<title>Leadera</title>
<link>/tags/leadera/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/leadera/</guid>
<description></description>
</item>
<item>
<title>Llm</title>
<link>/tags/llm/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/llm/</guid>
<description></description>
</item>
<item>
<title>Music</title>
<link>/tags/music/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/music/</guid>
<description></description>
</item>
<item>
<title>Nginx</title>
<link>/tags/nginx/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/nginx/</guid>
<description></description>
</item>
<item>
<title>Ollama</title>
<link>/tags/ollama/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/ollama/</guid>
<description></description>
</item>
<item>
<title>Openclaw</title>
<link>/tags/openclaw/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/openclaw/</guid>
<description></description>
</item>
<item>
<title>Opencode</title>
<link>/tags/opencode/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/opencode/</guid>
<description></description>
</item>
<item>
<title>Postgresql</title>
<link>/tags/postgresql/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/postgresql/</guid>
<description></description>
</item>
<item>
<title>Reg.ru</title>
<link>/tags/reg.ru/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/reg.ru/</guid>
<description></description>
</item>
<item>
<title>Reverse-Proxy</title>
<link>/tags/reverse-proxy/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/reverse-proxy/</guid>
<description></description>
</item>
<item>
<title>Ssh</title>
<link>/tags/ssh/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/ssh/</guid>
<description></description>
</item>
<item>
<title>Streamer</title>
<link>/tags/streamer/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/streamer/</guid>
<description></description>
</item>
<item>
<title>Tunnel</title>
<link>/tags/tunnel/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/tunnel/</guid>
<description></description>
</item>
<item>
<title>Vpn</title>
<link>/tags/vpn/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/vpn/</guid>
<description></description>
</item>
<item>
<title>Vps</title>
<link>/tags/vps/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/tags/vps/</guid>
<description></description>
</item>
</channel>
</rss>
+144
View File
@@ -0,0 +1,144 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Infrastructure — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Infrastructure</h1>
<ul>
<li><a href="../../diary/2026-03-29/">29 марта 2026</a></li>
<li><a href="../../creds/vpn-vps/">VPN VPS</a></li>
<li><a href="../../creds/vps-reg-ru/">VPS reg.ru</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+33
View File
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Infrastructure on docs.a2v.space</title>
<link>/tags/infrastructure/</link>
<description>Recent content in Infrastructure on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Sun, 29 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/infrastructure/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>29 марта 2026</title>
<link>/diary/2026-03-29/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/diary/2026-03-29/</guid>
<description>&lt;h2 id=&#34;timeline&#34;&gt;Timeline&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;20:03&lt;/strong&gt; — Настроили Angular + Go проекты (leadera) через pm2, удалили proxy.conf, подняли PostgreSQL в Docker&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;20:31&lt;/strong&gt; — Изучили API Eversolo T8 — полный список REST-эндпоинтов для управления музыкой&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;20:49&lt;/strong&gt; — Обсудили важность записи контекста в файлы для сохранения памяти между сессиями&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;21:13&lt;/strong&gt; — Начали проект docs.a2v.space — персональная документация на Hugo&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;21:44&lt;/strong&gt; — Завершили настройку Identity (Братан, SOUL.md, USER.md, IDENTITY.md)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;22:15&lt;/strong&gt; — Документировали инфраструктуру: VPS reverse proxy (claw.a2v.space, code.a2v.space, sand.a2v.space, docs.a2v.space)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;22:31&lt;/strong&gt; — Настроили docs.a2v.space: Hugo сайт, 83 страницы, Bootstrap 5 тёмная тема, AES-256-GCM шифрование кредов (мастер-пароль: Popoloka16!)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;22:47&lt;/strong&gt; — Добавили Basic auth: agaltsovav / Magamet787! для доступа к документации&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;23:02&lt;/strong&gt; — Создали cron задачу docs-a2v-daily-sync на ежедневное обновление в 03:00 МСК&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;23:18&lt;/strong&gt; — Полностью задокументировали Eversolo T8 API (воспроизведение, громкость, дисплей, питание, поиск и т.д.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;23:45&lt;/strong&gt; — Переписали TOOLS.md как полный справочник по инфраструктуре&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;eversolo-companion--статус-проекта&#34;&gt;Eversolo Companion — статус проекта&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Backend (Go + Gin):&lt;/strong&gt;&lt;/p&gt;</description>
</item>
<item>
<title>VPN VPS</title>
<link>/creds/vpn-vps/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/creds/vpn-vps/</guid>
<description>YEI16NAJ78d3lmSa/lca8Zxczt+u6GyMUYHduX47VoFQdj0Ixozd8R6yXoB7eM+AjhCtNGkOxGlOj2s73ABOBjLEIVIhD4Z+xTyzdtah4VpyLoltYOeNYsnbIIFARdF/FBYq5COXohhXs33K5ozznrtDd/awbKMjl/sbQqjXAZ+A3ZSob6/5uU+fFKetXLR6v4ZLAYQ57iiD21ImSLSggwv+rJgK5XyPDKEPD4N5nOsiDrLgoukVBMvgJ54PqfPp2Hni+2tdKOlMnOG2npTuu4SkyALcfFar</description>
</item>
<item>
<title>VPS reg.ru</title>
<link>/creds/vps-reg-ru/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/creds/vps-reg-ru/</guid>
<description>IpYXLMtgCFlGQ550DZCLjq37VsnNqL08Rn03iRS7kQ7ozBZNsiZySFzDAvYh4xIHytRDy0Sz0KGUXekr0S+cNiJsmtZ8kj0Pd0JhevhxTMZF2khFvs/LFWoTL5ZwAJ34y/qfLw2gaWX90VZDu0wO+KeAQeXhrWmol/2zUlfWX1AihyYqD2vRz+h2FcjD8ubYOXG35PyX7OlV1HPXgDv5X/bFNrxzPc867UOwB4aGxY9a</description>
</item>
</channel>
</rss>
+142
View File
@@ -0,0 +1,142 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Leadera — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Leadera</h1>
<ul>
<li><a href="../../creds/leadera-db-docker/">Mac Studio — leadera-api БД (docker-compose)</a></li>
<li><a href="../../creds/leadera-db-local/">Mac Studio — leadera-api БД (локальная)</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+26
View File
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Leadera on docs.a2v.space</title>
<link>/tags/leadera/</link>
<description>Recent content in Leadera on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Sun, 29 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/leadera/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Mac Studio — leadera-api БД (docker-compose)</title>
<link>/creds/leadera-db-docker/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/creds/leadera-db-docker/</guid>
<description>NYVK4PEGwmOHmAnGk8IAUc+lyFJtnEAvX6ZddBro/ILRWHOXBGYywgglFvQZ18BLDLb5DuA8GPAIdB/LwTHRXYO0KsmtlZQVWGEeeXlXAoEXpa5theoOQhebkW6LmiKyNGAVW2z9rK3nz6NnztYdn49LvGMjrHuR4IwCLbl/pYa96CPNRnxGDFlduFi8lMSspM0rBFi/bZhNGhzy36ViCl+aKr5P9cle0ZvM8E8av/6c5JjgDt88QFI3VYdTaTCE0+uHsXlnJN7Qgg/KH7kD</description>
</item>
<item>
<title>Mac Studio — leadera-api БД (локальная)</title>
<link>/creds/leadera-db-local/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/creds/leadera-db-local/</guid>
<description>p7Iw7Y3zbj1kLBcbOXGoO27oDwF85AhxBW7saT538hxi0ogJpyFeM49GDuLHzxuyknvdNC/rx3tb4AFnGkCeHSrrCmj+VK8Zxt7ujeujVJSRuOeeUlsqkHdlmaiXl2KQknrIsqVCi3Tnn0V5qcFxvo+1Ktc+surF6bBpWrTHzWV5mLtWVfD6C6kvvP/UFldFBD6v+FQs79yfoOe/j/bUrtpt6v5VndbbBmhUAQcy1BV2rpXxO373dTcLQ6coRWkt/RFo</description>
</item>
</channel>
</rss>
+140
View File
@@ -0,0 +1,140 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Llm — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Llm</h1>
<ul>
<li><a href="../../plans/ollama-openclaw/">Настроить интеграцию Ollama с OpenClaw</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+19
View File
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Llm on docs.a2v.space</title>
<link>/tags/llm/</link>
<description>Recent content in Llm on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Sun, 29 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/llm/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Настроить интеграцию Ollama с OpenClaw</title>
<link>/plans/ollama-openclaw/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/plans/ollama-openclaw/</guid>
<description>&lt;h2 id=&#34;описание&#34;&gt;Описание&lt;/h2&gt;&#xA;&lt;p&gt;Добавить поддержку Ollama в OpenClaw для использования локальных LLM моделей.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема&#34;&gt;Проблема&lt;/h2&gt;&#xA;&lt;p&gt;Модель &lt;code&gt;qwen3.5:9b&lt;/code&gt; добавлена в конфиг &lt;code&gt;openclaw.json&lt;/code&gt;, но не отображается в &lt;code&gt;openclaw models list&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;статус&#34;&gt;Статус&lt;/h2&gt;&#xA;&lt;p&gt;Отложено по решению Антона.&lt;/p&gt;</description>
</item>
</channel>
</rss>
+140
View File
@@ -0,0 +1,140 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Music — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Music</h1>
<ul>
<li><a href="../../kb/eversolo-api/">Eversolo T8 API</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+19
View File
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Music on docs.a2v.space</title>
<link>/tags/music/</link>
<description>Recent content in Music on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Sun, 29 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/music/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Eversolo T8 API</title>
<link>/kb/eversolo-api/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/kb/eversolo-api/</guid>
<description>&lt;p&gt;Eversolo T8 — музыкальный стример.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;IP:&lt;/strong&gt; 192.168.0.156&#xA;&lt;strong&gt;Порт:&lt;/strong&gt; 9529&#xA;&lt;strong&gt;Авторизация:&lt;/strong&gt; нет&lt;/p&gt;&#xA;&lt;p&gt;Базовый URL: &lt;code&gt;http://192.168.0.156:9529&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;воспроизведение&#34;&gt;Воспроизведение&lt;/h2&gt;&#xA;&lt;table&gt;&#xA; &lt;thead&gt;&#xA; &lt;tr&gt;&#xA; &lt;th&gt;Действие&lt;/th&gt;&#xA; &lt;th&gt;URL&lt;/th&gt;&#xA; &lt;/tr&gt;&#xA; &lt;/thead&gt;&#xA; &lt;tbody&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Play/Pause&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/playOrPause&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Следующий трек&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/playNext&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Предыдущий трек&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/playLast&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Перемотка (ms)&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/seekTo?time=&amp;lt;ms&amp;gt;&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Воспроизвести по ID&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/playMusic?type=4&amp;amp;id=&amp;lt;id&amp;gt;&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Состояние&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/getState&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;громкость&#34;&gt;Громкость&lt;/h2&gt;&#xA;&lt;table&gt;&#xA; &lt;thead&gt;&#xA; &lt;tr&gt;&#xA; &lt;th&gt;Действие&lt;/th&gt;&#xA; &lt;th&gt;URL&lt;/th&gt;&#xA; &lt;/tr&gt;&#xA; &lt;/thead&gt;&#xA; &lt;tbody&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Громкость вверх&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooControlCenter/RemoteControl/sendkey?key=Key.VolumeUp&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Громкость вниз&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooControlCenter/RemoteControl/sendkey?key=Key.VolumeDown&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Точная громкость&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/setDevicesVolume?volume=&amp;lt;0-200&amp;gt;&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Mute&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/setMuteVolume?isMute=1&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Unmute&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/setMuteVolume?isMute=0&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;входывыходы&#34;&gt;Входы/Выходы&lt;/h2&gt;&#xA;&lt;table&gt;&#xA; &lt;thead&gt;&#xA; &lt;tr&gt;&#xA; &lt;th&gt;Действие&lt;/th&gt;&#xA; &lt;th&gt;URL&lt;/th&gt;&#xA; &lt;/tr&gt;&#xA; &lt;/thead&gt;&#xA; &lt;tbody&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Получить список&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/getInputAndOutputList&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Установить вход&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/setInputList?tag=&amp;lt;tag&amp;gt;&amp;amp;index=&amp;lt;n&amp;gt;&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;tr&gt;&#xA; &lt;td&gt;Установить выход&lt;/td&gt;&#xA; &lt;td&gt;&lt;code&gt;/ZidooMusicControl/v2/setOutInputList?tag=&amp;lt;tag&amp;gt;&amp;amp;index=&amp;lt;n&amp;gt;&lt;/code&gt;&lt;/td&gt;&#xA; &lt;/tr&gt;&#xA; &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Теги выхода: RCA, XLRRCA, XLR, HDMI, SPDIF, USB&lt;/p&gt;</description>
</item>
</channel>
</rss>
+148
View File
@@ -0,0 +1,148 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Nginx — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Nginx</h1>
<ul>
<li><a href="../../creds/docs-a2v-space-auth/">docs.a2v.space Basic Auth</a></li>
<li><a href="../../guides/vps-reverse-proxy/">Настройка VPS как реверс-прокси</a></li>
<li><a href="../../guides/claw-a2v-space/">Подключение claw.a2v.space (OpenClaw)</a></li>
<li><a href="../../guides/code-a2v-space/">Подключение code.a2v.space (OpenCode)</a></li>
<li><a href="../../guides/sand-a2v-space/">Подключение sand.a2v.space (Leadera Project)</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
File diff suppressed because one or more lines are too long
+140
View File
@@ -0,0 +1,140 @@
<!DOCTYPE html>
<html lang="ru-ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Ollama — docs.a2v.space</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/custom.css">
</head>
<body>
<header class="site-header">
<nav class="navbar navbar-expand-lg">
<div class="container-fluid">
<a class="navbar-brand" href="../../">docs.a2v.space</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="../../diary/">Дневник</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../kb/">База знаний</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../plans/">Планы</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../guides/">Инструкции</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../creds/">Креды</a>
</li>
</ul>
<form class="d-flex search-form" role="search">
<input class="form-control me-2" type="search" placeholder="Поиск..." aria-label="Search" id="search-input">
<button class="btn btn-outline-light" type="submit">Найти</button>
</form>
</div>
<button class="btn btn-outline-light d-md-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar" aria-expanded="false" aria-controls="sidebar">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
</svg>
</button>
</div>
</nav>
<div id="search-results" class="search-results" style="display: none;">
<div class="search-results-content">
<button type="button" class="btn-close float-end" id="close-search"></button>
<h5>Результаты поиска</h5>
<ul id="results-list"></ul>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<aside class="col-md-3 col-lg-2 d-md-block sidebar collapse" id="sidebar">
<div class="sidebar-content">
<h6>Разделы</h6>
<ul class="nav flex-column">
<li class="nav-item"><a class="nav-link" href="../../diary/">Дневник</a></li>
<li class="nav-item"><a class="nav-link" href="../../kb/">База знаний</a></li>
<li class="nav-item"><a class="nav-link" href="../../plans/">Планы</a></li>
<li class="nav-item"><a class="nav-link" href="../../guides/">Инструкции</a></li>
<li class="nav-item"><a class="nav-link" href="../../creds/">Креды</a></li>
</ul>
</div>
</aside>
<main class="col-md-9 col-lg-10 main-content">
<div class="article-content">
<h1>Ollama</h1>
<ul>
<li><a href="../../plans/ollama-openclaw/">Настроить интеграцию Ollama с OpenClaw</a></li>
</ul>
</div>
</main>
</div>
</div>
<footer class="site-footer">
<div class="container">
<p class="text-center mb-0">&copy; 2026 docs.a2v.space</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js"></script>
<script src="../../js/search.js"></script>
<script src="../../js/creds.js"></script>
</body>
</html>
+19
View File
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Ollama on docs.a2v.space</title>
<link>/tags/ollama/</link>
<description>Recent content in Ollama on docs.a2v.space</description>
<generator>Hugo</generator>
<language>ru-ru</language>
<lastBuildDate>Sun, 29 Mar 2026 00:00:00 +0000</lastBuildDate>
<atom:link href="/tags/ollama/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Настроить интеграцию Ollama с OpenClaw</title>
<link>/plans/ollama-openclaw/</link>
<pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
<guid>/plans/ollama-openclaw/</guid>
<description>&lt;h2 id=&#34;описание&#34;&gt;Описание&lt;/h2&gt;&#xA;&lt;p&gt;Добавить поддержку Ollama в OpenClaw для использования локальных LLM моделей.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема&#34;&gt;Проблема&lt;/h2&gt;&#xA;&lt;p&gt;Модель &lt;code&gt;qwen3.5:9b&lt;/code&gt; добавлена в конфиг &lt;code&gt;openclaw.json&lt;/code&gt;, но не отображается в &lt;code&gt;openclaw models list&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;статус&#34;&gt;Статус&lt;/h2&gt;&#xA;&lt;p&gt;Отложено по решению Антона.&lt;/p&gt;</description>
</item>
</channel>
</rss>

Some files were not shown because too many files have changed in this diff Show More