infra/STRUCTURE.md

ИНФРАСТРУКТУРА - СТРУКТУРА И СТАНДАРТЫ

Дата создания: 2025-11-17
Версия: 1.2.0
Обновлено: 2025-11-30
Статус: ✅ Активный стандарт

См. также: DATA-FLOW.md — Потоки данных между инфраструктурами


📋 ОБЗОР

В workspace $WORKSPACE/ инфраструктурные проекты вынесены в отдельную папку infra/ и отделены от прикладных проектов projects/.

Всего инфраструктурных проектов: 8


🗂️ СТРУКТУРА

$WORKSPACE/
├── pirotehnika/                 БИЗНЕС: Пиротехника
├── lider/                       БИЗНЕС: Лидер Авто
├── seller1/                     БИЗНЕС: Seller1

├── infra/                       ВСЯ инфраструктура
   ├── @infra-dev-pro/          VPS EU (Control Plane)
   ├── @infra-dev-prod-rf/      VPS RU (Production + Dev)
   ├── @infra-home-pc/          Home PC (рабочая станция)
   ├── @remote-beget-kondurov/  Beget Shared Hosting
   ├── infra-s3-beget/          Beget S3 Hub (центральное хранилище)
   └── infra-yandex-disk/       Яндекс.Диск Storage

├── system/                      AI агенты
├── architect/                   Методология и стандарты
└── archive/                     Архив

S3 Hub структура: см. DATA-FLOW.md


📊 ТИПЫ ИНФРАСТРУКТУРЫ

1. VPS Servers (2 проекта)

Физические/виртуальные серверы:
- @infra-dev-pro - EU Development Server (Control Plane)
- @infra-dev-prod-rf - RU Production + Development Server

Характеристики:
- Тип: vps
- SSH доступ: ✅
- Docker: ✅
- Критичность: HIGH
- Управление: systemd, docker-compose

2. Shared Hosting (1 проект)

Хостинг с ограничениями:
- @remote-beget-kondurov - Beget Shared Hosting

Характеристики:
- Тип: shared-hosting
- SSH доступ: ✅ (ограниченный)
- Проектов: 5
- Критичность: MEDIUM
- Управление: SSH + Web Panel

3. Web Panels (1 проект)

Веб-интерфейсы управления:
- @web-beget-panel - Beget Control Panel

Характеристики:
- Тип: web-panel
- API: ❌ (только Web UI)
- Автоматизация: ❌
- Управление: Ручное через браузер

4. External Services (1 проект)

Внешние API сервисы:
- @service-stripe-example - Stripe Payment API

Характеристики:
- Тип: external-service
- API: ✅ REST
- SDK: Python, JS, PHP, Ruby, Go, Java
- Назначение: Пример интеграции

5. Cloud Storage (2 проекта)

Облачные хранилища:
- infra-yandex-disk - Яндекс.Диск через rclone
- infra-s3-beget - Beget S3 Storage

Характеристики:
- Тип: cloud-storage
- Доступ: rclone mount
- Назначение: Бэкапы, обмен файлами
- Работает как: Локальная папка (FUSE)

6. Network Share (1 проект)

Сетевые папки:
- infra-file-exchange - SSH/SSHFS File Exchange

Характеристики:
- Тип: network-share
- Протокол: SSH/SSHFS
- Назначение: Обмен файлами через SSH
- Сервер: @infra-dev-pro:/opt/exchange/


📝 СТАНДАРТ INFRA.YAML

Каждый инфраструктурный проект имеет файл INFRA.yaml с полными метаданными.

Обязательные секции

infrastructure:
  name: "Название инфраструктуры"
  type: vps | shared-hosting | web-panel | external-service | cloud-storage | network-share
  provider: "Провайдер"
  purpose: "Назначение"
  created: "YYYY-MM-DD"

access:
  # Различается в зависимости от типа
  # SSH, API, Web UI, etc.

capabilities:
  # Что может делать эта инфраструктура

related_projects:
  # Связи с другими проектами

status:
  state: active | inactive | example
  criticality: low | medium | high

Примеры по типам

VPS Server:

infrastructure:
  type: vps
  hostname: "xirfbwpmvt"
  ip: "91.218.142.168"

access:
  ssh:
    host: "91.218.142.168"
    user: "root"
    key: "/root/.ssh/id_rsa"

Cloud Storage:

infrastructure:
  type: cloud-storage

access:
  method: "rclone mount"
  remote_name: "beget-s3"
  endpoint: "https://s3.ru1.storage.beget.cloud"

🔗 ДВУНАПРАВЛЕННЫЕ ССЫЛКИ

Из INFRA.yaml → Проекты

related_projects:
  hosted_projects:
    - "projects/pirotehnika-opencart"
    - "projects/site1-wordpress"

  used_by:
    - "projects/marketplace"
    - "projects/pim-drupal"

Из PROJECT.yaml → Инфраструктура

infrastructure:
  server: "@remote-beget-kondurov"
  infra_file: ../../INFRA.yaml

📁 СХЕМА ИМЕНОВАНИЯ

Префиксы @ (в инфраструктуре)

@infra- - Собственные серверы/VPS:*
- @infra-dev-pro - Development Production EU
- @infra-dev-prod-rf - Development Production RU

@remote- - Удалённые серверы (не наши):*
- @remote-beget-kondurov - Beget хостинг

@web- - Веб-сервисы без API:*
- @web-beget-panel - Веб-панель управления

@service- - Внешние API сервисы:*
- @service-stripe-example - Stripe API

Без префиксов

infra- - Инфраструктурные утилиты:*
- infra-yandex-disk - Библиотека для Яндекс.Диска
- infra-s3-beget - S3 storage
- infra-file-exchange - SSH обмен файлами


🎯 ПРАВИЛА ИСПОЛЬЗОВАНИЯ

1. Определение типа проекта

Вопрос: Это инфраструктура или приложение?

Инфраструктура → infra/:
- Серверы (VPS, shared hosting)
- Панели управления (web panels)
- Внешние сервисы (Stripe, AWS, etc.)
- Облачные хранилища (S3, Яндекс.Диск)
- Сетевые ресурсы (SSH shares, NFS)

Приложение → projects/:
- Веб-приложения (marketplace, pim-drupal)
- CLI утилиты (nomenclature1c)
- Библиотеки (если не инфраструктурные)

2. Выбор имени

Собственная инфраструктура:

@infra-{назначение}-{локация}
@infra-dev-pro           Development Production EU
@infra-dev-prod-rf       Development Production RU

Удалённая инфраструктура:

@remote-{провайдер}-{аккаунт}
@remote-beget-kondurov   Beget хостинг, аккаунт kondurov

Веб-панели (без API):

@web-{сервис}-{тип}
@web-beget-panel         Beget панель управления

Внешние сервисы (с API):

@service-{название}
@service-stripe-example  Stripe API

Инфраструктурные утилиты:

infra-{назначение}
infra-yandex-disk       ← Библиотека для Яндекс.Диска
infra-s3-beget          ← S3 storage
infra-file-exchange     ← SSH обмен файлами

3. Создание INFRA.yaml

Для нового проекта:

  1. Создать папку в infra/
  2. Создать INFRA.yaml с метаданными
  3. Заполнить все обязательные секции
  4. Добавить связи с другими проектами

Шаблон:

infrastructure:
  name: "..."
  type: vps | shared-hosting | web-panel | external-service | cloud-storage | network-share
  provider: "..."
  purpose: "..."
  created: "YYYY-MM-DD"

access:
  # Специфично для типа

capabilities:
  # Что может делать

related_projects:
  # Связанные проекты

status:
  state: active | inactive | example
  criticality: low | medium | high

4. Связи между проектами

В INFRA.yaml:

related_projects:
  hosted_projects:        # Проекты размещённые на этой инфраструктуре
    - "projects/app1"
    - "projects/app2"

  used_by:               # Проекты использующие эту инфраструктуру
    - "projects/app3"

В PROJECT.yaml:

infrastructure:
  server: "@infra-dev-pro"
  infra_file: ../../INFRA.yaml

📚 ФАЙЛОВАЯ СТРУКТУРА ПРОЕКТА

Каждый инфраструктурный проект следует стандартной структуре:

infra/@example-project/
├── INFRA.yaml               Метаданные инфраструктуры
├── design/
   └── PROJECT.md           Описание проекта
├── infrastructure/
   ├── CONNECTION.md        Данные подключения
   └── SERVER.md            Спецификации сервера
├── management/
   ├── README.md            Операционное управление
   └── TODO.md              Текущие задачи
└── solution/                Опционально (если есть код)
    ├── scripts/
    └── lib/

🔍 НАВИГАЦИЯ

Найти все INFRA.yaml

find $WORKSPACE/infra -name "INFRA.yaml" -type f | sort

Найти инфраструктуру по типу

grep -l "type: vps" $WORKSPACE/infra/*/INFRA.yaml
grep -l "type: cloud-storage" $WORKSPACE/infra/*/INFRA.yaml

Найти проекты использующие инфраструктуру

grep -r "server: \"@infra-dev-pro\"" $WORKSPACE/projects/

📊 СТАТИСТИКА

По типам инфраструктуры

Всего: 8 инфраструктурных проектов

По критичности


🚀 СЛЕДУЮЩИЕ ШАГИ

  1. ✅ Создать INFRA.yaml для всех проектов
  2. ✅ Установить двунаправленные ссылки
  3. ✅ Документировать структуру (этот файл)
  4. ⏳ Применить стандарт к новым проектам
  5. ⏳ Создать валидатор INFRA.yaml
  6. ⏳ Интегрировать в Platform v2

📝 ИСТОРИЯ ИЗМЕНЕНИЙ

2025-11-17


Версия: 1.0.0
Дата: 2025-11-17
Автор: Claude Code
Статус: ✅ Активный стандарт