infra/@dev-pro.server/design/ARCHITECTURE.md

Архитектура @infra-dev-pro

Дата: 2025-11-09
Версия: 1.0


Роль в инфраструктуре

Control Plane — центральный узел управления для всей DevOps инфраструктуры.

┌─────────────────────────────────────────┐
│  DEV-PRO (91.218.142.168)               │
│  Control Plane                          │
│                                         │
│  ┌───────────────────────────────────┐  │
│  │  Claude Code Workspace            │  │
│  │  $WORKSPACE/           │  │
│  └───────────────────────────────────┘  │
│                                         │
│  SSH Key: ~/.ssh/id_ed25519            │
│                                         │
└──────────────┬──────────────────────────┘
               │
               │ SSH (passwordless)
               │
               ▼
┌─────────────────────────────────────────┐
│  DEV-PROD-RF (45.144.177.147)          │
│  Production Platform                    │
│                                         │
│  ┌───────────────────────────────────┐  │
│  │  7 Docker Stacks                  │  │
│  │  34 Containers                    │  │
│  │  seller1.ru 🔴 PRODUCTION         │  │
│  └───────────────────────────────────┘  │
└─────────────────────────────────────────┘

Компоненты системы

1. SSH Infrastructure

Входящие соединения:
- Claude Code → DEV-PRO:22
- Аутентификация: SSH key only

Исходящие соединения:
- DEV-PRO → DEV-PROD-RF:22
- Аутентификация: ~/.ssh/id_ed25519 (passwordless)

2. Claude Code Workspace

Расположение: $WORKSPACE/

Структура:

$WORKSPACE/
├── platform/              # Ядро системы
├── templates/             # Шаблоны проектов
├── projects/
   ├── @infra-dev-pro/   # Этот проект
   ├── @infra-dev-prod-rf/
   └── marketplace/
└── archive/

3. Системные утилиты

Мониторинг:
- htop — ресурсы в реальном времени
- free -h — использование RAM
- df -h — использование диска
- uptime — аптайм сервера

Логирование:
- /var/log/auth.log — SSH логи
- journalctl -f — системные логи

Безопасность:
- fail2ban — защита SSH
- UFW firewall — порт 22 открыт


Безопасность

Firewall (UFW)

Статус: Активен

Правила:
- Port 22 (SSH) — ALLOW

fail2ban

Статус: Running
Назначение: Защита SSH от брутфорса

Проверка:

systemctl status fail2ban
fail2ban-client status sshd

SSH ключи

Расположение: ~/.ssh/

Ключи:
- id_ed25519 — для доступа к DEV-PROD-RF (45.144.177.147)
- id_ed25519.pub — публичный ключ

Настройка:

# Проверка ключа
ls -la ~/.ssh/id_ed25519

# Проверка подключения
ssh root@45.144.177.147 "hostname"

Директории

Системные

/root/                        # Home directory (работа из-под root)
├── .ssh/                     # SSH ключи
   └── id_ed25519           # Ключ для управляемых серверов
└── ...

$WORKSPACE/        # Claude Code workspace
├── platform/
├── templates/
├── projects/
   ├── @infra-dev-pro/      # Этот проект
   └── @infra-dev-prod-rf/  # Управляемый сервер
└── archive/

/var/log/                     # Системные логи
├── auth.log                  # SSH логи
├── dev-pro-backup.log       # Логи backup
└── ...

/var/backups/dev-pro/         # Backup архивы
├── ssh-keys/
├── workspace/
└── configs/

Мониторинг

Ресурсы сервера

# CPU, RAM, процессы
htop

# Память
free -h

# Диск
df -h

# Аптайм
uptime

SSH подключения

# Активные сессии
who

# SSH логи
tail -f /var/log/auth.log

# Неудачные попытки входа
grep "Failed password" /var/log/auth.log

Управляемые серверы

# Проверка подключения к DEV-PROD-RF
ssh root@45.144.177.147 "uptime"

# Docker контейнеры на DEV-PROD-RF
ssh root@45.144.177.147 "docker ps --format 'table {{.Names}}\t{{.Status}}'"

# Проверка seller1.ru
ssh root@45.144.177.147 "curl -I https://seller1.ru"

Backup стратегия

Что бэкапим:

  1. SSH ключи~/.ssh/
  2. Claude workspace$WORKSPACE/
  3. Системные конфиги/etc/ssh/, /etc/ufw/, /etc/fail2ban/

Где хранятся:

Автоматизация:

# Скрипт backup
$WORKSPACE/infra/@infra-dev-pro/solution/scripts/backup.sh

# Cron задача (опционально)
0 2 * * * $WORKSPACE/infra/@infra-dev-pro/solution/scripts/backup.sh

Maintenance

Регулярные задачи:

# Обновление системы
apt update && apt upgrade

# Очистка логов
journalctl --vacuum-time=7d

# Проверка неудачных входов
grep "Failed password" /var/log/auth.log | tail -20

# Проверка fail2ban
fail2ban-client status sshd

ADR (Architecture Decision Records)

[ADR-001] Работа из-под root

Дата: 2025-10-26
Статус: Принято

Контекст:
Control Plane сервер используется исключительно для управления инфраструктурой через Claude Code. Доступ имеет только администратор.

Решение:
Работать из-под root пользователя.

Плюсы:
- Упрощение workflow
- Нет проблем с правами доступа
- Прямой доступ ко всем системным функциям

Минусы:
- Потенциально опасно при ошибке команды
- Не соответствует best practices для multi-user систем

Последствия:
- Требуется повышенная осторожность при выполнении команд
- fail2ban защищает SSH от внешних угроз
- Firewall ограничивает доступ только к SSH


[ADR-002] Docker установлен, но не используется

Дата: 2025-10-26
Статус: Принято

Контекст:
Изначально планировалось использовать Docker на Control Plane. Фактически все контейнеры работают на DEV-PROD-RF.

Решение:
Оставить Docker установленным, но не запускать контейнеры.

Плюсы:
- Готовность к возможному будущему использованию
- Минимальное потребление ресурсов (0 контейнеров)
- Доступность Docker CLI для тестирования

Минусы:
- Занимает место (~500MB)

Последствия:
- Docker установлен, но статус: 0 контейнеров
- Основная нагрузка на DEV-PROD-RF


Дата создания: 2025-11-09
Версия: 1.0