infra/docs/infrastructure-plan.md
jack 9e4ac718d9
All checks were successful
CI/CD / syntax-check (push) Successful in 2m38s
CI/CD / deploy (push) Successful in 9m44s
docs: add infrastructure plan and Claude agent guide
- infrastructure-plan.md: server resource analysis (1 vCPU / 2GB RAM
  critically overloaded), two-server architecture recommendation
- claude-agent.md: how to run Claude Code as an autonomous infra agent
  via Anthropic API + Telegram bot interface

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 02:19:38 +07:00

127 lines
6.3 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.

# Infrastructure Plan
## Текущее состояние сервера (март 2026)
### Сервер: 87.249.49.32 (VPS-1, основной)
| Ресурс | Состояние | Оценка |
|--------|-----------|--------|
| CPU | 1 vCPU, load avg 1.63 | 🔴 Критично |
| RAM | 1.9 ГБ, свободно 99 МБ | 🔴 Критично |
| Swap | Отсутствует | 🔴 Опасно |
| Disk | 29 ГБ, 45% занято | 🟢 Норм |
**Вывод:** сервер работает на пределе. Любой пик нагрузки (деплой через CI/CD, обращение к Plane, тяжёлый запрос) приводит к конкуренции за RAM без возможности свопирования — процессы убиваются OOM killer'ом.
### Крупнейшие потребители RAM
| Контейнер | RAM |
|-----------|-----|
| plane-minio | 244 МБ |
| plane-api | 198 МБ |
| plane-worker | 178 МБ |
| plane-beat | 150 МБ |
| plane-space | 111 МБ |
| forgejo | 140 МБ |
| plane-db | 40 МБ |
| forgejo-db | 41 МБ |
---
## Немедленные действия (без смены тарифа)
### 1. Добавить swap (делается за 2 минуты)
```bash
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
```
Это не решит проблему, но защитит от внезапных OOM kills.
### 2. Ограничить mem_limit у Plane-сервисов
- `plane-worker` и `plane-beat` сейчас без лимита, жрут ~150-180 МБ каждый
- Поставить `mem_limit: 256m` на каждый
---
## Архитектура: два сервера
### Рекомендуемая схема
```
┌─────────────────────────────────┐
Internet ──────────────── │ VPS-1 (основной, 87.249.49.32) │
│ │
│ Traefik (80/443) │
│ ├── Forgejo (git.csrx.ru) │
│ ├── Vaultwarden (vault.) │
│ ├── Plane (plane.) │
│ ├── Syncthing (sync.) │
│ └── Forgejo Runner │
└─────────────────────────────────┘
Ansible SSH
┌─────────────────────────────────┐
│ VPS-2 (мониторинг + тулзы) │
│ │
│ Traefik (80/443) │
│ ├── Grafana (dashboard.) │
│ ├── Prometheus (internal) │
│ ├── cAdvisor (internal) │
│ ├── Node Exporter × 2 servers │
│ └── Claude Code Agent │
└─────────────────────────────────┘
```
### Почему два сервера?
1. **Изоляция:** мониторинг не ест ресурсы продакшен-сервисов
2. **Мониторинг мониторит продакшен снаружи** — видит проблемы даже при перегрузке VPS-1
3. **Claude Agent** работает на отдельной машине — не мешает пользователям
4. **Цена:** маленький VPS для мониторинга стоит 200-400 руб/мес
### Параметры VPS-2 (мониторинг)
Минимум: **2 vCPU, 2 ГБ RAM, 20 ГБ SSD** — этого хватит для Grafana+Prometheus+Claude Agent.
### Параметры для апгрейда VPS-1 (опционально)
Текущий тариф явно перегружен. Рекомендую апгрейд до **2 vCPU, 4 ГБ RAM** — это закроет проблему RAM и CPU.
---
## Провайдеры
Текущий сервер на **Timeweb Cloud** (судя по IP-диапазону и ключу `timeweb` в ~/.ssh/).
**Варианты для VPS-2:**
- **Timeweb Cloud** — тот же провайдер, можно управлять из одного кабинета, хороший пинг между серверами (оба в одном датацентре)
- **Hetzner** — дешевле, но выше пинг из России
- **Selectel / Beeline Cloud** — российские, быстро
**Рекомендация:** VPS-2 тоже на Timeweb Cloud — серверы в одной сети, внутренний трафик между ними бесплатный или очень дешёвый.
---
## Что деплоить на VPS-2 через Ansible
Добавить VPS-2 в `inventory/hosts.ini` как отдельный хост `monitoring`. Создать роль `monitoring` с:
- Prometheus + Node Exporter (scrape обоих серверов)
- Grafana с дашбордами
- cAdvisor (мониторит контейнеры VPS-2)
- Remote scrape Node Exporter на VPS-1 (добавить Node Exporter на VPS-1 без публичного доступа, через Prometheus federation или прямой scrape по внутреннему IP)
---
## Таймлайн
| Приоритет | Действие | Время |
|-----------|----------|-------|
| 🔴 Сейчас | Добавить swap на VPS-1 | 5 мин |
| 🟡 Эта неделя | Купить VPS-2, задеплоить мониторинг | 1-2 ч |
| 🟡 Эта неделя | Апгрейд VPS-1 до 4 ГБ RAM | 10 мин (перезагрузка) |
| 🟢 Позже | Claude Agent на VPS-2 | см. claude-agent.md |