Версия: 1.0.0
Дата: 2026-02-13
Тип: Структура хранения
Универсальная структура папок для ЛЮБОГО IT решения, разделяющая:
- Штатное (то что скачали)
- Архив (старое)
- Разработку (что делаем)
- Версии (dev/test/prod)
project/
│
├── app/ ← ШТАТНОЕ (то что скачали/установили)
│ ├── core/ Дистрибутив (Drupal, WordPress, Laravel, etc)
│ ├── vendor/ Библиотеки (composer, npm, pip)
│ └── contrib/ Сторонние модули/плагины/расширения
│
├── arh/ ← АРХИВ (старые версии)
│ ├── YYYY-MM-DD_название/
│ └── backups/
│
├── dev/ ← РАЗРАБОТКА (наш код, активная работа)
│ └── custom/ Наши модули/компоненты/скрипты
│
├── tst/ ← ТЕСТ (что отправили на тестирование)
│ └── custom/ Копия из dev/ после готовности
│
└── prd/ ← ПРОДАКШН (что работает на боевом)
└── custom/ Копия из tst/ после успешных тестов
Что: Всё что НЕ мы написали
Содержимое:
- Скачанные дистрибутивы (Drupal core, WP, Laravel)
- Зависимости (vendor/, node_modules/)
- Сторонние модули/плагины (contrib)
Не трогаем: Только обновляем (composer update, npm update)
Пример:
app/
├── drupal-11.3.3/ ← скачали с drupal.org
├── vendor/ ← composer install
└── contrib/
├── commerce/ ← composer require drupal/commerce
└── views/ ← contrib модуль
Что: Старые версии наших изменений
Когда создавать:
- Перед большим рефакторингом
- Перед деплоем на prod (бэкап текущей prd/)
- Раз в месяц (архивация текущего состояния)
Формат названия: YYYY-MM-DD_описание/
Пример:
arh/
├── 2026-01-15_before-catalog-refactor/
├── 2026-02-01_prod-backup/
└── backups/
└── prd-2026-02-13.tar.gz
Что: Наш код в процессе разработки
Содержимое:
- Наши модули
- Наши компоненты
- Наши скрипты
- Конфиги
Работа: ВСЯ разработка происходит ТОЛЬКО здесь
Пример:
dev/
└── modules/
├── dru_lider_catalog/
├── dru_lider_models/
└── custom_feature/
Что: Снапшот что отправили на тестирование
Когда создавать: Когда dev/ готов к тестированию
Процесс:
1. Разработали в dev/
2. Протестировали локально
3. Копируем dev/ → tst/
4. Деплоим tst/ на test сервер
5. Тестируем
Пример:
tst/
└── modules/
└── dru_lider_catalog/ (копия из dev/, версия 1.0.0-test)
Что: Снапшот что работает на боевом сервере
Когда создавать: После успешных тестов на tst/
Процесс:
1. tst/ протестирован → OK
2. Копируем tst/ → prd/
3. Деплоим prd/ на prod сервер
Пример:
prd/
└── modules/
└── dru_lider_catalog/ (копия из tst/, версия 1.0.0)
┌─────────────────────────────────────────────────────────────┐
│ 1. РАЗРАБОТКА │
│ dev/ ← работаем здесь │
│ - пишем код │
│ - тестируем локально │
│ - git commit │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 2. ТЕСТИРОВАНИЕ │
│ dev/ → tst/ │
│ - копируем готовое │
│ - деплоим на test сервер │
│ - тестируем функционал │
│ - находим баги → фиксим в dev/ → повторяем │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 3. ПРОДАКШН │
│ tst/ → prd/ │
│ - бэкап текущей prd/ → arh/ │
│ - копируем протестированное │
│ - деплоим на prod сервер │
└─────────────────────────────────────────────────────────────┘
НЕДЕЛЯ 1:
dev/ v1.1.0 ← разрабатываем
tst/ v1.0.0 ← отправили на тесты
prd/ v0.9.0 ← работает
НЕДЕЛЯ 2:
dev/ v1.2.0 ← новая фича (продолжаем работу!)
tst/ v1.0.0 ← всё ещё тестируется
prd/ v0.9.0 ← стабильно работает
НЕДЕЛЯ 3:
dev/ v1.3.0 ← ещё фичи
tst/ v1.1.0 ← v1.0.0 протестирован, отправили v1.1.0
prd/ v1.0.0 ← задеплоили протестированную версию
# dev → tst (готово к тестированию)
cp -r dev/modules/custom_module tst/modules/
# tst → prd (протестировано, на прод)
cp -r tst/modules/custom_module prd/modules/
# prd → arh (бэкап перед обновлением)
cp -r prd/ arh/$(date +%Y-%m-%d)_backup/
# tst/ → test сервер
rsync -av tst/modules/ user@server:~/staging/modules/
# prd/ → prod сервер
rsync -av prd/modules/ user@server:~/production/modules/
project/
├── app/
│ ├── core/ drupal-11.3.3/
│ ├── vendor/ composer dependencies
│ └── contrib/ contrib modules
├── dev/modules/ custom modules
├── tst/modules/
└── prd/modules/
project/
├── app/
│ ├── python-3.11/ дистрибутив Python
│ └── venv/ виртуальное окружение
├── dev/scripts/ наши скрипты
├── tst/scripts/
└── prd/scripts/
project/
├── app/
│ ├── node-20/ Node.js runtime
│ └── node_modules/ npm dependencies
├── dev/src/ исходники
├── tst/dist/ build для теста
└── prd/dist/ build для прода
✅ Коммитим:
- dev/ наша разработка
- tst/ протестированные версии
- prd/ продакшн версии
❌ НЕ коммитим:
- app/ (регенерируется, есть package.json/composer.json)
- arh/ (большие файлы, есть в бэкапах)
# Штатное (регенерируется)
/app/vendor/
/app/node_modules/
/app/core/
# Архив (слишком большой)
/arh/
# Временные файлы
*.log
.DS_Store
✓ Локальные тесты пройдены?
✓ Git коммит создан?
✓ Нет критических TODO?
✓ Тесты на test сервере OK?
✓ Нет ошибок в логах?
✓ Бэкап текущей prd/ создан?
✓ Есть план отката?
# 1. Откат на предыдущую версию из arh/
cp -r arh/2026-02-10_prd-backup/modules/ prd/modules/
rsync -av prd/modules/ user@server:~/production/modules/
# 2. Или откат на tst/ (если она стабильная)
cp -r tst/modules/ prd/modules/
rsync -av prd/modules/ user@server:~/production/modules/
| Папка | Ограничение | Причина |
|---|---|---|
| app/ | Без ограничений | Штатное, можно удалить и скачать заново |
| arh/ | Хранить 3-6 месяцев | Старые версии, периодически чистить |
| dev/ | Активная разработка | Текущая работа |
| tst/ | 1-2 версии | Снапшот для тестирования |
| prd/ | 1 версия | Текущая продакшн версия |
ДА, если:
- Тестирование занимает больше 1 дня
- Нужна параллельная разработка (dev продолжается пока tst тестируется)
- Требуется история протестированных версий
НЕТ, если:
- Быстрое тестирование (5-10 минут)
- Маленький проект (1 разработчик)
- Можно сразу dev → prd
НЕТ! Только копирование:
- dev/ → tst/ (целиком)
- tst/ → prd/ (целиком)
Если нужны изменения → делаем в dev/, потом копируем.