type: standard
aspect: guidance
title: "Процесс разработки IT решения (IT Solution Development)"
version: 1.0.0
date: 2026-02-19
status: active
Версия: 1.0.0
Дата: 2026-02-03
Статус: СТАНДАРТ
Практический процесс разработки IT решения с пониманием:
- Где создаётся код
- Куда перекладывается при тестировании
- Как попадает в production
- Где документация на каждом этапе
- Когда обновлять index.py
Применяется к: CS-Cart, Drupal, Next.js, любому IT решению
| Стандарт | Что даёт | Применение |
|---|---|---|
| CODE_STAGES.md | Теория стадий кода | Этот документ — применение на практике |
| SOLUTION_STRUCTURE.md | Структура решения | Где создавать папки |
| INDEX_PY.md | Формат index.py | Когда обновлять |
| PROJECT_BOOTSTRAP.md | Инициализация проекта | Техническая подготовка |
| PROJECT_START.md | Планирование проекта | Перед разработкой |
ФАЗА 1: СОЗДАНИЕ СТРУКТУРЫ ← Один раз
↓
ФАЗА 2: РАЗРАБОТКА (dev/) ← Активная работа
↓
ФАЗА 3: ТЕСТИРОВАНИЕ (test/) ← Проверка
↓
ФАЗА 4: PRODUCTION (prod/) ← Релиз
↓
ФАЗА 5: ЭКСПЛУАТАЦИЯ ← Использование
↓
ФАЗА 6: ОБНОВЛЕНИЕ ← Новая версия (цикл)
↓
ФАЗА 7: АРХИВИРОВАНИЕ ← Вывод из эксплуатации
Создать структуру решения один раз перед началом разработки.
# Для CS-Cart решения
it/web/cscart/
├── index.py ← Индекс решения (создать)
├── CLAUDE.md ← Контекст (создать)
├── README.md ← Описание (создать)
│
├── app/ ← Дистрибутив платформы
│ └── 4.19.1/ (скопировать CS-Cart)
│
├── themes/ ← Темы со стадиями
│ ├── lib/ (создать пустые)
│ ├── dev/
│ ├── test/
│ ├── prod/
│ └── archive/
│
├── modules/ ← Модули со стадиями
│ ├── lib/ (создать пустые)
│ ├── dev/
│ ├── test/
│ ├── prod/
│ └── archive/
│
├── sites/ ← Установки сайтов
│ └── (создать при развёртывании)
│
├── infra/ ← Инфраструктура решения
│ ├── nginx/
│ ├── db/
│ │ ├── dev/
│ │ └── prod/
│ ├── cron/
│ ├── ssl/
│ └── backup/
│
├── lib/ ← Vendor библиотеки
│ └── composer/
│
└── docs/ ← Документация решения (создать)
├── README.md
├── architecture/
├── installation/
├── development/
└── user-guide/
# 1. Создать структуру
cd it/web/
mkdir -p cscart/{app,themes/{lib,dev,test,prod,archive},modules/{lib,dev,test,prod,archive},sites,infra/{nginx,db/{dev,prod},cron,ssl,backup},lib/composer,docs/{architecture,installation,development,user-guide}}
# 2. Создать README в пустых папках
for dir in themes/{lib,dev,test,prod,archive} modules/{lib,dev,test,prod,archive}; do
echo "# $(basename $dir)" > cscart/$dir/README.md
done
# 3. Создать index.py (см. INDEX_PY.md)
vim cscart/index.py
# 4. Создать CLAUDE.md
vim cscart/CLAUDE.md
# 5. Создать docs/README.md
vim cscart/docs/README.md
15-20 минут (механическое создание)
Создать новый модуль/тему в dev/ и разработать функционал.
modules/dev/{module_name}/ ← Наши модули
themes/dev/{theme_name}/ ← Наши темы
# 1. Создать структуру модуля
cd modules/dev/
mkdir -p lider_import/{docs,schemas,var/langs/ru}
# 2. Создать базовые файлы
touch lider_import/addon.xml
touch lider_import/init.php
touch lider_import/func.php
# 3. Создать документацию модуля
vim lider_import/docs/README.md
vim lider_import/docs/SPEC.md
vim lider_import/docs/USAGE.md
# Писать код в dev/
vim modules/dev/lider_import/init.php
vim modules/dev/lider_import/func.php
vim modules/dev/lider_import/schemas/advanced_import/products.post.php
// modules/dev/lider_import/addon.xml
<?xml version="1.0"?>
<addon>
<id>lider_import</id>
<version>2.0.0-dev</version>
<status>active</status>
</addon>
# Подключить к dev сайту
ln -s /путь/к/modules/dev/lider_import /var/www/sites/work.lideravto.ru/app/addons/lider_import
# Тестировать функционал
# Править баги
# Писать тесты
# cscart/index.py
INDEX = {
# ...
"components": {
"modules": {
"dev": [
{
"name": "lider_import",
"version": "2.0.0-dev",
"status": "active",
"path": "modules/dev/lider_import/"
}
]
}
},
"sites": {
"work.lideravto.ru": {
"env": "dev",
"components": {
"modules": ["dev/lider_import"] # используем dev версию
}
}
}
}
modules/dev/lider_import/docs/
├── README.md ← Обзор модуля (что делает)
├── SPEC.md ← ТЗ модуля (требования)
├── USAGE.md ← Как использовать
├── API.md ← API (если есть)
└── CHANGELOG.md ← История (начать вести)
X.Y.Z-devЗависит от сложности модуля (от нескольких часов до недель)
Перенести модуль в test/ для интеграционного тестирования перед production.
// Было: 2.0.0-dev
// Стало: 2.0.0-rc1
// modules/dev/lider_import/addon.xml
<version>2.0.0-rc1</version>
# modules/dev/lider_import/docs/CHANGELOG.md
## [2.0.0-rc1] - 2026-02-03
### Added
- Импорт товаров из BAZON API
- Обработка категорий
### Fixed
- Баг с дублированием товаров
# Копировать (НЕ перемещать!) dev → test
cp -r modules/dev/lider_import/ modules/test/lider_import-v2.0.0-rc1/
Почему копировать, не перемещать:
- dev/ остаётся для дальнейшей разработки (hotfix, новые фичи)
- test/ независимая копия для тестирования
# cscart/index.py
INDEX = {
"components": {
"modules": {
"dev": [
{"name": "lider_import", "version": "2.0.0-dev", "status": "active"}
],
"test": [
{"name": "lider_import", "version": "2.0.0-rc1", "status": "testing"}
]
}
}
}
# Создать staging сайт (если нет)
mkdir sites/staging.lideravto.ru/
cp sites/work.lideravto.ru/config.local.php sites/staging.lideravto.ru/
# Подключить test версию модуля
ln -s /путь/к/modules/test/lider_import-v2.0.0-rc1/ sites/staging.lideravto.ru/app/addons/lider_import
# Настроить nginx
vim infra/nginx/staging.lideravto.ru.conf
nginx -t && systemctl reload nginx
# Обновить index.py
# cscart/index.py
"sites": {
"staging.lideravto.ru": {
"env": "test",
"url": "https://staging.lideravto.ru",
"components": {
"modules": ["test/lider_import-v2.0.0-rc1"]
}
}
}
# Интеграционные тесты
# UAT (User Acceptance Testing)
# Performance тесты
# Security audit (если критично)
Если нашли баги:
# Вариант 1: Hotfix в test/
# (если баг простой)
vim modules/test/lider_import-v2.0.0-rc1/func.php
# Обновить версию: rc1 → rc2
# Вариант 2: Вернуть в dev/
# (если баг критический, требует переработки)
rm -rf modules/test/lider_import-v2.0.0-rc1/
# Исправить в dev/
# Повторить ФАЗА 3 с новой версией rc2
X.Y.Z-rc1 → готова к X.Y.Z1-2 недели (зависит от сложности и количества багов)
Перенести модуль в prod/ и развернуть на production сайте.
// Было: 2.0.0-rc1
// Стало: 2.0.0
// modules/test/lider_import-v2.0.0-rc1/addon.xml
<version>2.0.0</version>
# modules/test/lider_import-v2.0.0-rc1/docs/CHANGELOG.md
## [2.0.0] - 2026-02-03
### Added
- Импорт товаров из BAZON API
- Обработка категорий
- Синхронизация остатков
### Changed
- Улучшена производительность импорта (×3 быстрее)
### Fixed
- Баг с дублированием товаров
- Ошибка при пустых категориях
# Скопировать test → prod с новым именем
cp -r modules/test/lider_import-v2.0.0-rc1/ modules/prod/lider_import-v2.0.0/
# В новой папке обновить версию в addon.xml: 2.0.0-rc1 → 2.0.0
vim modules/prod/lider_import-v2.0.0/addon.xml
# cscart/index.py
INDEX = {
"components": {
"modules": {
"dev": [
{"name": "lider_import", "version": "2.1.0-dev", "status": "active"}
],
"test": [
# можно очистить или оставить для истории
],
"prod": [
{"name": "lider_import", "version": "2.0.0", "status": "stable"},
{"name": "lider_import", "version": "1.5.0", "status": "stable"} # старая версия для rollback
]
}
},
"sites": {
"lideravto.ru": {
"env": "prod",
"url": "https://lideravto.ru",
"components": {
"modules": ["prod/lider_import-v2.0.0"]
}
}
}
}
# Бэкап перед деплоем (ОБЯЗАТЕЛЬНО!)
bash /opt/scripts/backup.sh cscart
# Подключить prod версию
ln -sf /путь/к/modules/prod/lider_import-v2.0.0/ sites/lideravto.ru/app/addons/lider_import
# Проверить работу
curl https://lideravto.ru/admin.php?dispatch=addons.manage
# Проверить модуль активен
# Проверить основной функционал работает
# Проверить логи на ошибки
tail -f sites/lideravto.ru/var/log/*.log
# Мониторинг (первые 24 часа)
# Переключиться на старую версию
ln -sf /путь/к/modules/prod/lider_import-v1.5.0/ sites/lideravto.ru/app/addons/lider_import
# Обновить index.py (вернуть старую версию в components)
30 минут - 1 час (деплой + проверка)
Использование модуля в production, мониторинг, поддержка.
# Мониторинг работы
# Сбор метрик
# Обработка инцидентов
# Поддержка пользователей
modules/prod/lider_import-v2.0.0/docs/
├── README.md ← Обзор модуля
├── USAGE.md ← Инструкция пользователя
├── TROUBLESHOOTING.md ← Решение проблем
└── FAQ.md ← Частые вопросы
Если нашли критический баг в production:
# 1. Исправить в dev/
vim modules/dev/lider_import/func.php
# Обновить версию: 2.0.0-dev → 2.0.1-dev
# 2. Тесты
# ...
# 3. Можно пропустить test/ если критично
cp -r modules/dev/lider_import/ modules/prod/lider_import-v2.0.1/
# Обновить версию: 2.0.1-dev → 2.0.1
# 4. Деплой
ln -sf /путь/к/modules/prod/lider_import-v2.0.1/ sites/lideravto.ru/app/addons/lider_import
# 5. Обновить index.py
Критерии hotfix (когда можно пропустить test/):
- Критический баг на production (downtime, потеря данных, безопасность)
- Простое исправление (1-5 строк кода)
- Срочность (не может ждать)
Неограниченно (пока модуль используется)
Разработать новую версию модуля (новые фичи, улучшения).
# Скопировать текущую prod версию в dev/
cp -r modules/prod/lider_import-v2.0.0/ modules/dev/lider_import/
# Обновить версию
vim modules/dev/lider_import/addon.xml
# 2.0.0 → 2.1.0-dev (minor — новые фичи)
# или 3.0.0-dev (major — breaking changes)
# Начать разработку
vim modules/dev/lider_import/...
ФАЗА 2: Разработка (dev/)
↓
ФАЗА 3: Тестирование (test/)
↓
ФАЗА 4: Production (prod/)
modules/prod/
├── lider_import-v3.0.0/ ← новая версия (текущая)
├── lider_import-v2.0.0/ ← старая версия (для rollback)
└── lider_import-v1.5.0/ ← совсем старая (для истории)
Semantic Versioning (MAJOR.MINOR.PATCH):
2.0.0 → 2.0.1 ← PATCH: hotfix, исправление бага
2.0.0 → 2.1.0 ← MINOR: новая фича (обратно совместимо)
2.0.0 → 3.0.0 ← MAJOR: breaking change (несовместимо)
Примеры:
1.0.0-dev → разработка
1.0.0-rc1 → тестирование (release candidate 1)
1.0.0-rc2 → тестирование (после фиксов)
1.0.0 → релиз
1.0.1 → hotfix
1.1.0 → новая фича
2.0.0 → breaking change
Зависит от масштаба изменений (от дней до месяцев)
Перенести устаревший модуль в archive/ когда он больше не используется.
# modules/prod/lider_import-v1.0.0/DEPRECATED.md
# DEPRECATED
**Дата:** 2026-02-03
**Причина:** Заменён на lider_import v3.0.0
**Замена:** modules/prod/lider_import-v3.0.0/
## Что изменилось
- Новая архитектура (микросервисы)
- API изменён (несовместимо)
- Производительность ×10
## Миграция
См. modules/prod/lider_import-v3.0.0/docs/MIGRATION.md
mv modules/prod/lider_import-v1.0.0/ modules/archive/
# cscart/index.py
INDEX = {
"components": {
"modules": {
"prod": [
{"name": "lider_import", "version": "3.0.0", "status": "stable"},
{"name": "lider_import", "version": "2.5.0", "status": "stable"}
],
"archive": [
{"name": "lider_import", "version": "1.0.0", "status": "deprecated", "reason": "Заменён v3.0.0"}
]
}
}
}
5-10 минут
| Фаза | Где код | Где документация | index.py | Версия |
|---|---|---|---|---|
| 1. Структура | — | docs/README.md | Создать | — |
| 2. Разработка | modules/dev/ | modules/dev/*/docs/ | Обновить (dev) | X.Y.Z-dev |
| 3. Тестирование | modules/test/ | modules/test/*/docs/ | Обновить (test) | X.Y.Z-rc1 |
| 4. Production | modules/prod/ | modules/prod/*/docs/ | Обновить (prod) | X.Y.Z |
| 5. Эксплуатация | modules/prod/ | + TROUBLESHOOTING.md | — | X.Y.Z |
| 6. Обновление | modules/dev/ | modules/dev/*/docs/ | Обновить (dev) | X+1.Y.Z-dev |
| 7. Архив | modules/archive/ | + DEPRECATED.md | Обновить (archive) | X.Y.Z |
# 1. Создать структуру
mkdir -p modules/dev/my_module/{docs,schemas}
cd modules/dev/my_module/
# 2. Создать базовые файлы
cat > addon.xml <<'EOF'
<?xml version="1.0"?>
<addon>
<id>my_module</id>
<version>1.0.0-dev</version>
<name>My Module</name>
</addon>
EOF
touch init.php func.php
# 3. Создать документацию
cat > docs/README.md <<'EOF'
# My Module
Описание модуля.
EOF
cat > docs/SPEC.md <<'EOF'
# Спецификация
Требования к модулю.
EOF
cat > docs/USAGE.md <<'EOF'
# Использование
Как использовать модуль.
EOF
cat > docs/CHANGELOG.md <<'EOF'
# Changelog
## [1.0.0-dev] - UNRELEASED
### Added
- Начальная разработка
EOF
# 4. Обновить index.py
vim ../../index.py
# 1. Обновить версию в коде
vim modules/dev/my_module/addon.xml
# 1.0.0-dev → 1.0.0-rc1
# 2. Обновить CHANGELOG
vim modules/dev/my_module/docs/CHANGELOG.md
# 3. Скопировать
cp -r modules/dev/my_module/ modules/test/my_module-v1.0.0-rc1/
# 4. Обновить index.py
vim index.py
# 1. Обновить версию в коде
vim modules/test/my_module-v1.0.0-rc1/addon.xml
# 1.0.0-rc1 → 1.0.0
# 2. Финализировать CHANGELOG
vim modules/test/my_module-v1.0.0-rc1/docs/CHANGELOG.md
# 3. Скопировать
cp -r modules/test/my_module-v1.0.0-rc1/ modules/prod/my_module-v1.0.0/
# 4. Обновить index.py
vim index.py
# 5. Деплой
bash /opt/scripts/backup.sh cscart
ln -sf $(pwd)/modules/prod/my_module-v1.0.0/ sites/lideravto.ru/app/addons/my_module
# 1. Создать DEPRECATED.md
cat > modules/prod/my_module-v1.0.0/DEPRECATED.md <<'EOF'
# DEPRECATED
**Дата:** 2026-02-03
**Причина:** Заменён на v2.0.0
EOF
# 2. Переместить
mv modules/prod/my_module-v1.0.0/ modules/archive/
# 3. Обновить index.py
vim index.py
❌ Разрабатывать напрямую в prod/
→ Потеря истории, нет возможности rollback
❌ Пропускать test/ фазу
→ Баги попадают в production
❌ Удалять старые версии из prod/
→ Нет возможности rollback
❌ Не обновлять index.py
→ Нет понимания какие версии где используются
❌ Не писать CHANGELOG
→ Не понятно что изменилось между версиями
❌ Использовать одно имя папки для разных версий
→ Путаница, конфликты
❌ Не создавать документацию
→ Никто не понимает как использовать модуль
✅ Всегда разрабатывать в dev/
✅ Всегда проходить через test/ перед prod/
✅ Хранить минимум 2-3 версии в prod/ для rollback
✅ Обновлять index.py после каждого переноса
✅ Вести CHANGELOG с первой версии
✅ Версионировать папки: module-vX.Y.Z
✅ Документировать каждый модуль (README, SPEC, USAGE)
✅ Делать бэкап перед деплоем в production
Этот стандарт — практическое применение теории стадий:
| Теория (CODE_STAGES.md) | Практика (этот документ) |
|---|---|
| lib/ — чужие компоненты | Загрузить купленный модуль → modules/lib/ |
| dev/ — разработка | ФАЗА 2: Создать модуль в dev/ → разработать |
| test/ — тестирование | ФАЗА 3: Скопировать dev/ → test/ → тестировать |
| prod/ — production | ФАЗА 4: Скопировать test/ → prod/ → развернуть |
| archive/ — устаревшие | ФАЗА 7: Переместить prod/ → archive/ |
Где создавать папки:
| Компонент | Где в структуре |
|---|---|
| Модули | modules/{lib,dev,test,prod,archive}/ |
| Темы | themes/{lib,dev,test,prod,archive}/ |
| Сайты | sites/{domain}/ |
| Инфраструктура | infra/{nginx,db,cron,ssl,backup}/ |
| Документация решения | docs/{architecture,installation,development}/ |
Когда обновлять:
| Фаза | Что обновить в index.py |
|---|---|
| 1. Структура | Создать базовый index.py с metadata + dependencies |
| 2. Разработка | Добавить компонент в components.modules.dev[] |
| 3. Тестирование | Добавить в components.modules.test[] |
| 4. Production | Добавить в components.modules.prod[] + обновить sites[].components.modules[] |
| 7. Архивирование | Переместить в components.modules.archive[] |
ФАЗА 1: Структура 15-20 минут (один раз)
ФАЗА 2: Разработка 1-4 недели (зависит от сложности)
ФАЗА 3: Тестирование 1-2 недели (интеграция + UAT)
ФАЗА 4: Production 30-60 минут (деплой + проверка)
ФАЗА 5: Эксплуатация неограниченно (пока используется)
ФАЗА 6: Обновление 1-3 недели (зависит от масштаба)
ФАЗА 7: Архивирование 5-10 минут
ФАЗА 2: Исправление 10-30 минут (в dev/)
ФАЗА 3: Тестирование пропустить (если критично)
ФАЗА 4: Production 15-20 минут (деплой)
Версия: 1.0.0
Дата: 2026-02-03