Files
infra/servers/de1.md

143 lines
12 KiB
Markdown
Raw Permalink 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.
# 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`. Избыточно, но не вредит. При переносе достаточно одного механизма.