143 lines
12 KiB
Markdown
143 lines
12 KiB
Markdown
# de1 — `ruzzy.dev` (213.136.74.247)
|
||
|
||
Действующая прод-нода (прокси/VPN + сервисы). С неё переносим на `fr1`/`ru1`.
|
||
Секреты (токены, ключи, MTProxy secret) — только на сервере, не здесь.
|
||
|
||
**Провайдер:** Contabo · физически **France / Lauterbourg** (в README/топологии зовётся «DE»).
|
||
**ОС:** Ubuntu **18.04.5 LTS** (⚠️ EOL) · kernel 4.15.0-144
|
||
**Ресурсы:** 8 vCPU / 29 GB RAM / 786 GB (исп. 176 GB) · swap 2 GB
|
||
**hostname:** `vmi274597` · PTR `zimbra.zottel.net` (устаревший, чужой)
|
||
**Uptime:** ~132 дня
|
||
|
||
---
|
||
|
||
## Доступ
|
||
- `ssh rus@ruzzy.dev` → пользователь `rus` (uid 1000, shell zsh), в группе docker, sudo.
|
||
- Пользователь `validator` (uid 1001, shell `/dev/null`) — сервисный аккаунт, активных процессов нет.
|
||
- ~~gitea (origin infra-репо)~~ — **перенесена на `fr1` 2026-06-21**, теперь `git.ruzzy.dev` → fr1. На `de1` контейнер остановлен (restart=no), данные `/srv/gitea` оставлены для отката.
|
||
|
||
## DNS
|
||
- `ruzzy.dev`, `www.ruzzy.dev` → 213.136.74.247 (Namecheap).
|
||
- ~~`git.ruzzy.dev`~~ → **переключён на `fr1` (161.97.93.252)** 2026-06-21.
|
||
- `www.ruzzy.dev` используется как FakeTLS-маска для MTProxy.
|
||
|
||
---
|
||
|
||
## Docker-сервисы (всё крутится в Docker)
|
||
|
||
| Контейнер | Образ | Роль | Порты | Compose / данные |
|
||
|---|---|---|---|---|
|
||
| **telemt** | telemt:latest | MTProxy (FakeTLS) | host: 8443, API 9091 | `~/gost/` · cfg `~/gost/telemt-config/` |
|
||
| **amnezia-awg** | amnezia-awg | AmneziaWG туннель | 36360/udp · iface `amn0` | — |
|
||
| ~~**gitea**~~ | gitea/gitea | Git-хостинг — **перенесён на fr1 2026-06-21** | — | `/srv/gitea` (оставлен для отката, контейнер остановлен, restart=no) |
|
||
| **postgres** | mdillon/postgis | PostgreSQL+PostGIS | 127.0.0.1:5432 | `~/volumes/postgres` |
|
||
| **openclaw-gateway-1** | openclaw:local | AI-ассистент «Илюха» | 18789-18790 | `~/openclaw/` · `~/.openclaw/` |
|
||
| **openclaw-cli-1** | openclaw:local | CLI-управление openclaw | — | `~/openclaw/` |
|
||
| **openclaw-whisper-1** | faster-whisper-server | STT (Whisper) | 8000 | vol `openclaw_whisper_models` |
|
||
| **claude-channels** | claude-channels | Claude-бот в Telegram | — | `~/claude-channels/` · vol `claude-home`; vault `~/MyVault` |
|
||
| **ipcam-sftp** | atmoz/sftp | Приём видео с IP-камер (SFTP) | 2223→22 | `/srv/ipcam/videos` |
|
||
| **ipcam-ftps** | fauria/vsftpd | Приём видео с IP-камер (FTPS) | 2221, 30000-30010 (pasv) | `/srv/ipcam/videos`, certs `/srv/ftps/certs` |
|
||
| *(2× openclaw-cli-run)* | 702cf30808fc | временные cli-run, **unhealthy** | — | — |
|
||
|
||
## Не в Docker (на хосте, systemd)
|
||
- **nginx 1.24.0** — vhosts (см. секцию ниже). Слушает `:80`, `213.136.74.247:443`, `127.0.0.1:4443`.
|
||
- **openvpn@server.service** — активен. `1194/udp`, подсеть `10.8.0.0/24`. Iptables-правила восстанавливает `iptables-openvpn.service` (+ `netfilter-persistent`). Конфиг `/etc/openvpn/server.conf`.
|
||
- **squid.service** — **активен**, слушает `3128` (в README ошибочно помечен как упавший — фактически работает).
|
||
- **epmd.service** — активен, `4369` (Erlang Port Mapper), но **без beam/erlang-приложения** — рудимент.
|
||
- **supervisor** — **заброшен**: не запущен (сокета нет), конфиги в `/etc/supervisor/conf.d/` пустые. Имена-заглушки (`adv_notifier_back`, `bazaraki_crawler_v3_back`, `btc_spy`, `petuh_bot`, `proxy_source_back`) — наследие, проекты переехали на docker/в `/var/www`.
|
||
- **plexmediaserver.service** — включён, но **failed** (не слушает 32400) — рудимент.
|
||
- **unbound.service** — включён, но **не работает** (лежит — совпадает с README).
|
||
- **systemd-resolved** — `53`.
|
||
- Прочее включённое: rsync (daemon), sysstat (sar), ondemand (cpu governor), wpa_supplicant (рудимент).
|
||
|
||
---
|
||
|
||
## nginx (vhosts)
|
||
nginx 1.24.0 на хосте. `nginx.conf` подключает `conf.d/*.conf` + `sites-enabled/*`.
|
||
Vhost'ы в `sites-available/`, симлинки в `sites-enabled/`. TLS везде Let's Encrypt (certbot, автопродление через cron).
|
||
|
||
| Домен | :443 → backend | :80 | Назначение |
|
||
|---|---|---|---|
|
||
| ~~git.ruzzy.dev~~ | ~~proxy `127.0.0.1:3000`~~ | — | **устарел**: gitea на `de1` остановлена, DNS уехал на fr1. Vhost ещё включён → отдаёт 502 на запросы со старых DNS-кэшей. Можно отключить/редиректить. |
|
||
| **stat.ruzzy.dev** | proxy `127.0.0.1:3001` | 404 | статистика (WS-проксирование, апстрим :3001) |
|
||
| **work.ruzzy.dev** | статика `/var/www/work.ruzzy.dev` | 404 | файлы: `/d/` форс-скачивание, `/v/` стриминг с byte-range |
|
||
| **www.ruzzy.dev** | **`127.0.0.1:4443` ssl** → статика `/var/www/www.ruzzy.dev` | ACME + 301→https | **FakeTLS-маска для telemt** (MTProxy форвардит сюда) |
|
||
| adv.ruzzy.dev | — | — | включён, но файл пустой (no-op) |
|
||
|
||
- `conf.d/default.conf` — дефолтный `localhost:80` (заглушка nginx).
|
||
- `sites-available/default` (213.136.74.247:80 default_server, root `/var/www/html`) — **не включён** (нет симлинка).
|
||
- Бэкапы конфига: `nginx.conf.bak`, `nginx.conf.bak.20260613`.
|
||
|
||
## VPN-топология (AmneziaWG)
|
||
- Контейнер `amnezia-awg`, iface `amn0` = 172.29.172.1/24, порт 36360/udp. AWG server `wg0` 10.8.1.0/24 (server-pubkey `Lumb1o…`), пиры 10.8.1.1/2/3 + ранее 10.8.1.4 (ru1).
|
||
- ⚠️ **ru1 (10.8.1.4) с 2026-06-21 переключён на `fr1`** (зеркало с теми же ключами). Прямые пиры 10.8.1.1/2/3 пока остаются здесь. de1 держим для отката.
|
||
|
||
## MTProxy (telemt)
|
||
- `~/gost/docker-compose.yml`: host-network, read-only, cap_drop ALL + NET_BIND_SERVICE, no-new-privileges.
|
||
- Порт 8443, FakeTLS под `www.ruzzy.dev` (маска → nginx 127.0.0.1:4443). API: `curl http://127.0.0.1:9091/v1/users`.
|
||
- Юзер `ruzzy`. Secret (MD5) и диплинк — в `~/README.md`/конфиге на сервере (НЕ здесь).
|
||
|
||
## OpenClaw — «Илюха» (AI-ассистент в Telegram)
|
||
- Бот `@my_vault_assist_bot`. Gateway-контейнер слушает 18789. Модель: Claude Haiku 4.5 (fallback GPT-5.4).
|
||
- Каталоги: `~/openclaw/` (compose, `.env`, `Dockerfile.custom`), `~/.openclaw/` (config, skills, logs), `~/.openclaw-auth-profile-secrets/`.
|
||
- Vault: `~/MyVault` (Obsidian) → монтируется в контейнер, синкается в gitea каждые 5 мин (`sync.sh`, cron). SSH-ключ `~/.ssh/openclaw_gitea` (deploy key в gitea, alias `gitea-openclaw`).
|
||
- Скилы: myvault, shopping, books, diagrams, meeting-summary, weather, whisper, video-frames (websearch отключён).
|
||
- Возможности: голос (Whisper STT / OpenAI TTS), Mermaid-диаграммы (chromium+mmdc), книги (EPUB/PDF), саммари видео-встреч.
|
||
- API-ключи в `~/openclaw/.env`: ANTHROPIC, OPENAI, TELEGRAM_BOT_TOKEN, BRAVE, TAVILY, OPENCLAW_GATEWAY_TOKEN.
|
||
- Подробно: `~/OPENCLAW.md` на сервере.
|
||
|
||
## Claude-бот (claude-channels)
|
||
- Бот `@iluha_rabobot` (id 8322585909). Личка (allowlist, id 607015) + группа «Бухач» (`-584750268`, requireMention).
|
||
- `~/claude-channels/` (compose, Dockerfile Node22+Bun+Claude Code, `.env`). Volume `claude-channels_claude-home` → `/root`; vault `~/MyVault`.
|
||
- Настройки внутри volume: `.claude/settings.json`, `.claude/channels/telegram/access.json`.
|
||
- Подробно: `~/CLAUDE_BOT.md` на сервере.
|
||
|
||
## Прочее
|
||
- **ipcam** — приём записей с IP-камер по SFTP (2223) и FTPS (2221 + pasv 30000-30010) в `/srv/ipcam/videos`.
|
||
- **postgres/postgis** — БД (localhost), данные `~/volumes/postgres`.
|
||
|
||
## Мониторинг
|
||
- Агент `~/monitoring-agent` (node-exporter `:9100` + cadvisor `:8080`, docker), отдаёт метрики на Prometheus `fr1`.
|
||
- Порты 9100/8080 ограничены только для IP `fr1` (161.97.93.252) через `DOCKER-USER` iptables (сохранено netfilter-persistent).
|
||
- В Grafana `fr1` — instance `de1`. Метрики по публичной сети (план: перецепить на приватный WG-туннель при переносе VPN).
|
||
|
||
## Проекты пользователя (`/var/www`)
|
||
Код проектов лежит здесь (владелец `rus`). ⚠️ Сейчас в `docker ps` их **нет** — то есть эти приложения сейчас остановлены (часть гоняли вручную через `docker compose`).
|
||
|
||
| Проект | Размер | docker-compose | Назначение (по имени) |
|
||
|---|---|---|---|
|
||
| `work.ruzzy.dev` | 4.2 GB | — | статика файлов (отдаётся nginx, см. vhost work) |
|
||
| `files` | 780 MB | — | файлы |
|
||
| `cookie-monster` | 439 MB | — | — |
|
||
| `petuh_bot` | 350 MB | — | Telegram-бот |
|
||
| `proxy_source` | 17 MB | ✅ | бэкенд источников прокси |
|
||
| `bazaraki_crawler_v3` | 11 MB | ✅ | краулер объявлений (bazaraki, Кипр) |
|
||
| `adv_notifier` | 5.7 MB | ✅ | нотификатор объявлений (связан с `adv.ruzzy.dev`) |
|
||
| `btc_spy` | 968 KB | — | мониторинг BTC (блокчейн) |
|
||
| `blog`, `mock`, `embassy_parsers`, `webhook_updater` | — | — | старое/вспомогательное |
|
||
| `www.ruzzy.dev` | 8 KB | — | статика маскировочного сайта (FakeTLS) |
|
||
|
||
(висели застрявшие zsh-процессы `docker compose build` по `bazaraki_crawler_v3` — мусор от прошлых ручных сборок.)
|
||
|
||
## Cron / systemd timers
|
||
|
||
**Crontab пользователя `rus`:**
|
||
```
|
||
0 12 * * * sudo certbot renew --quiet # обновление TLS-сертификатов
|
||
*/5 * * * * ~/openclaw/sync.sh # синк Obsidian vault → gitea
|
||
```
|
||
(root-crontab через `sudo crontab -l` не проверялся — нет sudo-доступа в этой сессии.)
|
||
|
||
**Системный cron (`/etc/cron.d/`):**
|
||
```
|
||
certbot: 0 */12 * * * certbot -q renew # ещё одно автопродление (дубль)
|
||
sync: 52 * * * * sync; echo 3 > /proc/sys/vm/drop_caches # ежечасный сброс page cache (ручной тюнинг)
|
||
sync: 42 23 * * * fstrim /
|
||
sysctl: @reboot sysctl -p
|
||
sysstat / popularity-contest — штатные.
|
||
```
|
||
|
||
**systemd timers (активные):** `snap.certbot.renew.timer` (certbot ещё и через snap!), `apt-daily`, `apt-daily-upgrade`, `fstrim`, `ua-messaging`, `motd-news`, `systemd-tmpfiles-clean`.
|
||
|
||
⚠️ **Автопродление сертификатов настроено тройным способом**: user-cron + `/etc/cron.d/certbot` + `snap.certbot.renew.timer`. Избыточно, но не вредит. При переносе достаточно одного механизма.
|