Дата: 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
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Каждый сайт: 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 автоматически переиспользует layers образов!
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 на образах.
/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
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% |
Вывод: Чем больше сайтов, тем больше экономия!
Размер: ~5 GB
Оптимизация: НЕ НУЖНА
Причина: Слишком мало сайтов, усилия не окупятся
Размер БЕЗ: ~8-16 GB
Размер С: ~3-5 GB
Оптимизация: ЖЕЛАТЕЛЬНА (shared vendor)
Экономия: ~5-11 GB (60-70%)
Размер БЕЗ: ~16-80 GB
Размер С: ~5-21 GB
Оптимизация: ОБЯЗАТЕЛЬНА
Экономия: ~11-59 GB (70-73%)
Размер БЕЗ: ~80-160 GB
Размер С: ~21-41 GB
Оптимизация: КРИТИЧНА
Экономия: ~59-119 GB (73-74%)
+ Нужно: CDN, кластер БД, балансировщик
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!)
Вместо:
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%)
Экономия: ~50%
Экономия: +20% (итого 70%)
Экономия: +10% (итого 80%)
Экономия: +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!)
Структура: Обычная (без shared)
Размер: ~5 GB
Усилия: Минимальные
Структура: Shared vendor обязательно
Размер: ~5 GB (вместо 16 GB)
Усилия: Средние (настроить один раз)
Экономия: 11 GB
Структура: Full optimization
├─ Shared vendor
├─ CDN для файлов
├─ Кластер БД
└─ Балансировщик
Размер: ~21 GB (вместо 80 GB)
Усилия: Высокие
Экономия: 59 GB
Создано: 2025-11-16
Автор: Claude Code
Статус: Полный анализ для планирования инфраструктуры