type: standard
aspect: structure
title: "Структура решения (Solution Structure)"
version: 1.0.0
date: 2026-02-19
status: active
Версия: 1.0.0
Дата: 2026-02-03
Статус: ОБЯЗАТЕЛЬНО
ОДНО РЕШЕНИЕ = УНИФИЦИРОВАННАЯ СТРУКТУРА
Независимо от платформы (CS-Cart, Drupal, Next.js)
Зачем: Единая структура для всех решений упрощает навигацию и понимание.
solution/ ← SOLUTION (cscart, drupal, nextjs, ...)
├── index.py ← индекс решения (компоненты, сайты, инфра)
├── CLAUDE.md ← контекст решения
├── README.md ← описание решения
│
├── app/ ← дистрибутив платформы
├── themes/ ← темы оформления
├── modules/ ← модули функционала
├── sites/ ← установки/инстансы
├── infra/ ← инфраструктура решения
└── lib/ ← vendor (composer, npm)
themes/ и modules/ всегда имеют стадии:
themes/ modules/
├── lib/ ├── lib/
├── dev/ ├── dev/
├── test/ ├── test/
├── prod/ ├── prod/
└── archive/ └── archive/
См.: CODE_STAGES.md — подробно про стадии
Что: Исходный код платформы/движка (CS-Cart, Drupal, Next.js)
Примеры:
app/
└── 4.19.1/ ← CS-Cart 4.19.1
├── app/
├── js/
├── design/
└── ...
Правила:
- ❌ НЕ модифицировать код платформы напрямую
- ✅ Модификации — через modules/ и themes/
- ✅ Версионирование: app/X.Y.Z/
Для разных платформ:
# CS-Cart
app/4.19.1/
# Drupal
app/10.2.0/
# Next.js (исходники приложения)
app/src/
Что: Визуальное оформление (CSS, шаблоны, дизайн)
Структура:
themes/
├── lib/ ← чужие темы (купленные, скачанные)
│ └── vendor-theme-v1.0.0/
├── dev/ ← наши в разработке
│ └── lideravto/
├── test/ ← на тестировании
│ └── lideravto-v1.0.0-rc1/
├── prod/ ← готовые
│ ├── lideravto-v1.0.0/
│ └── lideravto-v0.9.0/
└── archive/ ← устаревшие
Для разных платформ:
CS-Cart:
themes/dev/lideravto/
├── templates/
├── css/
├── styles.less
└── manifest.json
Drupal:
themes/dev/custom_theme/
├── templates/
├── css/
├── custom_theme.info.yml
└── custom_theme.theme
Next.js:
themes/dev/main/
├── components/
├── styles/
└── theme.config.ts
Что: Функциональные расширения (фичи, интеграции, бизнес-логика)
Структура:
modules/
├── lib/ ← чужие модули
├── dev/ ← наши в разработке
│ ├── lider_import/
│ └── lider_setup/
├── test/ ← на тестировании
├── prod/ ← готовые
│ └── lider_import-v2.0.0/
└── archive/ ← устаревшие
Для разных платформ:
CS-Cart:
modules/dev/lider_import/
├── addon.xml
├── func.php
├── init.php
└── schemas/
Drupal:
modules/dev/custom_import/
├── custom_import.info.yml
├── custom_import.module
└── src/
Next.js:
modules/dev/analytics/
├── package.json
├── src/
└── tests/
Что: Конкретные сайты/приложения (инстансы решения)
Примеры:
sites/
├── work.lideravto.ru/ ← dev окружение
└── lideravto.ru/ ← prod окружение
Что внутри:
- Конфигурация сайта
- База данных (путь/настройки)
- Активные темы/модули
- Загруженные файлы (медиа)
Для разных платформ:
CS-Cart (мультисайт):
sites/
├── work.lideravto.ru/
│ ├── config.local.php
│ ├── var/
│ └── images/
└── lideravto.ru/
├── config.local.php
└── ...
Drupal:
sites/
├── dev.example.com/
│ ├── settings.php
│ └── files/
└── www.example.com/
├── settings.php
└── files/
Next.js (env-based):
sites/
├── .env.development
└── .env.production
Что: Конфигурация специфичная для решения (nginx, БД, cron, SSL)
Структура:
infra/
├── nginx/ ← nginx конфиги для сайтов
│ ├── work.lideravto.ru.conf
│ └── lideravto.ru.conf
├── db/ ← схема БД, миграции
│ ├── dev/
│ ├── prod/
│ └── schema/
├── cron/ ← cron задачи
│ ├── dev.cron
│ └── prod.cron
├── ssl/ ← SSL сертификаты
│ └── lideravto.ru/
└── backup/ ← настройки бэкапа
└── lideravto.ru/
Отличие от it/infra/:
| Уровень | Что | Примеры |
|---|---|---|
| it/infra/ | Общая инфраструктура | Nginx server, PHP-FPM, MySQL server, Домены |
| solution/infra/ | Специфичная для решения | Vhost конфиги, схема БД решения, cron сайтов |
Для разных платформ:
CS-Cart:
infra/nginx/lideravto.ru.conf:
server {
server_name lideravto.ru;
root /var/www/cscart/sites/lideravto.ru;
# CS-Cart специфичные настройки
}
Drupal:
infra/nginx/example.com.conf:
server {
server_name example.com;
root /var/www/drupal/sites/example.com;
# Drupal специфичные настройки
}
Что: Внешние библиотеки (composer, npm, bower)
Структура:
lib/
├── composer/ ← PHP зависимости
│ └── vendor/
├── node_modules/ ← NPM зависимости
└── vendor-modules/ ← модули не через пакетный менеджер
Правила:
- Управляется пакетными менеджерами (composer.json, package.json)
- В .gitignore (не коммитим vendor/)
- Восстанавливается через composer install, npm install
cscart/
├── index.py
├── CLAUDE.md
├── README.md
│
├── app/
│ └── 4.19.1/ ← дистрибутив CS-Cart
│
├── themes/
│ ├── lib/ ← купленные темы
│ ├── dev/
│ │ └── lideravto/ ← наша тема в разработке
│ ├── test/
│ ├── prod/
│ │ └── lideravto-v1.0.0/ ← готовая тема
│ └── archive/
│
├── modules/
│ ├── lib/ ← купленные модули
│ ├── dev/
│ │ ├── lider_import/ ← импорт BAZON
│ │ └── lider_setup/ ← настройка
│ ├── test/
│ ├── prod/
│ │ └── lider_import-v2.0.0/
│ └── archive/
│
├── sites/
│ ├── work.lideravto.ru/ ← dev
│ │ ├── config.local.php
│ │ └── var/
│ └── lideravto.ru/ ← prod
│ └── config.local.php
│
├── infra/
│ ├── nginx/
│ │ ├── work.lideravto.ru.conf
│ │ └── lideravto.ru.conf
│ ├── db/
│ │ ├── dev/
│ │ └── prod/
│ ├── cron/
│ └── ssl/
│
└── lib/
└── composer/
└── vendor/
drupal/
├── index.py
├── CLAUDE.md
│
├── app/
│ └── 10.2.0/ ← Drupal core
│
├── themes/
│ ├── lib/
│ ├── dev/
│ │ └── custom_theme/
│ ├── test/
│ ├── prod/
│ └── archive/
│
├── modules/
│ ├── lib/ ← contrib модули
│ │ ├── views/
│ │ └── pathauto/
│ ├── dev/
│ │ └── custom_import/ ← наш модуль
│ ├── test/
│ ├── prod/
│ └── archive/
│
├── sites/
│ ├── dev.example.com/
│ │ ├── settings.php
│ │ └── files/
│ └── www.example.com/
│ ├── settings.php
│ └── files/
│
├── infra/
│ ├── nginx/
│ ├── db/
│ └── drush/ ← Drush скрипты
│
└── lib/
└── composer/
nextjs/
├── index.py
├── CLAUDE.md
│
├── app/
│ └── src/ ← исходники приложения
│ ├── app/
│ ├── components/
│ └── lib/
│
├── themes/
│ ├── lib/
│ ├── dev/
│ │ └── main/
│ │ ├── components/
│ │ └── styles/
│ ├── test/
│ ├── prod/
│ └── archive/
│
├── modules/
│ ├── lib/
│ ├── dev/
│ │ ├── analytics/
│ │ └── auth/
│ ├── test/
│ ├── prod/
│ └── archive/
│
├── sites/ ← deployments
│ ├── dev.example.com/
│ │ └── .env.local
│ └── example.com/
│ └── .env.production
│
├── infra/
│ ├── nginx/
│ ├── docker/
│ │ └── docker-compose.yml
│ └── vercel/
│ └── vercel.json
│
└── lib/
└── node_modules/
# Все темы
ls themes/*/
# Темы в разработке
ls themes/dev/
# Готовые темы
ls themes/prod/
# Все модули
ls modules/*/
# Модули в разработке
ls modules/dev/
# Все сайты
ls sites/
# Dev сайт
ls sites/work.*/
# Prod сайт
ls sites/*.ru/
# Nginx конфиг
cat infra/nginx/lideravto.ru.conf
# БД конфиг
cat infra/db/prod/config.cnf
# Cron задачи
cat infra/cron/prod.cron
index.py связывает всё:
INDEX = {
"app": {"version": "4.19.1", "path": "app/4.19.1/"},
"sites": {
"lideravto.ru": {
"env": "prod",
"path": "sites/lideravto.ru/",
"infra": {
"nginx": "infra/nginx/lideravto.ru.conf",
"db": "infra/db/prod/"
},
"components": {
"themes": ["prod/lideravto-v1.0.0"],
"modules": ["prod/lider_import-v2.0.0"]
}
}
},
"components": {
"themes": {"dev": [...], "prod": [...]},
"modules": {"dev": [...], "prod": [...]}
}
}
См.: INDEX_PY.md — формат index.py
Было:
project/
├── modules/
│ ├── module1/
│ └── module2/
└── themes/
└── theme1/
Стало:
project/
├── index.py
├── app/
├── themes/
│ ├── lib/
│ ├── dev/
│ │ └── theme1/ ← переместили
│ ├── test/
│ ├── prod/
│ └── archive/
├── modules/
│ ├── lib/
│ ├── dev/
│ │ ├── module1/ ← переместили
│ │ └── module2/
│ ├── test/
│ ├── prod/
│ └── archive/
├── sites/
├── infra/
└── lib/
Шаги:
1. Создать структуру (app/, themes/, modules/, sites/, infra/, lib/)
2. Создать стадии в themes/ и modules/
3. Переместить существующие компоненты в dev/
4. Создать index.py
5. Обновить документацию (CLAUDE.md, README.md)
Обязательные элементы:
- [ ] index.py существует
- [ ] CLAUDE.md актуален
- [ ] themes/ имеет стадии (lib/dev/test/prod/archive)
- [ ] modules/ имеет стадии (lib/dev/test/prod/archive)
- [ ] infra/ содержит конфиги решения (nginx, db, cron)
Опциональные:
- [ ] app/ содержит дистрибутив платформы
- [ ] sites/ содержит инстансы
- [ ] lib/ содержит vendor
Запрещено:
- [ ] ❌ Модифицированный код в app/
- [ ] ❌ lib/vendor в git
- [ ] ❌ Смешение компонентов разных стадий в одной папке
Версия: 1.0.0
Дата: 2026-02-03