architect/arh/standards/structure-old/PROJECT_STORAGE.md

Стандарт структуры IT проекта

Версия: 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/ после успешных тестов

Назначение папок

app/ - ШТАТНОЕ

Что: Всё что НЕ мы написали

Содержимое:
- Скачанные дистрибутивы (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 модуль

arh/ - АРХИВ

Что: Старые версии наших изменений

Когда создавать:
- Перед большим рефакторингом
- Перед деплоем на 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/ - РАЗРАБОТКА

Что: Наш код в процессе разработки

Содержимое:
- Наши модули
- Наши компоненты
- Наши скрипты
- Конфиги

Работа: ВСЯ разработка происходит ТОЛЬКО здесь

Пример:

dev/
└── modules/
    ├── dru_lider_catalog/
    ├── dru_lider_models/
    └── custom_feature/

tst/ - ТЕСТ

Что: Снапшот что отправили на тестирование

Когда создавать: Когда dev/ готов к тестированию

Процесс:

1. Разработали в dev/
2. Протестировали локально
3. Копируем dev/  tst/
4. Деплоим tst/ на test сервер
5. Тестируем

Пример:

tst/
└── modules/
    └── dru_lider_catalog/    (копия из dev/, версия 1.0.0-test)

prd/ - ПРОДАКШН

Что: Снапшот что работает на боевом сервере

Когда создавать: После успешных тестов на tst/

Процесс:

1. tst/ протестирован  OK
2. Копируем tst/  prd/
3. Деплоим prd/ на prod сервер

Пример:

prd/
└── modules/
    └── dru_lider_catalog/    (копия из tst/, версия 1.0.0)

Workflow

Жизненный цикл изменений

┌─────────────────────────────────────────────────────────────┐
│ 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/

Применение к разным типам проектов

Drupal проект

project/
├── app/
│   ├── core/             drupal-11.3.3/
│   ├── vendor/           composer dependencies
│   └── contrib/          contrib modules
├── dev/modules/          custom modules
├── tst/modules/
└── prd/modules/

Python проект

project/
├── app/
│   ├── python-3.11/      дистрибутив Python
│   └── venv/             виртуальное окружение
├── dev/scripts/          наши скрипты
├── tst/scripts/
└── prd/scripts/

Node.js проект

project/
├── app/
│   ├── node-20/          Node.js runtime
│   └── node_modules/     npm dependencies
├── dev/src/              исходники
├── tst/dist/             build для теста
└── prd/dist/             build для прода

Git и версионирование

Что коммитить в git

 Коммитим:
- dev/         наша разработка
- tst/         протестированные версии
- prd/         продакшн версии

 НЕ коммитим:
- app/         (регенерируется, есть package.json/composer.json)
- arh/         (большие файлы, есть в бэкапах)

.gitignore

# Штатное (регенерируется)
/app/vendor/
/app/node_modules/
/app/core/

# Архив (слишком большой)
/arh/

# Временные файлы
*.log
.DS_Store

Проверки

Перед dev → tst

 Локальные тесты пройдены?
✓ Git коммит создан?
✓ Нет критических TODO?

Перед tst → prd

 Тесты на test сервере OK?
✓ Нет ошибок в логах?
✓ Бэкап текущей prd/ создан?
✓ Есть план отката?

Откат

Если на prod что-то сломалось

# 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 версия Текущая продакшн версия

Частые вопросы

Нужна ли папка tst/?

ДА, если:
- Тестирование занимает больше 1 дня
- Нужна параллельная разработка (dev продолжается пока tst тестируется)
- Требуется история протестированных версий

НЕТ, если:
- Быстрое тестирование (5-10 минут)
- Маленький проект (1 разработчик)
- Можно сразу dev → prd

Когда чистить arh/?

Можно ли редактировать tst/ и prd/?

НЕТ! Только копирование:
- dev/ → tst/ (целиком)
- tst/ → prd/ (целиком)

Если нужны изменения → делаем в dev/, потом копируем.


См. также