docs: инфраструктура VM Сервисы + архитектура pulse-api и pulse-web

This commit is contained in:
Cosmo
2026-04-02 10:43:44 +00:00
parent d4f3a10d0d
commit 20e1f3fa6c
31 changed files with 1843 additions and 0 deletions

View File

@@ -0,0 +1,112 @@
# Сервисы VM 192.168.31.60
Все Docker-сервисы развёрнуты в `/opt/digital-home/` на VM Сервисы.
Общая сеть: `services_proxy` (создана в `services/docker-compose.yml`).
Внешний трафик: Nginx Proxy Manager → домены `*.digital-home.site`.
## Сводная таблица
| Сервис | Папка | Домен | Порты (внешние) | Статус |
|--------|-------|-------|-----------------|--------|
| Nginx Proxy Manager | services/ | — (точка входа) | 80, 81, 443 | ✅ Up |
| Gitea | gitea/ | git.digital-home.site | — (NPM) | ✅ Up |
| Gitea Runner | gitea-runner/ | — | — | ✅ Up |
| Homepage | homepage/ | home.digital-home.site | — (NPM) | ✅ Up |
| Jellyfin | media/ | — | — (NPM) | ✅ Up |
| qBittorrent | media/ | — | 6881 | ❌ Stopped |
| Nextcloud | nextcloud/ | cloud.digital-home.site | 5433 (db) | ✅ Up |
| Immich | photo/ | — | — (NPM) | ✅ Up |
| Portainer | portainer/ | portainer.digital-home.site | — (NPM) | ✅ Up |
| Uptime Kuma | uptime-kuma/ | — | — (NPM) | ✅ Up |
| Vaultwarden | vault/ | vault.digital-home.site | — (NPM) | ✅ Up |
| Vikunja | vikunja/ | tasks.digital-home.site | — (NPM) | ✅ Up |
| Menu Bot | bots/menu/ | — | — | ❓ Unknown |
| Review Bot | review-bot/ | — | 3300 | ✅ Up |
| Cosmo Studio | cosmo-studio/ | — | — (NPM) | ✅ Up |
| Pulse API | homelab-api/ | api.digital-home.site | 8081 (dev) | ✅ Up |
| Pulse Web | pulse-web/ | pulse.digital-home.site | 5174 (dev) | ✅ Up |
| Storybook | storybook/ | — | 6006 | ✅ Up |
| Health Webhook | health-webhook/ | health.digital-home.site | 3200 | ✅ Up |
| IT Tools | it-tools/ | — | — (NPM) | ✅ Up |
| Savings | savings/ | — | — (NPM) | ❌ Stopped |
| AdventureLog | adventurelog/ | — | — | ❌ Stopped |
| LangLearn | langlearn/ | — | — | ❌ Stopped |
| Lingua Learn | lingua-learn/ | — | — | ❌ Stopped |
| My Game (Своя Игра) | my-game/ | — | — | ❌ Stopped |
| Japan App | japan-app/ | — | — | ❌ Stopped |
| VPN Invite | vpn-invite/ | — | 3500 | ✅ Up |
| VPN Router | vpn-router/ | — | host network | ❌ Stopped |
| Webhook Deploy | webhook-deploy/ | — | 9000 | ❓ Unknown |
## Запущенные сервисы (docker ps)
Статус на момент документирования (02.04.2026):
```
homelab-api Up 19 hours
vpn-invite Up 21 hours
cosmo-studio (x2) Up 3 days
uptime-kuma Up 5 days (healthy)
jellyfin Up 6 days (healthy)
gitea-runner Up 6 days
review-bot Up 6 days
health-webhook Up 7 days
pulse-web Up 12 days
pulse-web-dev Up 4 weeks
pulse-api-dev Up 4 weeks
storybook Up 4 weeks
nginx_proxy_manager Up 26 hours
homelab-db Up 4 weeks (healthy)
it-tools Up 4 weeks
homepage Up 4 weeks (healthy)
immich_server Up 4 weeks (healthy)
immich_redis Up 4 weeks
immich_postgres Up 4 weeks
immich_ml Up 4 weeks (healthy)
vikunja Up 4 weeks
vikunja_db Up 4 weeks
vaultwarden Up 4 weeks (healthy)
portainer Up 4 weeks
nextcloud_app Up 4 weeks
nextcloud_db Up 4 weeks
nextcloud_redis Up 4 weeks
gitea Up 4 weeks
```
## Архитектура сети
```
Интернет
Nginx Proxy Manager (80/443)
↓ (services_proxy network)
┌───────────────────────────────┐
Все сервисы в одной сети │
│ services_proxy │
│ │
│ git.* → gitea:3000 │
│ home.* → homepage:3000 │
│ cloud.* → nextcloud_app:80 │
│ vault.* → vaultwarden:80 │
│ tasks.* → vikunja:3456 │
│ portainer.* → portainer:9000 │
│ api.* → homelab-api:8080 │
│ pulse.* → pulse-web:80 │
│ health.* → health-webhook:3200│
└───────────────────────────────┘
```
## Паттерн добавления сервиса
```bash
mkdir /opt/digital-home/<name>
cd /opt/digital-home/<name>
# docker-compose.yml с сетью:
networks:
services_proxy:
external: true
docker compose up -d
# Добавить proxy host в NPM UI (порт 81)
```

View File

@@ -0,0 +1,38 @@
# AdventureLog
## Назначение
Приложение для логирования путешествий и приключений. Ведение дневника поездок с геолокацией.
## Контейнеры
| Имя | Образ |
|-----|-------|
| adventurelog-frontend | ghcr.io/seanmorley15/adventurelog-frontend:latest |
| adventurelog-backend | ghcr.io/seanmorley15/adventurelog-backend:latest |
| adventurelog-db | postgis/postgis:16-3.5 |
## Порты
Нет внешних портов (через NPM).
## Volumes
| Volume | Контейнер | Путь контейнера | Содержимое |
|--------|-----------|----------------|------------|
| postgres_data | adventurelog-db | /var/lib/postgresql/data | БД PostGIS |
| adventurelog_media | adventurelog-backend | /code/media/ | Медиа-файлы |
## Домен
Через NPM (не указан явно).
## Сети
- `services_proxy` (external)
- `default` (internal между frontend и backend)
## Env переменные
Из `env_file: .env` (ключи неизвестны).
## Статус
**Не запущен** (не найден в `docker ps`)
## Заметки
- Использует PostGIS (PostgreSQL с геопространственными расширениями)

View File

@@ -0,0 +1,42 @@
# Menu Bot (bots/menu)
## Назначение
Telegram-бот для отображения меню / навигации. Написан на Go.
## Контейнеры
| Имя | Образ |
|-----|-------|
| menu-bot | local build (Go) |
## Порты
Нет внешних портов.
## Volumes
| Путь хоста | Путь контейнера | Содержимое |
|-----------|----------------|------------|
| ./data | /root/data | Данные бота |
## Домен
Нет.
## Сети
Нет явной сети (использует `env_file: .env`).
## Env переменные
Из `.env` файла (ключи неизвестны — файл не читался).
## Статус
**Статус неизвестен** (не найден в `docker ps`)
## Структура проекта
```
bots/menu/
├── cmd/ # Точка входа
├── internal/ # Логика бота
├── data/ # Данные
├── Dockerfile
├── docker-compose.yml
└── go.mod
```

View File

@@ -0,0 +1,36 @@
# Cosmo Studio
## Назначение
Web-интерфейс для OpenClaw AI-ассистента (Cosmo). Bridge-сервис соединяется с OpenClaw instance, frontend предоставляет UI для взаимодействия.
## Контейнеры
| Имя | Образ |
|-----|-------|
| cosmo-studio-bridge-1 | local build (Dockerfile) |
| cosmo-studio-frontend-1 | local build (Dockerfile.frontend) |
## Порты
| Контейнер | Внутренний | Назначение |
|-----------|-----------|------------|
| bridge | 3401-3402 | WebSocket bridge |
| frontend | 80 | Web UI |
## Volumes
Нет persistent volumes (конфиг через env).
## Домен
Через NPM (не указан явно).
## Сети
- `services_proxy` (external)
- `internal` (bridge между bridge и frontend)
## Env переменные
- `OPENCLAW_URL` (ws://192.168.31.103:18789)
- `OPENCLAW_TOKEN`
- `SSH_KEY_PATH`
## Статус
**Запущен** (Up 3 days)

View File

@@ -0,0 +1,40 @@
# Gitea Actions Runner
## Назначение
CI/CD runner для выполнения Gitea Actions workflows. Запускает задачи сборки, тестирования и деплоя при push/PR в Gitea.
## Контейнеры
| Имя | Образ |
|-----|-------|
| gitea-runner | gitea-runner-runner (local build) |
## Порты
Нет внешних портов.
## Volumes
| Путь хоста | Путь контейнера | Содержимое |
|-----------|----------------|------------|
| /var/run/docker.sock | /var/run/docker.sock | Docker socket (для запуска контейнеров) |
| runner_data | /data | Данные runner'а |
| ./config.yaml | /config/config.yaml | Конфиг runner'а |
## Домен
Нет.
## Сети
- `services_proxy` (external)
## Env переменные
- `GITEA_INSTANCE_URL`
- `GITEA_RUNNER_REGISTRATION_TOKEN`
- `GITEA_RUNNER_NAME`
- `CONFIG_FILE`
## Статус
**Запущен** (Up 6 days)
## Заметки
- `privileged: true` — нужно для запуска вложенных Docker-контейнеров в workflows
- Подключается к Gitea по `http://gitea:3000`

View File

@@ -0,0 +1,47 @@
# Gitea
## Назначение
Self-hosted Git-хостинг. Хранит репозитории проектов (pulse-api, pulse-web, obsidian и другие). Поддерживает Gitea Actions для CI/CD.
## Контейнеры
| Имя | Образ |
|-----|-------|
| gitea | gitea/gitea:latest |
## Порты
| Внутренний | Протокол | Назначение |
|-----------|---------|------------|
| 3000 | HTTP | Web UI + API |
| 22 | TCP | SSH для git |
(Порты открыты только в сети, внешний доступ через NPM)
## Volumes
| Путь хоста | Путь контейнера | Содержимое |
|-----------|----------------|------------|
| ./data | /data | Репозитории, конфиги, БД (SQLite) |
| /etc/timezone | /etc/timezone | Временная зона (ro) |
| /etc/localtime | /etc/localtime | Локальное время (ro) |
## Домен
`https://git.digital-home.site`
## Сети
- `gitea_backend` (internal)
- `services_proxy` (external, для NPM)
## Env переменные
- `USER_UID`
- `USER_GID`
- `GITEA__server__DOMAIN`
- `GITEA__server__ROOT_URL`
## Статус
**Запущен** (Up 4 weeks)
## Связанные сервисы
- `gitea-runner` — CI/CD runner для Gitea Actions
- `review-bot` — AI ревью PR через webhook

View File

@@ -0,0 +1,37 @@
# Health Webhook
## Назначение
Webhook-сервис для проверки здоровья / health check инфраструктуры. Node.js сервис с JWT-авторизацией, возможно интеграция с email-уведомлениями через Resend.
## Контейнеры
| Имя | Образ |
|-----|-------|
| health-webhook | local build (Node.js) |
## Порты
| Внешний | Внутренний | Назначение |
|---------|-----------|------------|
| 3200 | 3200 | HTTP API |
## Volumes
| Путь хоста | Путь контейнера | Содержимое |
|-----------|----------------|------------|
| ./data | /app/data | Данные сервиса |
## Домен
`https://health.digital-home.site`
## Сети
- `services_proxy` (external)
## Env переменные
- `JWT_SECRET`
- `NODE_ENV`
- `RESEND_API_KEY`
- `APP_URL`
## Статус
**Запущен** (Up 7 days)

View File

@@ -0,0 +1,40 @@
# Homepage
## Назначение
Стартовая страница / дашборд домашней лаборатории. Показывает все сервисы, их статусы, виджеты (погода, календарь и т.д.).
## Контейнеры
| Имя | Образ |
|-----|-------|
| homepage | ghcr.io/gethomepage/homepage:latest |
## Порты
| Внутренний | Назначение |
|-----------|------------|
| 3000 | Web UI |
## Volumes
| Путь хоста | Путь контейнера | Содержимое |
|-----------|----------------|------------|
| ./config | /app/config | YAML-конфиги (services, widgets, bookmarks) |
| ./icons | /app/public/icons | Пользовательские иконки |
| /var/run/docker.sock | /var/run/docker.sock | Docker socket (для статусов контейнеров, ro) |
## Домен
`https://home.digital-home.site`
## Сети
- `homepage_backend` (internal)
- `services_proxy` (external, для NPM)
## Env переменные
- `PUID`
- `PGID`
- `TZ`
- `HOMEPAGE_ALLOWED_HOSTS`
## Статус
**Запущен** (Up 4 weeks, healthy)

View File

@@ -0,0 +1,31 @@
# IT Tools
## Назначение
Коллекция онлайн-инструментов для разработчиков: конверторы форматов, генераторы, кодировщики, хэши и т.д.
## Контейнеры
| Имя | Образ |
|-----|-------|
| it-tools | corentinth/it-tools:latest |
## Порты
| Внутренний | Назначение |
|-----------|------------|
| 80 | Web UI (через NPM) |
## Volumes
Нет.
## Домен
Через NPM (не указан явно).
## Сети
- `services_proxy` (external)
## Env переменные
Нет.
## Статус
**Запущен** (Up 4 weeks)

View File

@@ -0,0 +1,31 @@
# Japan App
## Назначение
PWA-гид по Японии. Содержит список мест (92+), расписание поездки, карты.
## Контейнеры
| Имя | Образ |
|-----|-------|
| japan-app | local build |
## Порты
Нет (через NPM).
## Volumes
Нет.
## Домен
Через NPM (не указан явно).
## Сети
- `services_proxy` (external)
## Env переменные
Нет.
## Статус
**Не запущен** (не найден в `docker ps`)
## Заметки
- `watchtower.enable=false` — не обновляется автоматически

View File

@@ -0,0 +1,39 @@
# LangLearn
## Назначение
Приложение для изучения языков. Go backend + React frontend с PostgreSQL.
## Контейнеры
| Имя | Образ |
|-----|-------|
| langlearn-backend | local build (Go) |
| langlearn-frontend | local build (React) |
| langlearn-db | postgres:16-alpine |
## Порты
| Контейнер | Внутренний | Назначение |
|-----------|-----------|------------|
| backend | 8080 | REST API (через NPM) |
| frontend | — | Web UI (через NPM) |
## Volumes
| Volume | Контейнер | Путь контейнера | Содержимое |
|--------|-----------|----------------|------------|
| pgdata | db | /var/lib/postgresql/data | БД |
## Домен
Через NPM (не указан явно).
## Сети
- `services_proxy` (external)
- `internal` (между backend и db)
## Env переменные
- `DATABASE_URL`
- `PORT`
## Статус
**Не запущен** (не найден в `docker ps`)

View File

@@ -0,0 +1,34 @@
# Lingua Learn
## Назначение
Приложение для изучения языков (альтернативная версия). Node.js backend + React frontend.
## Контейнеры
| Имя | Образ |
|-----|-------|
| lingua-learn-client | local build (React) |
| lingua-learn-server | local build (Node.js) |
| lingua-learn-db | postgres:16-alpine |
## Порты
Нет внешних портов (через NPM).
## Volumes
| Volume | Контейнер | Путь контейнера | Содержимое |
|--------|-----------|----------------|------------|
| postgres_data | db | /var/lib/postgresql/data | БД |
## Домен
Через NPM (не указан явно).
## Сети
- `services_proxy` (external)
## Env переменные
- `DATABASE_URL`
- `NODE_ENV`
## Статус
**Не запущен** (не найден в `docker ps`)

View File

@@ -0,0 +1,50 @@
# Media (Jellyfin + qBittorrent)
## Назначение
Медиа-стек: скачивание торрентов (qBittorrent) и стриминг медиа-контента (Jellyfin).
## Контейнеры
| Имя | Образ |
|-----|-------|
| jellyfin | jellyfin/jellyfin:latest |
| qbittorrent | lscr.io/linuxserver/qbittorrent:latest |
## Порты
| Контейнер | Внешний | Внутренний | Назначение |
|-----------|---------|-----------|------------|
| qbittorrent | 6881 | 6881 | BitTorrent TCP |
| qbittorrent | 6881/udp | 6881/udp | BitTorrent UDP |
| jellyfin | — | 8096 | Web UI (через NPM) |
| qbittorrent | — | 8080 | Web UI (через NPM) |
## Volumes
| Путь хоста | Контейнер | Путь контейнера | Содержимое |
|-----------|-----------|----------------|------------|
| ./qbittorrent/config | qbittorrent | /config | Конфиг qBittorrent |
| ./downloads | qbittorrent | /downloads | Загруженные файлы |
| ./jellyfin/config | jellyfin | /config | Конфиг Jellyfin |
| ./jellyfin/cache | jellyfin | /cache | Кэш Jellyfin |
| ./downloads | jellyfin | /data/downloads | Медиа-файлы (ro) |
| ../nextcloud/nextcloud_data/data | jellyfin | /data/nextcloud | Файлы Nextcloud (ro) |
## Домен
Через NPM (не указан явно в конфиге).
## Сети
- `media_backend` (internal)
- `services_proxy` (external)
## Env переменные
- `PUID`, `PGID`, `TZ` (оба контейнера)
- `WEBUI_PORT` (qbittorrent)
## Статус
- ✅ jellyfin: **Запущен** (Up 6 days, healthy)
- ❌ qbittorrent: **Не запущен**
## Заметки
- Jellyfin имеет доступ к файлам Nextcloud через bind mount
- Закомментированная секция GPU-транскодинга для Intel

View File

@@ -0,0 +1,41 @@
# My Game (Своя игра)
## Назначение
Веб-версия игры "Своя Игра" (аналог Jeopardy). Node.js/Express backend + React frontend + MongoDB.
## Контейнеры
| Имя | Образ |
|-----|-------|
| svoya-igra-client | local build (React) |
| svoya-igra-server | local build (Node.js) |
| svoya-igra-mongodb | mongo:7 |
## Порты
| Контейнер | Внутренний | Назначение |
|-----------|-----------|------------|
| server | 3001 | REST API (через NPM) |
## Volumes
| Volume | Контейнер | Путь контейнера | Содержимое |
|--------|-----------|----------------|------------|
| mongodb_data | mongodb | /data/db | MongoDB данные |
| ./server/public | server | /app/public | Статичные файлы |
## Домен
Через NPM (не указан явно).
## Сети
- `services_proxy` (external)
- `internal` (между server и mongodb)
## Env переменные
- `PORT`
- `MONGODB_URI`
- `NODE_ENV`
- `CLIENT_URL`
## Статус
**Не запущен** (не найден в `docker ps`)

View File

@@ -0,0 +1,49 @@
# Nextcloud
## Назначение
Облачное хранилище файлов (self-hosted аналог Google Drive). Синхронизация файлов, фото, документов.
## Контейнеры
| Имя | Образ |
|-----|-------|
| nextcloud_app | nextcloud:latest |
| nextcloud_db | postgres:15-alpine |
| nextcloud_redis | redis:7-alpine |
## Порты
| Контейнер | Внешний | Внутренний | Назначение |
|-----------|---------|-----------|------------|
| nextcloud_db | 5433 | 5432 | PostgreSQL (для прямого доступа) |
| nextcloud_app | — | 80 | Web UI (через NPM) |
## Volumes
| Путь хоста | Контейнер | Путь контейнера | Содержимое |
|-----------|-----------|----------------|------------|
| ./db_data | nextcloud_db | /var/lib/postgresql/data | БД PostgreSQL |
| ./redis_data | nextcloud_redis | /data | Redis данные |
| ./nextcloud_data | nextcloud_app | /var/www/html | Файлы Nextcloud, данные пользователей |
## Домен
`https://cloud.digital-home.site`
## Сети
- `nextcloud_backend` (internal)
- `services_proxy` (external)
## Env переменные
- `POSTGRES_HOST`, `POSTGRES_DB`, `POSTGRES_USER`, `POSTGRES_PASSWORD`
- `NEXTCLOUD_ADMIN_USER`, `NEXTCLOUD_ADMIN_PASSWORD`
- `OVERWRITEPROTOCOL`, `OVERWRITEHOST`
- `NEXTCLOUD_TRUSTED_PROXIES`, `TRUSTED_DOMAINS`
- `REDIS_HOST`
- `PHP_UPLOAD_LIMIT`, `PHP_MEMORY_LIMIT`
## Статус
**Все контейнеры запущены** (Up 4 weeks)
## Заметки
- Файлы Nextcloud монтируются в Jellyfin и Immich для просмотра медиа
- Лимит загрузки файлов: 2048 МБ

View File

@@ -0,0 +1,50 @@
# Immich (photo)
## Назначение
Self-hosted Google Photos альтернатива. Автозагрузка фото с телефона, ML-распознавание лиц и объектов, умный поиск.
## Контейнеры
| Имя | Образ |
|-----|-------|
| immich_server | ghcr.io/immich-app/immich-server:release |
| immich_machine_learning | ghcr.io/immich-app/immich-machine-learning:release |
| immich_redis | redis:7-alpine |
| immich_postgres | tensorchord/pgvecto-rs:pg14-v0.2.0 |
## Порты
| Контейнер | Внутренний | Назначение |
|-----------|-----------|------------|
| immich_server | 2283 | Web UI (через NPM) |
| immich_redis | 6379 | Redis |
| immich_postgres | 5432 | PostgreSQL + pgvecto-rs |
## Volumes
| Путь хоста | Контейнер | Путь контейнера | Содержимое |
|-----------|-----------|----------------|------------|
| ./upload | immich_server | /usr/src/app/upload | Загруженные фото |
| ./model-cache | immich_ml | /cache | ML-модели |
| ./pgdata | immich_postgres | /var/lib/postgresql/data | БД |
| ../nextcloud/nextcloud_data/data | immich_server | /mnt/nextcloud | Файлы Nextcloud (ro) |
| /etc/localtime | immich_server | /etc/localtime | Время (ro) |
## Домен
Через NPM (не указан явно).
## Сети
- `photo_backend` (internal)
- `services_proxy` (external, только immich_server)
## Env переменные
- `DB_HOSTNAME`, `DB_USERNAME`, `DB_PASSWORD`, `DB_DATABASE_NAME`
- `REDIS_HOSTNAME`
- `POSTGRES_PASSWORD`, `POSTGRES_USER`, `POSTGRES_DB`
## Статус
**Все контейнеры запущены** (Up 4 weeks, immich_server healthy)
## Заметки
- Использует `pgvecto-rs` — PostgreSQL с расширением для векторного поиска (нужно для ML)
- immich_machine_learning работает только во внутренней сети

View File

@@ -0,0 +1,38 @@
# Portainer
## Назначение
Web UI для управления Docker. Просмотр контейнеров, образов, volumes, сетей. Визуальный мониторинг всей Docker-инфраструктуры.
## Контейнеры
| Имя | Образ |
|-----|-------|
| portainer | portainer/portainer-ce:latest |
## Порты
| Внутренний | Назначение |
|-----------|------------|
| 8000 | Edge agent |
| 9000 | HTTP Web UI |
| 9443 | HTTPS Web UI |
## Volumes
| Путь хоста | Путь контейнера | Содержимое |
|-----------|----------------|------------|
| /var/run/docker.sock | /var/run/docker.sock | Docker socket |
| ./data | /data | Данные Portainer (пользователи, настройки) |
## Домен
`https://portainer.digital-home.site`
## Сети
- `portainer_backend` (internal)
- `services_proxy` (external)
## Env переменные
Нет (кроме `security_opt: no-new-privileges:true`).
## Статус
**Запущен** (Up 4 weeks)

View File

@@ -0,0 +1,49 @@
# Pulse API (homelab-api)
## Назначение
Backend API для приложения Pulse — трекер привычек, задач, финансов, накоплений. Go REST API + Telegram бот.
## Контейнеры
| Имя | Образ |
|-----|-------|
| homelab-api | local build (Go) |
| homelab-db | postgres:16-alpine |
| pulse-api-dev | local build (dev instance, порт 8081) |
## Порты
| Контейнер | Внешний | Внутренний | Назначение |
|-----------|---------|-----------|------------|
| homelab-api | — | 8080 | REST API (через NPM → api.digital-home.site) |
| pulse-api-dev | 8081 | 8080 | Dev-инстанс API |
| homelab-db | — | 5432 | PostgreSQL |
## Volumes
| Volume | Путь контейнера | Содержимое |
|--------|----------------|------------|
| postgres_data | /var/lib/postgresql/data | БД |
## Домен
`https://api.digital-home.site`
## Сети
- `services_proxy` (external)
- `internal` (между api и db)
## Env переменные
- `DATABASE_URL`
- `JWT_SECRET`
- `PORT`
- `RESEND_API_KEY`
- `FROM_EMAIL`
- `FROM_NAME`
- `APP_URL`
- `TELEGRAM_BOT_TOKEN`
## Статус
**Запущен** (homelab-api: Up 19 hours, homelab-db: Up 4 weeks, pulse-api-dev: Up 4 weeks)
## Подробная документация
→ [[pulse-api]]

View File

@@ -0,0 +1,36 @@
# Pulse Web
## Назначение
Frontend React-приложение для Pulse. Трекер привычек, задач, финансов, накоплений.
## Контейнеры
| Имя | Образ |
|-----|-------|
| pulse-web | local build (React/Vite) |
| pulse-web-dev | local build (dev instance, порт 5174) |
## Порты
| Контейнер | Внешний | Внутренний | Назначение |
|-----------|---------|-----------|------------|
| pulse-web | — | 80 | Prod (через NPM → pulse.digital-home.site) |
| pulse-web-dev | 5174 | 80 | Dev-инстанс |
## Volumes
Нет persistent volumes.
## Домен
`https://pulse.digital-home.site`
## Сети
- `services_proxy` (external)
## Env переменные
- `VITE_API_URL`
## Статус
**Запущен** (pulse-web: Up 12 days, pulse-web-dev: Up 4 weeks)
## Подробная документация
→ [[pulse-web]]

View File

@@ -0,0 +1,46 @@
# Review Bot
## Назначение
AI-бот для автоматического code review Pull Request'ов в Gitea. Получает вебхуки от Gitea, клонирует репозиторий, анализирует изменения через Anthropic Claude и оставляет комментарии.
## Контейнеры
| Имя | Образ |
|-----|-------|
| review-bot | local build (Node.js) |
## Порты
| Внешний | Внутренний | Назначение |
|---------|-----------|------------|
| 3300 | 3300 | HTTP webhook endpoint |
## Volumes
| Volume | Путь контейнера | Содержимое |
|--------|----------------|------------|
| review-bot-logs | /var/log/review-bot | Логи ревью |
## Домен
Нет (доступен только изнутри сети).
## Сети
- `services_proxy` (external)
## Env переменные
- `GITEA_URL`
- `GITEA_TOKEN`
- `WEBHOOK_SECRET`
- `ANTHROPIC_URL` (прокси через AI-proxy на 192.168.31.103:3301)
- `PROXY_KEY`
- `LOG_FILE`
- `CLONE_BASE_DIR`
- `PORT`
## Статус
**Запущен** (Up 6 days)
## Заметки
- Использует AI-proxy (`192.168.31.103:3301`) т.к. Anthropic API key работает только с основной машины OpenClaw
- Вебхук настроен для репозиториев pulse-api и pulse-web
- Директория для клонирования: `/tmp/review-bot-clones`

View File

@@ -0,0 +1,52 @@
# Savings (семейные накопления)
## Назначение
Приложение для совместного управления накоплениями. Go backend + React frontend. Поддержка категорий накоплений, участников, регулярных планов, начисления процентов.
## Контейнеры
| Имя | Образ |
|-----|-------|
| savings-backend | local build (Go) |
| savings-frontend | local build (React) |
## Порты
| Контейнер | Внутренний | Назначение |
|-----------|-----------|------------|
| savings-backend | 9090 | REST API (через NPM) |
| savings-frontend | — | Web UI (через NPM) |
## Volumes
| Путь хоста | Контейнер | Путь контейнера | Содержимое |
|-----------|-----------|----------------|------------|
| ./savings.db | backend | /root/savings.db | SQLite БД |
## Домен
Через NPM (не указан явно).
## Сети
- `services_proxy` (external)
## Env переменные
**Backend:**
- `DB_NAME`, `DB_TYPE`
- `JWT_SECRET`, `JWT_EXPIRES_IN`
- `PORT`, `GIN_MODE`
- `FRONTEND_URL`
- `INTEREST_CALCULATION_ENABLED`, `INTEREST_CALCULATION_INTERVAL`
- `SMTP_HOST`, `SMTP_PORT`, `SMTP_USERNAME`, `SMTP_PASSWORD`
- `FROM_EMAIL`, `FROM_NAME`, `EMAIL_ENABLED`
**Frontend (build args):**
- `REACT_APP_API_URL`
- `REACT_APP_APP_NAME`
- `REACT_APP_VERSION`
## Статус
**Не запущен** (не найден в `docker ps`)
## Заметки
- Использует SQLite (не PostgreSQL) — данные в одном файле `savings.db`
- Встроенный расчёт процентов по расписанию

View File

@@ -0,0 +1,41 @@
# Nginx Proxy Manager (services)
## Назначение
Обратный прокси-сервер. Управляет входящим трафиком (HTTP/HTTPS), SSL-сертификатами (Let's Encrypt), маршрутизирует запросы к контейнерам по доменам `*.digital-home.site`.
## Контейнеры
| Имя | Образ |
|-----|-------|
| nginx_proxy_manager | jc21/nginx-proxy-manager:latest |
## Порты
| Внешний | Внутренний | Назначение |
|---------|-----------|------------|
| 80 | 80 | HTTP |
| 81 | 81 | Web UI (управление NPM) |
| 443 | 443 | HTTPS |
## Volumes
| Volume | Путь | Содержимое |
|--------|------|------------|
| ./data | /data | Конфиги прокси-хостов, БД |
| ./letsencrypt | /etc/letsencrypt | SSL-сертификаты Let's Encrypt |
## Домен
Нет (сам является точкой входа). UI доступен напрямую через порт 81.
## Сети
- `services_proxy` (создаётся здесь как `proxy`, используется всеми другими сервисами)
## Env переменные
Нет конфигурационных env-переменных.
## Статус
**Запущен** (Up 26 hours)
## Заметки
- Это корневой сервис инфраструктуры — все остальные подключаются к сети `services_proxy`
- Управление через UI на порту 81 (только из локальной сети)

View File

@@ -0,0 +1,31 @@
# Storybook
## Назначение
Storybook для разработки UI-компонентов pulse-web. Изолированная среда для разработки и документирования React-компонентов.
## Контейнеры
| Имя | Образ |
|-----|-------|
| storybook | local build |
## Порты
| Внешний | Внутренний | Назначение |
|---------|-----------|------------|
| 6006 | 80 | Storybook UI |
## Volumes
Нет.
## Домен
Нет (доступен напрямую по порту 6006).
## Сети
- `services_proxy` (external)
## Env переменные
Нет.
## Статус
**Запущен** (Up 4 weeks)

View File

@@ -0,0 +1,35 @@
# Uptime Kuma
## Назначение
Мониторинг доступности сервисов. Следит за uptime всех хостов и URL, отправляет уведомления при падении.
## Контейнеры
| Имя | Образ |
|-----|-------|
| uptime-kuma | louislam/uptime-kuma:1 |
## Порты
| Внутренний | Назначение |
|-----------|------------|
| 3001 | Web UI (через NPM) |
## Volumes
| Путь хоста | Путь контейнера | Содержимое |
|-----------|----------------|------------|
| ./data | /app/data | БД мониторинга (SQLite), конфиги |
## Домен
Через NPM (не указан явно).
## Сети
- `uptime_backend` (internal)
- `services_proxy` (external)
## Env переменные
Нет.
## Статус
**Запущен** (Up 5 days, healthy)

View File

@@ -0,0 +1,38 @@
# Vaultwarden (vault)
## Назначение
Self-hosted менеджер паролей, совместимый с клиентами Bitwarden. Хранит пароли, заметки, карты в зашифрованном виде.
## Контейнеры
| Имя | Образ |
|-----|-------|
| vaultwarden | vaultwarden/server:latest |
## Порты
| Внутренний | Назначение |
|-----------|------------|
| 80 | Web UI (через NPM) |
## Volumes
| Путь хоста | Путь контейнера | Содержимое |
|-----------|----------------|------------|
| ./data | /data | Зашифрованная БД паролей |
## Домен
`https://vault.digital-home.site`
## Сети
- `vault_backend` (internal)
- `services_proxy` (external)
## Env переменные
- `DOMAIN`
- `LOG_LEVEL`
- `EXTENDED_LOGGING`
- (закомментированы: `SIGNUPS_ALLOWED`, `ADMIN_TOKEN`, SMTP-настройки)
## Статус
**Запущен** (Up 4 weeks, healthy)

View File

@@ -0,0 +1,48 @@
# Vikunja
## Назначение
Self-hosted менеджер задач (аналог Todoist/Trello). Используется для личных задач, проектов, канбан-досок.
## Контейнеры
| Имя | Образ |
|-----|-------|
| vikunja | vikunja/vikunja:latest |
| vikunja_db | postgres:15-alpine |
## Порты
| Контейнер | Внутренний | Назначение |
|-----------|-----------|------------|
| vikunja | 3456 | Web UI (через NPM) |
| vikunja_db | 5432 | PostgreSQL |
## Volumes
| Путь хоста | Контейнер | Путь контейнера | Содержимое |
|-----------|-----------|----------------|------------|
| ./db | vikunja_db | /var/lib/postgresql/data | БД задач |
| ./files | vikunja | /app/vikunja/files | Вложения к задачам |
## Домен
`https://tasks.digital-home.site`
## Сети
- `vikunja_backend` (internal)
- `services_proxy` (external)
## Env переменные
- `VIKUNJA_DATABASE_TYPE`, `VIKUNJA_DATABASE_HOST`, `VIKUNJA_DATABASE_DATABASE`
- `VIKUNJA_DATABASE_USER`, `VIKUNJA_DATABASE_PASSWORD`
- `VIKUNJA_SERVICE_PUBLICURL`
- `VIKUNJA_SERVICE_JWTSECRET`
- `VIKUNJA_SERVICE_ENABLEREGISTRATION`
- `VIKUNJA_SERVICE_ENABLETASKATTACHMENTS`
- `VIKUNJA_SERVICE_TIMEZONE`
## Статус
**Запущен** (Up 4 weeks)
## Заметки
- API токен для автоматизации: `tk_03787e3778789fd5bfaff0542a8dd9390aae0f82`
- Проекты: Inbox(1), Личное(3), Dev(4), Япония(5), Финансы(6)

View File

@@ -0,0 +1,37 @@
# VPN Invite
## Назначение
Сервис для управления приглашениями в VPN. Node.js приложение с SQLite.
## Контейнеры
| Имя | Образ |
|-----|-------|
| vpn-invite-vpn-invite-1 | node:20-alpine |
## Порты
| Внутренний | Назначение |
|-----------|------------|
| 3500 | HTTP API (через NPM) |
## Volumes
| Volume | Путь контейнера | Содержимое |
|--------|----------------|------------|
| vpn-invite-data | /data | SQLite БД инвайтов |
| ./ | /app | Код приложения |
## Домен
Через NPM (не указан явно).
## Сети
- `services_proxy` (external)
## Env переменные
- `ADMIN_KEY`
- `PORT`
- `DB_PATH`
## Статус
**Запущен** (Up 21 hours)

View File

@@ -0,0 +1,35 @@
# VPN Router (sing-box)
## Назначение
VPN-маршрутизатор на базе sing-box. Управляет VPN-трафиком, поддерживает разные протоколы.
## Контейнеры
| Имя | Образ |
|-----|-------|
| vpn-router | ghcr.io/sagernet/sing-box:v1.10.7 |
## Порты
`network_mode: host` — использует все порты хоста напрямую.
## Volumes
| Путь хоста | Путь контейнера | Содержимое |
|-----------|----------------|------------|
| ./config | /etc/sing-box | Конфиг sing-box (config.json) |
## Домен
Нет (работает на уровне сети).
## Сети
`network_mode: host` (нет Docker-сетей).
## Env переменные
Нет.
## Статус
**Не запущен** (не найден в `docker ps`)
## Заметки
- `cap_add: NET_ADMIN` — нужно для управления сетевыми интерфейсами
- Конфиг в `./config/config.json`

View File

@@ -0,0 +1,40 @@
# Webhook Deploy
## Назначение
Python-сервер для автоматического деплоя через вебхуки. Получает HTTP-запрос → запускает Docker Compose команды для обновления сервисов.
## Контейнеры
| Имя | Образ |
|-----|-------|
| deploy-webhook | python:3.12-alpine |
## Порты
| Внешний | Внутренний | Назначение |
|---------|-----------|------------|
| 9000 | 9000 | HTTP webhook endpoint |
## Volumes
| Путь хоста | Путь контейнера | Содержимое |
|-----------|----------------|------------|
| ./server.py | /app/server.py | Python код сервера |
| /var/run/docker.sock | /var/run/docker.sock | Docker socket |
| /opt/digital-home | /opt/digital-home | Все проекты (для деплоя) |
| /usr/bin/docker | /usr/bin/docker | Docker CLI бинарник |
## Домен
Нет (внутренний доступ).
## Сети
- `services_proxy` (external)
## Env переменные
Нет (конфиг в `server.py`).
## Статус
**Статус неизвестен** (не найден в `docker ps`)
## Заметки
- Имеет доступ к Docker socket и всем проектам — может деплоить любой сервис