architect/_archive/2025-11-26-cleanup/drupal-shop-template/docs/FULL_SIZE_ANALYSIS.md

Полный анализ размера сайта с контейнерами

Дата: 2025-11-16
Проект: Drupal Shop Template
Вопрос: Сколько места занимает ВЕСЬ сайт включая контейнеры?


📊 Размер ОДНОГО сайта (полный)

Компоненты

📁 КОД (директория web/):              371 MB
   ├─ vendor/                           300 MB (Composer packages)
   ├─ web/core/                          50 MB (Drupal core)
   ├─ web/modules/contrib/              100 MB (модули)
   ├─ web/themes/                        20 MB (темы)
   └─ web/sites/default/files/            1 MB (пусто пока)

🗄️  БАЗА ДАННЫХ (PostgreSQL):           158 MB
   └─ data/postgres/                    158 MB (чистая установка Kickstart)

🐳 DOCKER ОБРАЗЫ:                        897 MB
   ├─ Drupal образ (PHP+Apache)         622 MB
   └─ PostgreSQL образ                  275 MB

📦 КОНТЕЙНЕРЫ (writable layers):        123 MB
   ├─ Drupal контейнер (логи, кэш)      123 MB
   └─ PostgreSQL контейнер                0 MB

💾 БЭКАПЫ:                               48 MB
   └─ backups/*.sql                      48 MB

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ИТОГО ОДИН САЙТ:                       ~1.6 GB
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

📈 Размножение сайтов (БЕЗ оптимизации)

10 сайтов

Каждый сайт:                           1.6 GB
10 сайтов:                        10 × 1.6 = 16 GB ❌

Разбивка:
  Код (web/):           10 × 371 MB = 3.7 GB
  БД:                   10 × 158 MB = 1.6 GB
  Docker images:        10 × 897 MB = 8.9 GB (но shared!)
  Контейнеры:           10 × 123 MB = 1.2 GB
  Бэкапы:               10 × 48 MB  = 480 MB

Проблема: Docker images дублируются, но физически ОБЩИЕ!


✅ Реальный размер с Docker shared images

Docker автоматически переиспользует layers образов!

10 сайтов (с Docker shared images)

Docker images (ОБЩИЕ):                 897 MB  ← Один раз!
Код уникальный:           10 × 371 MB = 3.7 GB
БД:                       10 × 158 MB = 1.6 GB
Контейнеры:               10 × 123 MB = 1.2 GB
Бэкапы:                   10 × 48 MB  = 480 MB
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ИТОГО:                                  7.9 GB
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Уже лучше! Docker сам экономит ~9 GB на образах.


🚀 С ПОЛНОЙ оптимизацией (shared vendor)

Архитектура

/opt/claude-workspace/
├── shared/
│   ├── vendor/                        300 MB  ← ОБЩИЙ
│   ├── drupal-core/                    50 MB  ← ОБЩИЙ
│   └── modules-contrib/               100 MB  ← ОБЩИЙ
│
├── docker-images/                     897 MB  ← Docker shared
│
└── projects/
    ├── site-1/
    │   ├── web/ → symlink shared       70 MB  (уникальное)
    │   ├── data/postgres/             158 MB  (БД)
    │   └── container layer            123 MB
    │
    ├── site-2/
    │   └── ...                        351 MB
    │
    └── site-10/
        └── ...                        351 MB

10 сайтов (полная оптимизация)

Shared ресурсы (ОБЩИЕ):
  ├─ Docker images                     897 MB
  ├─ vendor/                           300 MB
  ├─ core/                              50 MB
  └─ modules/                          100 MB
  ────────────────────────────────────────
  Subtotal shared:                   1.347 GB  ← Один раз!

Уникальное для каждого сайта:
  ├─ web/ (config, custom, files)       70 MB
  ├─ data/postgres/                    158 MB
  ├─ container layer                   123 MB
  └─ backups/                           48 MB
  ────────────────────────────────────────
  Per site:                            399 MB

10 сайтов:
  Shared:                              1.3 GB
  10 × unique:            10 × 399 MB = 3.9 GB
  ────────────────────────────────────────
  ИТОГО:                               5.2 GB ✅
  ────────────────────────────────────────

ЭКОНОМИЯ vs БЕЗ оптимизации:
  16 GB - 5.2 GB = 10.8 GB (67% экономии)

📊 Сравнительная таблица

Количество сайтов БЕЗ оптимизации С Docker shared Полная оптимизация Экономия
1 сайт 1.6 GB 1.6 GB 1.6 GB 0%
5 сайтов 8 GB 5.9 GB 3.3 GB 58%
10 сайтов 16 GB 7.9 GB 5.2 GB 67%
20 сайтов 32 GB 14 GB 9.1 GB 71%
50 сайтов 80 GB 33 GB 21 GB 73%
100 сайтов 160 GB 65 GB 41 GB 74%

Вывод: Чем больше сайтов, тем больше экономия!


🎯 Рекомендации по количеству сайтов

Для 1-3 сайтов

Размер: ~5 GB
Оптимизация: НЕ НУЖНА
Причина: Слишком мало сайтов, усилия не окупятся

Для 5-10 сайтов

Размер БЕЗ: ~8-16 GB
Размер С:   ~3-5 GB
Оптимизация: ЖЕЛАТЕЛЬНА (shared vendor)
Экономия: ~5-11 GB (60-70%)

Для 10-50 сайтов

Размер БЕЗ: ~16-80 GB
Размер С:   ~5-21 GB
Оптимизация: ОБЯЗАТЕЛЬНА
Экономия: ~11-59 GB (70-73%)

Для 50+ сайтов

Размер БЕЗ: ~80-160 GB
Размер С:   ~21-41 GB
Оптимизация: КРИТИЧНА
Экономия: ~59-119 GB (73-74%)
+ Нужно: CDN, кластер БД, балансировщик

🐳 Docker оптимизация (бонус)

Что Docker делает автоматически

Docker использует copy-on-write и layer sharing:

Образ Drupal (622 MB):
  ├─ Layer 1: PHP 8.3        200 MB  ← Shared между ВСЕМИ PHP контейнерами
  ├─ Layer 2: Apache          50 MB  ← Shared
  ├─ Layer 3: Extensions     100 MB  ← Shared
  ├─ Layer 4: Composer        72 MB  ← Shared
  └─ Layer 5: Config         200 MB  ← Shared

10 контейнеров = 622 MB (не 6.2 GB!)

Что мы добавляем сверху (shared vendor)

Вместо:
  site-1/vendor/  300 MB
  site-2/vendor/  300 MB
  site-3/vendor/  300 MB
  ...
  Итого: 3 GB

Делаем:
  /shared/vendor/ 300 MB
  site-1/  symlink
  site-2/  symlink
  site-3/  symlink
  ...
  Итого: 300 MB  

💾 Размер БД с контентом

Чистая установка:

Kickstart 5 (0 товаров):     11 MB
PostgreSQL data/:           158 MB (с индексами, служебное)

С товарами (реальный магазин):

100 товаров:                 15 MB
1000 товаров:                50 MB
10000 товаров:              200 MB

+ Изображения в files/:
100 товаров × 3 фото × 500KB = 150 MB
1000 товаров                = 1.5 GB
10000 товаров               = 15 GB

Важно: Изображения НЕ в БД, а в /files/

Оптимизация изображений:
- CDN (Cloudflare, BunnyCDN)
- Внешнее хранилище (S3, Яндекс Object Storage)
- WebP конвертация (экономия 30-50%)


📋 Чек-лист экономии места

Уровень 1: Базовая экономия (автоматически)

Экономия: ~50%

Уровень 2: Shared vendor

Экономия: +20% (итого 70%)

Уровень 3: Оптимизация файлов

Экономия: +10% (итого 80%)

Уровень 4: Кластер БД (для 50+ сайтов)

Экономия: +5% (итого 85%)


🎓 Итоговые выводы

Один сайт:

Полный размер: ~1.6 GB
  ├─ Код:        371 MB
  ├─ БД:         158 MB
  ├─ Docker:     897 MB
  └─ Контейнер:  123 MB

10 сайтов без оптимизации:

Наивный расчёт:  10 × 1.6 GB = 16 GB
Реально (Docker): 7.9 GB (Docker сам экономит)

10 сайтов с shared vendor:

Полная оптимизация: 5.2 GB
Экономия: 67%

100 сайтов с shared vendor:

Без оптимизации: ~160 GB
С оптимизацией:   ~41 GB
Экономия: 74% (119 GB!)

🚀 Рекомендуемая архитектура

Для dev + test + prod (3 сайта)

Структура: Обычная (без shared)
Размер: ~5 GB
Усилия: Минимальные

Для shop-1, shop-2, ... shop-10 (10 магазинов)

Структура: Shared vendor обязательно
Размер: ~5 GB (вместо 16 GB)
Усилия: Средние (настроить один раз)
Экономия: 11 GB

Для массового размножения (50+ сайтов)

Структура: Full optimization
  ├─ Shared vendor
  ├─ CDN для файлов
  ├─ Кластер БД
  └─ Балансировщик
Размер: ~21 GB (вместо 80 GB)
Усилия: Высокие
Экономия: 59 GB

Создано: 2025-11-16
Автор: Claude Code
Статус: Полный анализ для планирования инфраструктуры