type: standard
aspect: policy
title: "Разделение КОД / ДАННЫЕ"
version: 1.0.0
date: 2026-02-19
status: active
Версия: 3.0.0
Дата: 2025-12-23
Статус: ОБЯЗАТЕЛЬНО
WORKSPACE ($WORKSPACE) = ИСХОДНИКИ → git, разработка
DATASPACE ($DATASPACE) = ДАННЫЕ → S3, без git
+ РЕЛИЗЫ → сборки для деплоя
| Тип | Расширения | Примеры |
|---|---|---|
| Код | .py, .sh, .js, .ts, .go |
Скрипты, приложения |
| Конфиги | .yaml, .json, .toml |
Настройки (без секретов!) |
| Документация | .md, .rst, .txt |
README, CLAUDE.md, спецификации |
| Шаблоны | .html, .jinja2, .sql |
Шаблоны (без данных) |
| Примеры | .example, .sample |
config.json.example |
Максимальный размер файла: 100KB (мягкий лимит), 1MB (жёсткий)
| Тип | Расширения | Примеры |
|---|---|---|
| Изображения | .jpg, .png, .gif, .webp, .svg |
Фото товаров, скриншоты |
| Документы | .pdf, .docx, .doc |
Сертификаты, договоры |
| Таблицы данных | .xlsx, .xls, .csv |
Прайсы, отчёты, экспорты |
| Дампы данных | .json (>1MB) |
Экспорты API, номенклатура |
| Медиа | .mp4, .mp3, .avi |
Видео, аудио |
| Архивы | .zip, .tar.gz, .rar |
Любые архивы |
| Бэкапы | .sql.gz, .dump |
Дампы БД |
| Релизы | .zip |
Сборки модулей для деплоя |
$WORKSPACE/ $DATASPACE/
├── architect/ 100% КОД │
├── system/ 100% КОД ├── projects/ ← ДАННЫЕ проектов
├── infra/ 100% КОД │ ├── pirotehnika/
├── library/ 100% КОД │ │ ├── inbox/ ← входящие
│ ├── _draft/ │ │ ├── prices/ ← прайсы xlsx
│ ├── _beta/ │ │ ├── images/ ← фото товаров
│ ├── connectors/ │ │ └── archive/ ← старое
│ ├── extensions/ │ └── lideravto/
│ └── applications/ │ └── ...
│ │
└── projects/ └── releases/ ← РЕЛИЗЫ (сборки)
├── my/ ← личные ├── connectors/
└── org/ ← организации │ └── ozon/
├── pirotehnika/ │ ├── v1.0.zip
│ ├── CLAUDE.md ✓ КОД │ └── latest.zip
│ ├── data/ ✓ КОД ├── extensions/
│ └── app/ ✓ КОД │ └── cms/cs-cart/
└── lideravto/ │ └── smart_images/
└── ... │ ├── v2.0.zip
│ └── v2.1.zip
└── applications/
└── ...
ВАЖНО:
- Папка data/ в git — это КОД ПРО данные, а не сами данные
- Папка releases/ — готовые сборки для деплоя на серверы
| Папка | Содержит | Примеры |
|---|---|---|
library/ в git |
Исходники модулей | src/*.py, index.yaml |
$DATASPACE/projects/ |
Бинарные данные | prices/.xlsx, images/.jpg |
$DATASPACE/releases/ |
Сборки для деплоя | smart_images/v2.1.zip |
# ЗАПРЕЩЕНО в $WORKSPACE:
*.jpg, *.png, *.gif, *.webp # изображения
*.pdf, *.docx, *.doc # документы
*.xlsx, *.xls # таблицы
*.mp4, *.mp3 # медиа
*.zip, *.tar.gz, *.rar # архивы
# Если файл > 1MB — перемещаем в DATASPACE
mv large_export.json $DATASPACE/projects/myproject/exports/
# Все загрузки сначала в _inbox
$DATASPACE/projects/pirotehnika/_inbox/
# Обязательно в .gitignore:
.env
.credentials.md
**/config.json # содержит пароли
**/api_config.json # содержит токены
# В проекте можно создать симлинк на данные
ln -s $DATASPACE/projects/pirotehnika/prices ./prices
# Но симлинк в .gitignore!
# Бинарные файлы
find $WORKSPACE -type f \( \
-name "*.jpg" -o -name "*.png" -o -name "*.gif" -o \
-name "*.pdf" -o -name "*.xlsx" -o -name "*.xls" \
\) 2>/dev/null | wc -l
# Большие файлы (>1MB)
find $WORKSPACE -type f -size +1M 2>/dev/null | head -20
du -sh $WORKSPACE/.git/
# Должен быть < 100MB для чистого репо
# Прайсы
rsync -av SOURCE/prices/ $DATASPACE/projects/PROJECT/prices/
# Изображения
rsync -av SOURCE/images/ $DATASPACE/projects/PROJECT/images/
rm -rf $WORKSPACE/projects/PROJECT/старая_папка_с_данными/
# Осторожно! Только после бэкапа!
git filter-repo --path projects/PROJECT/старая_папка --invert-paths
git gc --aggressive --prune=now
# Добавить в cron
0 6 * * * $WORKSPACE/infra/@backup.service/scripts/check-data-separation.sh
#!/bin/bash
VIOLATIONS=$(find $WORKSPACE -type f \( -name "*.jpg" -o -name "*.pdf" -o -name "*.xlsx" \) | wc -l)
if [ "$VIOLATIONS" -gt 0 ]; then
echo "WARNING: $VIOLATIONS binary files in workspace!"
fi
| Путь | Причина |
|---|---|
archive/ |
Исторический архив (read-only) |
*.svg |
Векторная графика в документации |
*.ico |
Иконки приложений |
fonts/ |
Шрифты для веб-приложений |
Версия: 3.0.0