Files
docs.a2v.space/public/index.json
T

1 line
35 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
[{"content":"Обзор проекта Leadera — SaaS-система управления IT-ландшафтом с поддержкой диаграмм Ганта. Проект разделен на два компонента:\nБекенд Стек: Go 1.21+, GIN, PostgreSQL 16+, pgx v5 + sqlx, JWT Архитектура: Clean Architecture с разделением на слои Особенности: RESTful API, автоматические миграции, система ролей через spaces Фронтенд Стек: Angular 21.1.3, Bootstrap 5, RxJS Особенности: JWT-аутентификация, перехватчики HTTP, lazy loading Бекенд — найденные проблемы Критические проблемы 1. Уязвимость XSS в сериализации DOM Файл: internal/handlers/space_handler.go:47-63 Критичность: critical Описание: В методе GetSpaceMembers используется c.BindJSON(\u0026amp;req) без валидации, что может привести к XSS при сериализации данных в JSON Рекомендация: Добавить валидацию DTO и использование HTML sanitizer 2. Небезопасное хранение токенов Файл: internal/utils/password.go:19-21 Критичность: critical Описание: Refresh токены хэшируются с помощью SHA256 вместо bcrypt, что делает их уязвимыми для перебора Рекомендация: Перейти на bcrypt для хэширования refresh токенов 3. Отсутствие Rate Limiting Файл: Нет реализации Критичность: high Описание: Нет ограничений на количество запросов к API, что делает систему уязвимой для brute-force атак Рекомендация: Реализовать middleware для rate limiting Высокие проблемы 4. Отсутствие валидации входных данных Файл: internal/handlers/auth_handler.go:26-32, 52-58 Критичность: high Описание: Нет строгой валидации email, длинны строк и других параметров запросов Рекомендация: Внедрить библиотеку для валидации (go-playground/validator) 5. Отсутствие защиты от CSRF Файл: Нет реализации Критичность: high Описание: Нет CSRF-токенов для POST/PUT/DELETE запросов Рекомендация: Реализовать CSRF middleware 6. Потенциальные N+1 запросы Файл: internal/repository/space_repository.go Критичность: high Описание: Нет индексов и оптимизации для запросов с JOIN при получении членов spaces Рекомендация: Добавить правильные индексы и использовать eager loading Средние проблемы 7. Отсутствие логирования ошибок Файл: internal/handlers/gantt_handler.go:78-95 Критичность: medium Описание: Ошибки валидации не логируются, что затрудняет отладку Рекомендация: Структурированное логирование всех ошибок 8. Жестко закодированные настройки Файл: internal/middleware/space_middleware.go:121-128 Критичность: medium Описание: Статическая проверка subscription status без гибкой конфигурации Рекомендация: Вынести в конфигурацию возможные статусы подписки 9. Отсутствие ограничений на количество записей Файл: internal/handlers/gantt_handler.go Критичность: medium Описание: Нет ограничений на количество задач, разделов или диаграмм на пользователя Рекомендация: Добавить лимиты через middleware Низкие проблемы 10. Отсутствие валидации для special символов Файл: internal/utils/validation.go:21-24 Критичность: low Описание: Валидация паролей не включает некоторые специальные символы Рекомендация: Расширить список разрешенных символов 11. Отсутствие Health Check для базы данных Файл: internal/handlers/handler.go Критичность: low Описание: Health endpoint не проверяет доступность базы данных Рекомендация: Добавить ping к базе данных в health check Фронтенд — найденные проблемы Критические проблемы 1. Хранение JWT токенов в localStorage Файл: src/app/core/auth/auth.service.ts:25-40 Критичность: critical Описание: Токены хранятся в localStorage, уязвимом для XSS атак Рекомендация: Использовать HTTP-only cookies или secure storage 2. Отсутствие Content Security Policy (CSP) Файл: src/index.html Критичность: critical Описание: Нет заголовков CSP для защиты от XSS Рекомендация: Добавить заголовки CSP в HTTP ответы Высокие проблемы 3. Нет валидации форм на стороне клиента Файл: src/app/pages/auth/components/sign-up/sign-up.component.ts Критичность: high Описание: Формы не проходят полную валидацию перед отправкой Рекомендация: Реализовать полноценную клиентскую валидацию 4. Отсутствие обработки race conditions Файл: src/app/core/auth/auth.interceptor.ts:15-45 Критичность: high Описание: Потенциальные race conditions при обновлении токенов Рекомендация: Реализовать очередь запросов при обновлении токенов 5. Нет ограничений на длину вводимых данных Файл: src/app/components/forms/gantt-form.component.ts Критичность: high Описание: Пользователь может вводить очень длинные тексты без ограничений Рекомендация: Добавить максимальную длину для полей ввода Средние проблемы 6. Нет proper error handling states Файл: src/app/layouts/components/navbar/navbar.component.ts Критичность: medium Описание: Нет graceful handling ошибок при загрузке данных Рекомендация: Реализовать skeleton loaders и error boundaries 7. Плохая производительность при большом количестве данных Файл: src/app/pages/dashboard/gantt/gantt-page.component.ts Критичность: medium Описание: Нет virtual scrolling для больших списков задач Рекомендация: Реализовать virtual scrolling и lazy loading 8. Отсутствие a11y для некоторых компонентов Файл: src/app/components/charts/gantt-chart/gantt-chart.component.ts Критичность: medium Описание: Гант-диаграмма не имеет proper ARIA labels Рекомендация: Добавить ARIA атрибуты и keyboard navigation Низкие проблемы 9. Нет CSRF protection Файл: src/app/core/auth/auth.interceptor.ts Критичность: low Описание: Отсутствие CSRF токенов для чувствительных операций Рекомендация: Добавить CSRF токены в заголовки 10. Плохая мобильная адаптация Файл: src/app/styles/gantt.scss Критичность: low Описание: Нет proper responsive design для мобильных устройств Рекомендация: Добавить медиа-запросы и touch-friendly интерфейс Безопасность Обнаруженные уязвимости: XSS уязвимости - Отсутствие валидации входных данных на бэкенде Небезопасное хранение токенов - Refresh токены используют SHA256 вместо bcrypt Отсутствие rate limiting - Уязвимость для brute-force атак CSRF уязвимости - Отсутствие CSRF-токенов Storage vulnerabilities - localStorage используется для хранения JWT Рекомендации по безопасности: Реализовать Input Validation на всех уровнях Перейти на HTTP-only cookies для токенов Реализовать rate limiting middleware Добавить CSRF protection Внедрить заголовки безопасности (CSP, HSTS, X-Frame-Options) Реализовать proper logging и мониторинг Добавить автоматические тесты безопасности UX улучшения Критические улучшения: Надежность аутентификации - Реализовать MFA Уведомления об ошибках - Лучшее error messaging Прогресс-бары - Для долгих операций Высокие улучшения: Поиск по проекту - Быстрый поиск across spaces Drag \u0026amp; Drop - Для задач и диаграмм Keyboard shortcuts - Повышение продуктивности Темная тема - Улучшение UX при длительной работе Средние улучшения: Экспорт данных -多种 форматы Коллаборация в реальном времени - WebSocket для live updates Шаблоны диаграмм - Pre-built templates Аналитика и отчеты - Insights по проектам Низкие улучшения: Mobile app - iOS/Android приложения Интеграции - Slack, Teams, Jira и др. API для плагинов - Расширяемость системы Приоритизированный план исправления Приоритет Проблема Файлы Трудоёмкость Critical XSS уязвимости internal/handlers/*.go 3 дня Critical Хранение JWT в localStorage src/app/core/auth/*.ts 1 день Critical Небезопасное хранение refresh токенов internal/utils/password.go 1 день High Rate limiting middleware internal/middleware/ 2 дня High CSRF protection internal/middleware/, src/app/core/auth/ 2 дня High Валидация входных данных internal/handlers/, internal/utils/ 3 дня Medium Оптимизация запросов БД internal/repository/ 2 дня Medium Структурированное логирование internal/handlers/ 1 день Low CSP заголовки src/index.html, конфигурация сервера 1 день Low A11y улучшения src/app/components/ 3 дня Общая оценка: Critical issues: 6 задач, 8 дней High issues: 5 задач, 7 дней Medium issues: 3 задачи, 6 дней Low issues: 4 задачи, 5 дней Общая трудоёмкость: 26 дней разработки + 3 дня на тестирование = 29 дней\nРекомендуемый порядок работы: Неделя 1: Решение всех critical проблем (безопасность) Неделя 2: High приоритетные улучшения (защита) Неделя 3: Medium и Low улучшения (качество и UX) Примечание: Этот аудит содержит только анализ и рекомендации. Не следует вносить изменения в код без дополнительных тестов и проверок безопасности.\n","section":"guides","tags":["audit","leadera","security","ux"],"title":"Аудит Leadera","url":"/guides/leadera-audit/"},{"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/"},{"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":"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/"},{"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":"Настройка SSH туннелей VPS reg.ru (95.163.232.9) # На 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\n\u0026lt;?xml version=\u0026#34;1.0\u0026#34; encoding=\u0026#34;UTF-8\u0026#34;?\u0026gt; \u0026lt;!DOCTYPE plist PUBLIC \u0026#34;-//Apple//DTD PLIST 1.0//EN\u0026#34; \u0026#34;http://www.apple.com/DTDs/PropertyList-1.0.dtd\u0026#34;\u0026gt; \u0026lt;plist version=\u0026#34;1.0\u0026#34;\u0026gt; \u0026lt;dict\u0026gt; \u0026lt;key\u0026gt;Label\u0026lt;/key\u0026gt; \u0026lt;string\u0026gt;com.openclaw.sshtunnel\u0026lt;/string\u0026gt; \u0026lt;key\u0026gt;ProgramArguments\u0026lt;/key\u0026gt; \u0026lt;array\u0026gt; \u0026lt;string\u0026gt;ssh\u0026lt;/string\u0026gt; \u0026lt;string\u0026gt;-N\u0026lt;/string\u0026gt; \u0026lt;string\u0026gt;-R\u0026lt;/string\u0026gt; \u0026lt;string\u0026gt;8080:localhost:8080\u0026lt;/string\u0026gt; \u0026lt;string\u0026gt;root@95.163.232.9\u0026lt;/string\u0026gt; \u0026lt;/array\u0026gt; \u0026lt;key\u0026gt;RunAtLoad\u0026lt;/key\u0026gt; \u0026lt;true/\u0026gt; \u0026lt;key\u0026gt;KeepAlive\u0026lt;/key\u0026gt; \u0026lt;true/\u0026gt; \u0026lt;/dict\u0026gt; \u0026lt;/plist\u0026gt; Автозапуск # Загрузить plist launchctl load ~/Library/LaunchAgents/com.openclaw.sshtunnel.plist # Проверить статус launchctl list | grep sshtunnel # Удалить (при необходимости) launchctl unload ~/Library/LaunchAgents/com.openclaw.sshtunnel.plist Доступ к сервисам Через reverse proxy на VPS:\ncode.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\u0026rsquo;s Encrypt сертификаты:\nПуть: /etc/letsencrypt/live/{claw,code,sand}.a2v.space/ Автопродление через certbot ","section":"guides","tags":["ssh","tunnel","vps","reverse-proxy"],"title":"SSH туннели для VPS reverse proxy","url":"/guides/ssh-tunnels-vps/"},{"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/"},{"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":"Общая схема Mac Studio (локальная сеть) → autossh (SSH-туннели) → VPS 95.163.232.9 (Debian) → nginx (HTTPS reverse proxy) → интернет Что нужно на VPS 1. Установленные пакеты apt update apt install nginx certbot python3-certbot-nginx 2. SSH-доступ Авторизация только по ключам Публичный ключ с Mac Studio добавлен в /root/.ssh/authorized_keys 3. nginx Для каждого домена создать server block:\nHTTP → редирект на HTTPS HTTPS с SSL-сертификатом Let\u0026rsquo;s Encrypt proxy_pass на localhost-порт туннеля Пример структуры:\n/etc/nginx/sites-available/ claw.a2v.space.conf code.a2v.space.conf sand.a2v.space.conf 4. SSL-сертификаты certbot certonly --nginx -d \u0026lt;domain\u0026gt; certbot renew --dry-run # проверить автообновление Что нужно на Mac Studio autossh через launchd Plist: ~/Library/LaunchAgents/com.openclaw.sshtunnel.plist\nОдин plist с несколькими -R флагами:\n\u0026lt;key\u0026gt;ProgramArguments\u0026lt;/key\u0026gt; \u0026lt;array\u0026gt; \u0026lt;string\u0026gt;/usr/local/bin/autossh\u0026lt;/string\u0026gt; \u0026lt;string\u0026gt;-M\u0026lt;/string\u0026gt; \u0026lt;string\u0026gt;0\u0026lt;/string\u0026gt; \u0026lt;string\u0026gt;-R\u0026lt;/string\u0026gt; \u0026lt;string\u0026gt;8080:localhost:18789\u0026lt;/string\u0026gt; \u0026lt;string\u0026gt;-R\u0026lt;/string\u0026gt; \u0026lt;string\u0026gt;8081:localhost:4096\u0026lt;/string\u0026gt; \u0026lt;string\u0026gt;-R\u0026lt;/string\u0026gt; \u0026lt;string\u0026gt;8082:localhost:4200\u0026lt;/string\u0026gt; \u0026lt;string\u0026gt;-R\u0026lt;/string\u0026gt; \u0026lt;string\u0026gt;8083:localhost:8080\u0026lt;/string\u0026gt; \u0026lt;string\u0026gt;root@95.163.232.9\u0026lt;/string\u0026gt; \u0026lt;string\u0026gt;-N\u0026lt;/string\u0026gt; \u0026lt;string\u0026gt;-i\u0026lt;/string\u0026gt; \u0026lt;string\u0026gt;/Users/\u0026lt;user\u0026gt;/.ssh/id_rsa\u0026lt;/string\u0026gt; \u0026lt;/array\u0026gt; Управление launchd launchctl load ~/Library/LaunchAgents/com.openclaw.sshtunnel.plist launchctl start com.openclaw.sshtunnel launchctl stop com.openclaw.sshtunnel Проверка # На VPS ss -tlnp | grep -E \u0026#39;808[0-3]\u0026#39; # Снаружи curl -I https://claw.a2v.space curl -I https://code.a2v.space curl -I https://sand.a2v.space ","section":"guides","tags":["vps","nginx","ssh","reverse-proxy","devops"],"title":"Настройка VPS как реверс-прокси","url":"/guides/vps-reverse-proxy/"},{"content":"Архитектура 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\nNS-серверы: ns1.hosting.reg.ru, ns2.hosting.reg.ru\n2. Mac Studio — OpenClaw Порт: 18789 Конфиг: ~/.openclaw/openclaw.json 3. SSH-туннель (launchd) Plist: ~/Library/LaunchAgents/com.openclaw.sshtunnel.plist\nКлючевой флаг: -R 8080:localhost:18789\n4. VPS — 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-сертификат certbot certonly --nginx -d claw.a2v.space 6. OpenClaw config { \u0026#34;allowedOrigins\u0026#34;: [\u0026#34;https://claw.a2v.space\u0026#34;], \u0026#34;trustedProxies\u0026#34;: [\u0026#34;127.0.0.1\u0026#34;] } ","section":"guides","tags":["openclaw","ssh","nginx","vps","reverse-proxy"],"title":"Подключение claw.a2v.space (OpenClaw)","url":"/guides/claw-a2v-space/"},{"content":"Архитектура 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 конфиг 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 \u0026#34;upgrade\u0026#34;; } } SSL-сертификат certbot certonly --nginx -d code.a2v.space ","section":"guides","tags":["opencode","ssh","nginx","vps","reverse-proxy"],"title":"Подключение code.a2v.space (OpenCode)","url":"/guides/code-a2v-space/"},{"content":"Архитектура 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/\nnginx конфиг 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:\nContainer: app-leadera-db Port: 5432 SSL-сертификат certbot certonly --nginx -d sand.a2v.space ","section":"guides","tags":["angular","go","docker","nginx","vps","reverse-proxy"],"title":"Подключение sand.a2v.space (Leadera Project)","url":"/guides/sand-a2v-space/"},{"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/"}]