Files
infra/servers/de1.md

137 lines
10 KiB
Markdown
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.
# 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-репо): `ssh://git@git.ruzzy.dev:2222`.
## DNS
- `ruzzy.dev`, `www.ruzzy.dev`, `git.ruzzy.dev` → 213.136.74.247 (Namecheap).
- `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-хостинг | 2222 (ssh), 127.0.0.1:3000 (web) | `/srv/gitea/{data,config,logs}` |
| **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` | 301→https | веб gitea |
| **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.
- Туннель: **de1 = 10.8.1.0**; RU-сервер подключается как **10.8.1.4/32**.
## 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`.
## Проекты пользователя (`/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`. Избыточно, но не вредит. При переносе достаточно одного механизма.