type: standard
aspect: process
title: "WORKFLOW: РАЗРАБОТКА ЛЮБОГО IT ПРОЕКТА"
version: 1.0.0
date: 2026-02-19
status: active
Версия: 1.3.0
Дата: 2026-02-13
┌─────────────────────────────────────────────────────────┐
│ PART 0: БАЗОВЫЕ ПОНЯТИЯ │
│ │
│ ┌─────────────────────────────────────────────┐ │
│ │ ЧТО (понятия) │ │
│ │ 0.1 Три состояния проекта │ │
│ │ 0.2 Два типа проектов (PATH A vs PATH B) │ │
│ │ 0.3 Версионирование │ │
│ │ 0.4 Эталонные данные в корне │ │
│ │ 0.5 Окружения и стадии (dev/stage/prod) │ │
│ └─────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────┐ │
│ │ КАК (правила работы) │ │
│ │ 0.6 Контрольные точки (backup) │ │
│ │ 0.7 Не чинить ядро (откат) │ │
│ │ 0.8 Один шаг = одна проверка │ │
│ │ 0.9 Записывать всё (DEVLOG) │ │
│ │ 0.10 Git после проверки │ │
│ │ 0.11 Откат немедленно │ │
│ │ 0.12 Правило удалённых изменений │ │
│ └─────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────┐ │
│ │ КОГДА (prerequisite) │ │
│ │ 0.0 Проверка инфраструктуры │ │
│ └─────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
↓
┌───────────────────────────┬─────────────────────────────┐
│ PART 1: PATH A │ PART 2: PATH B │
│ Создание нового проекта │ Онбординг существующего │
│ │ │
│ Zero → Vanilla → Работа │ Получение → Настройка → │
│ │ Работа │
└───────────────────────────┴─────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ PART 3: ЕЖЕДНЕВНАЯ РАБОТА │
│ (будет далее) │
└─────────────────────────────────────────────────────────┘
Принцип каскадности:
- PART 0 = фундамент (понятия и правила)
- PART 1/2 = применение (инициализация проекта)
- PART 3 = работа (цикл разработки)
ZERO (развёрнутая система):
- Система установлена из коробки
- НЕ настроена
- БД не подключена
- Как телефон после распаковки
VANILLA (голый дистрибутив):
- КРИТИЧНО: Vanilla = ВСЕГДА чистая CMS
- Drupal/Laravel/WordPress из коробки
- БД подключена, система работает
- Базовые модули (locale, commerce)
- НЕТ кастомизации
- НЕТ custom кода
- Точка отката при проблемах
WORKING (рабочие версии):
- Версии с изменениями
- v0.1.0, v0.2.0, v1.0.0, ...
- Каждая версия = git tag
- Есть custom код, модули, настройки
СХЕМА:
PATH A (новый проект):
Zero → Vanilla (v0.0.0) → Working (v0.1.0+) → Production (v1.0.0+)
PATH B (онбординг):
Получение → Онбординг (v1.0.0) → Working (v1.1.0+)
↑
НЕ vanilla! Это рабочий проект
PATH A: Создание с нуля
- Нет готового решения
- Выбираем CMS/framework сами
- Создаём Zero → Vanilla → Разработка
- Пример: новый магазин на Drupal
PATH B: Онбординг существующего
- Есть готовое решение
- Заводим на наш сервер
- Получение → Настройка → Работа
- Пример: переезд сайта с другого хостинга
ВАЖНО:
- PATH A даёт Vanilla (чистый дистрибутив)
- PATH B НЕ даёт Vanilla (уже кастомизированный проект)
РАЗНИЦА: "Новая версия" vs "Новый проект"
НОВАЯ ВЕРСИЯ (эволюция проекта):
v0.1.0 → v0.2.0 → v1.0.0 → v1.1.0
↑ ↑ ↑ ↑
Тот же проект, добавляем фичи
Та же CMS, тот же стек
Та же vanilla v0.0.0 в основе
НОВЫЙ ПРОЕКТ (создание с нуля):
Проект А (Drupal 10) → закончен
↓
Проект Б (Drupal 11) → создаём заново
↑
НОВАЯ vanilla v0.0.0
НОВАЯ технология/платформа
НОВЫЙ PATH A (Zero → Vanilla → ...)
Когда создавать НОВЫЙ проект:
- Переход на новую CMS (Drupal 10 → 11)
- Смена технологии (PHP → Node.js)
- Полный редизайн архитектуры
- Создание второго продукта компании
Когда создавать НОВУЮ версию:
- Добавление фичи (модуль, функция)
- Баг-фикс
- Рефакторинг в рамках существующего стека
- Обновление зависимостей БЕЗ смены CMS
Схема: MAJOR.MINOR.PATCH
Правила:
PATH A (новый проект):
v0.0.0 = Vanilla (голый дистрибутив)
v0.1.0 = Первая фича
v0.2.0 = Вторая фича
v0.x.x = Разработка (не в проде)
v1.0.0 = Релиз в production
v1.1.0 = Новая фича в проде
v1.1.1 = Баг-фикс
PATH B (онбординг):
Если есть версия в проекте:
→ Сохранить существующую (v2.3.1)
→ Продолжить нумерацию (v2.3.2, v2.4.0)
Если нет версии:
→ Поставить v1.0.0 (онбординг завершён)
→ Это НЕ vanilla, это рабочий проект
Что менять:
- MAJOR (1.0.0 → 2.0.0): Breaking changes, API изменился
- MINOR (1.0.0 → 1.1.0): Новая фича, модуль
- PATCH (1.0.0 → 1.0.1): Баг-фикс
ПРАВИЛО: Вся информация хранится ОДИН РАЗ в корне. Остальное — ссылки.
Структура:
{project}/
├── .credentials.md ← СКРЫТО: пароли (не в git)
├── .project-config.md ← ОТКРЫТО: параметры (в git)
├── PROJECT.md ← Описание проекта
├── DEVLOG.md ← История разработки
│
└── modules/custom/
├── module1/
│ └── README.md ← Ссылка на ../../.project-config.md
└── module2/
└── CONFIG.md ← Ссылка на ../../.project-config.md
Файл: .credentials.md (НЕ в git)
# CREDENTIALS: {project_name}
## База данных
- Host: localhost
- Database: ${DB_NAME}
- User: ${DB_USER}
- Password: ${DB_PASS}
## CMS Admin
- Username: ${ADMIN_USER}
- Password: ${ADMIN_PASS}
## API ключи
- API_KEY: ${API_KEY}
Файл: .project-config.md (В git)
# PROJECT CONFIG: {project_name}
## Окружение
- CMS: Drupal 11.3.3
- PHP: 8.4
- Database: MySQL 8.0
## Домены
- Production: ${PROD_DOMAIN}
- Staging: ${STAGE_DOMAIN}
## Переменные
DB_NAME=project_db
DB_USER=project_user
ADMIN_USER=admin
PROD_DOMAIN=site.ru
## Credentials
Все пароли см. [.credentials.md](.credentials.md)
Принцип наследования:
КОРЕНЬ ДОЧЕРНИЙ
.project-config.md modules/X/README.md
DB_NAME=site_db ←─ ${DB_NAME}
ИЗМЕНИЛ В КОРНЕ АВТОМАТИЧЕСКИ везде
DB_NAME → new_db ${DB_NAME} → new_db
Правила:
1. Эталон в корне (один раз)
2. Дочерние НЕ копируют (ссылка на ${VAR})
3. Изменение в корне → везде
4. .credentials.md → .gitignore (НЕ в git!)
ПРАВИЛО: В начале работы определить:
1. Режим работы (полный цикл или быстрый)
2. Тип проекта (LEGACY или NEXT)
3. ГДЕ что лежит (runtime и структура)
РЕЖИМ 1: ПОЛНЫЙ ЦИКЛ (DEV → STAGING → PRODUCTION)
Когда использовать:
- E-commerce (деньги!)
- Финансы, банки
- Медицина, персональные данные
- Большая аудитория (>10k пользователей)
- Высокая стоимость ошибки
Окружения:
DEV → разработка
STAGING → точная копия prod, финальные тесты
PRODUCTION → боевой
Правило: STAGING = точная копия PRODUCTION (БД, версии, конфиг)
РЕЖИМ 2: БЫСТРЫЙ ЦИКЛ (DEV → PRODUCTION)
Когда использовать:
- MVP (быстрый старт)
- Внутренние инструменты (<100 пользователей)
- Низкий риск (блоги, контент)
- Нужна скорость релизов
- Малый бюджет
Окружения:
DEV → разработка + ВСЕ тесты
PRODUCTION → релиз + доделка + мониторинг
Правило: На DEV делаем ВСЁ. PROD = только мониторинг и hotfix.
LEGACY (текущий рабочий проект):
Domain: site.ru
Status: production (работает)
Version: v1.x.x
Поддержка: минимальная (только критические баги)
NEXT (переделка с нуля):
Domain: new.site.ru → (после миграции) → site.ru
Status: в разработке
Version: v2.0.0
Цель: заменить LEGACY
Схема миграции:
LEGACY (v1.x.x) NEXT (v2.0.0)
site.ru (работает) DEV → PREVIEW → MIGRATION
↓
После миграции:
site.ru → archive.site.ru
new.site.ru → site.ru (production)
Режим 1 (полный цикл):
| Окружение | Домен | Где лежит |
|---|---|---|
| DEV | localhost или dev.site.ru | Локально или dev-сервер |
| STAGING | stage.site.ru | Продакшн-сервер (отдельная папка) |
| PRODUCTION | site.ru | Продакшн-сервер |
Режим 2 (быстрый цикл):
| Окружение | Домен | Где лежит |
|---|---|---|
| DEV | localhost | Локально |
| PRODUCTION | site.ru | Продакшн-сервер |
ДО МИГРАЦИИ (пока LEGACY работает):
| Окружение | Назначение | Домен | Статус |
|---|---|---|---|
| DEV | Разработка | localhost или dev.new-site.ru | Активная разработка |
| PREVIEW | Предрелиз | new.site.ru | Тестирование, ограниченный доступ |
ПОСЛЕ МИГРАЦИИ:
| Окружение | Домен | Статус |
|---|---|---|
| DEV | localhost или dev.site.ru | Разработка |
| STAGING | stage.site.ru (если режим 1) | Тест |
| PRODUCTION | site.ru | Боевой |
| ARCHIVE | archive.site.ru (старый LEGACY) | Только чтение |
.project-config.md (примеры)Пример 1: LEGACY проект (режим 1)
# PROJECT CONFIG: site
## Тип проекта
- Type: LEGACY
- Version: v1.5.2
- Режим: ПОЛНЫЙ ЦИКЛ (DEV → STAGING → PROD)
## Окружения
### DEV
- Domain: http://localhost:8000
- Path: ~/projects/site/
- DB: site_dev
- Branch: develop
### STAGING
- Domain: http://stage.site.ru/
- Path: /home/user/stage.site.ru/
- DB: stage_db
- Branch: staging
### PRODUCTION
- Domain: http://site.ru/
- Path: /home/user/site.ru/
- DB: site_db
- Branch: main
Пример 2: NEXT проект (переделка с нуля)
# PROJECT CONFIG: site (NEXT v2.0.0)
## Тип проекта
- Type: NEXT (переделка с нуля)
- Legacy: site.ru (v1.x.x, работает)
- Режим: DEV → PREVIEW → MIGRATION
- Migration date: TBD
## Окружения
### DEV (разработка)
- Domain: http://localhost:8000
- Path: ~/projects/site-next/
- DB: site_next_dev
- Branch: develop
- Version: v2.0.0-dev
### PREVIEW (предрелиз, ДО миграции)
- Domain: http://new.site.ru/
- Path: /home/user/new.site.ru/
- DB: site_next_preview
- Branch: main
- Version: v2.0.0-beta
- Access: ограниченный (тестеры, клиенты)
### PRODUCTION (после миграции)
- Domain: http://site.ru/ ← переедет сюда
- Path: /home/user/site.ru/
- DB: site_prod
- Version: v2.0.0
- Status: PLANNED
## Legacy (старый продукт)
- Domain: http://site.ru/ (пока работает)
- Version: v1.5.2
- After migration: → archive.site.ru
Пример 3: Простой проект (режим 2)
# PROJECT CONFIG: internal-tool
## Тип проекта
- Type: LEGACY
- Version: v1.2.0
- Режим: БЫСТРЫЙ ЦИКЛ (DEV → PROD)
## Окружения
### DEV
- Domain: http://localhost:3000
- Path: ~/projects/internal-tool/
- DB: tool_dev
### PRODUCTION
- Domain: http://tool.company.local/
- Path: /var/www/tool/
- DB: tool_prod
РЕЖИМ 1 (полный цикл):
1. DEV (разработка)
→ Пишем код
→ Тестируем локально
→ git commit
→ git push origin develop
2. STAGING (тест)
→ git checkout staging
→ git merge develop
→ bash deploy/deploy-staging.sh
→ Тестируем на stage.site.ru
→ Если OK → готово к production
3. PRODUCTION (релиз)
→ git checkout main
→ git merge staging
→ bash deploy/deploy-production.sh
→ Проверяем site.ru
→ Мониторим логи
РЕЖИМ 2 (быстрый цикл):
1. DEV (разработка + ВСЕ тесты)
→ Пишем код
→ Тестируем ВСЁ локально
→ Авто-тесты, линтеры
→ Готово к релизу
→ git commit
→ git push origin main
2. PRODUCTION (релиз)
→ bash deploy/deploy-production.sh
→ Проверяем site.ru
→ Мониторим логи
→ Hotfix при необходимости
NEXT проект (ДО миграции):
1. DEV (разработка)
→ Пишем код
→ git push origin develop
2. PREVIEW (тестирование)
→ git checkout main
→ git merge develop
→ bash deploy/deploy-preview.sh
→ Тестируем на new.site.ru
→ Собираем feedback
3. MIGRATION (когда готово)
→ Остановить LEGACY (site.ru)
→ Backup LEGACY → archive.site.ru
→ new.site.ru → site.ru
→ Проверить site.ru
→ NEXT стал LEGACY
.credentials.md (для всех окружений)LEGACY проект (режим 1):
# CREDENTIALS: site (LEGACY)
## DEV
- DB: site_dev / devpass123
- Admin: admin / dev123
## STAGING
- DB: stage_db / stagepass456
- Admin: admin / stage456
## PRODUCTION
- DB: site_db / prodpass789
- Admin: admin / PROD_SECURE_PASS
NEXT проект (переделка):
# CREDENTIALS: site (NEXT v2.0.0)
## DEV
- DB: site_next_dev / dev123
- Admin: admin / dev123
## PREVIEW (new.site.ru)
- DB: site_next_preview / preview456
- Admin: admin / preview456
## PRODUCTION (после миграции)
- DB: site_prod / PROD_PASS
- Admin: admin / PROD_ADMIN_PASS
## LEGACY (старый, будет archive)
- DB: site_db / legacy_pass
- Admin: admin / legacy_admin
- After migration: read-only
ПЕРЕД НАЧАЛОМ РАБОТЫ:
□ Определён режим работы (режим 1 или 2)
□ Определён тип проекта (LEGACY или NEXT)
□ Если NEXT: описан LEGACY проект
□ Определены домены для каждого окружения
□ Определены пути на серверах
□ Определены БД для каждого окружения
□ Записано Type в .project-config.md
□ Созданы .env файлы (или config/)
□ Настроены deploy скрипты
□ Проверен доступ к каждому окружению
□ Если NEXT: план миграции описан
□ Записано в DEVLOG.md
→ ОКРУЖЕНИЯ ОПРЕДЕЛЕНЫ, можно работать
.project-config.md — ОБЯЗАТЕЛЬНО указать LEGACY/NEXTПРАВИЛО: Перед изменением — backup. Если сломалось — откат.
Уровни backup:
| Уровень | Что | Когда | Где |
|---|---|---|---|
| L1 Файлы | Модули, код | Перед деплоем | arh/ + timestamp |
| L2 БД | Дамп БД | Перед миграцией | arh/sql/ + timestamp |
| L3 Vanilla | Голый дистрибутив | После установки CMS | ~/backups/vanilla/ |
| L4 Система | Весь проект | Перед большими изменениями | $INFRA/backups/ |
Именование:
{тип}_{дата}_{время}.{ext}
vanilla-20260213-110019.tar.gz ← L3: Голый дистрибутив
modules-before-deploy-20260213-143022.tar.gz ← L1
db-before-migration-20260213-143505.sql.gz ← L2
Когда делать:
- L1: Перед деплоем модулей
- L2: Перед ALTER TABLE, миграцией
- L3: После установки чистой CMS (vanilla)
- L4: Перед рефакторингом архитектуры
См. также: ROLLBACK_POLICY.md
ПРАВИЛО: Откатиться к рабочей версии → повторить. НЕ чинить на месте.
Что считается "ядром" (НЕ ТРОГАТЬ):
| Система | Ядро | Можно менять |
|---|---|---|
| Drupal | core/, vendor/ |
modules/custom/, themes/custom/ |
| Laravel | vendor/, bootstrap/ |
app/, routes/, config/ |
| WordPress | wp-includes/, wp-admin/ |
wp-content/plugins/, themes/ |
| Node.js | node_modules/ |
src/, lib/ |
Если сломалось:
❌ НЕПРАВИЛЬНО:
1. Пытаться чинить core файлы
2. Накручивать workarounds
3. Продолжать если не работает
✅ ПРАВИЛЬНО:
1. ОТКАТ к последнему backup
2. Проверка: "это работает?"
3. Повторить изменение ПО-ДРУГОМУ
См. полный стандарт: ROLLBACK_POLICY.md
ПРАВИЛО: Сделал → проверил → записал → commit. Повторить.
Цикл:
1. СДЕЛАТЬ одно изменение
2. ПРОВЕРИТЬ что работает
3. ЗАПИСАТЬ в DEVLOG.md
4. GIT COMMIT
5. Следующее изменение
Пример:
# 1. СДЕЛАТЬ
drush en commerce -y
# 2. ПРОВЕРИТЬ
drush status | grep commerce
# commerce: enabled ✓
# 3. ЗАПИСАТЬ
echo "[$(date +%Y-%m-%d\ %H:%M)] MODULE: commerce enabled" >> DEVLOG.md
echo " ✓ Модуль включён" >> DEVLOG.md
# 4. GIT COMMIT
git add DEVLOG.md
git commit -m "Setup: module commerce enabled"
ПРАВИЛО: Каждое действие записывается в DEVLOG.md
Формат записи:
[YYYY-MM-DD HH:MM] ДЕЙСТВИЕ: описание
Параметр: значение
✓ Результат
→ Статус
Примеры:
[2026-02-13 03:00] INFRA CHECK: проверка окружения
PHP: 8.4
MySQL: 8.0
✓ Всё установлено
→ ГОТОВО к работе
[2026-02-13 03:05] ZERO: развёртывание Drupal
Версия: 11.3.3
Путь: ~/new.site.ru
✓ Файлы на месте
→ ZERO создан
[2026-02-13 03:15] VANILLA: настройка завершена
URL: http://new.site.ru/
Admin: http://new.site.ru/admin
✓ Сайт работает
→ VANILLA готова
[2026-02-13 03:30] MODULE: commerce enabled
Версия: 2.35
✓ Модуль включён
→ Работает
[2026-02-13 04:00] BACKUP: создан L3
Файл: ~/backups/vanilla/vanilla-20260213-040000.tar.gz
Размер: 45M
✓ Проверен
→ Backup готов
Типы действий:
- INFRA CHECK: проверка инфраструктуры
- ZERO: развёртывание системы
- VANILLA: создание голого дистрибутива
- SETUP: настройка и установка
- MODULE: работа с модулями
- BACKUP: создание backup
- FEATURE: новая функция
- FIX: исправление бага
- DEPLOY: деплой
- ROLLBACK: откат
ПРАВИЛО: Проверил что работает → commit. НЕ раньше.
Формат commit:
{Этап}: {действие}
Этапы:
- Zero: развёртывание системы
- Setup: настройка и установка
- Vanilla: создание эталона
- Feature: новая функция
- Fix: исправление бага
- Refactor: рефакторинг
- Deploy: деплой
- Rollback: откат
Примеры:
git commit -m "Zero: Drupal 11.3.3 deployed"
git commit -m "Setup: database created"
git commit -m "Setup: modules enabled (locale, commerce)"
git commit -m "Vanilla: backup created"
git commit -m "Feature: custom module created"
git commit -m "Fix: form validation error"
git commit -m "Deploy: modules deployed to production"
git commit -m "Rollback: reverted to v0.5.0"
Правило: Один commit = одно логическое изменение
ПРАВИЛО: 3 ошибки подряд → СТОП → откат к backup → другой подход.
Когда откатываться:
- Тест падает 3 раза
- Код не работает после 3 попыток
- Сайт сломался
- Ошибки в логах
КАК:
# 1. СТОП работы
# 2. Найти последний рабочий backup
ls -lt ~/backups/vanilla/
# vanilla-20260213-030000.tar.gz
# 3. Откат файлов
cd ~/
rm -rf broken.site.ru
tar -xzf backups/vanilla/vanilla-20260213-030000.tar.gz
# 4. Откат БД
gunzip < backups/vanilla/vanilla-db.sql.gz | mysql -u user -p db_name
# 5. Проверка
curl -I http://site.ru/
# HTTP/1.1 200 OK ✓
# 6. Записать
echo "[$(date +%Y-%m-%d\ %H:%M)] ROLLBACK: откат к vanilla" >> DEVLOG.md
echo " Причина: сломалась установка модулей" >> DEVLOG.md
echo " Backup: vanilla-20260213-030000.tar.gz" >> DEVLOG.md
echo " ✓ Откат выполнен" >> DEVLOG.md
git add DEVLOG.md
git commit -m "Rollback: reverted to vanilla 20260213-030000"
НЕ ДЕЛАТЬ:
- ❌ Пытаться чинить 10 раз подряд
- ❌ Менять ядро системы
- ❌ Накручивать костыли
ДЕЛАТЬ:
- ✅ Откатиться к рабочей версии
- ✅ Понять в чём проблема
- ✅ Попробовать ДРУГОЙ подход
ПРАВИЛО: Меняешь файл/БД на сервере → READ-MODIFY-WRITE. НИКОГДА слепая перезапись.
Проблема:
# ❌ ОПАСНО (слепая перезапись)
echo "new_setting=1" > /etc/config.conf
# ← СТИРАЕТ ВСЁ остальное!
# ❌ ОПАСНО (UPDATE без WHERE)
UPDATE products SET price=0;
# ← ОБНУЛЯЕТ ВСЕ цены!
Решение: Паттерн READ → BACKUP → MODIFY → VERIFY
1. READ BEFORE WRITE (прочитать перед записью)
Непонятно что там → СНАЧАЛА ПРОЧИТАТЬ
# ❌ НЕПРАВИЛЬНО
echo "server_name site.ru;" >> /etc/nginx/site.conf
# ✅ ПРАВИЛЬНО
cat /etc/nginx/site.conf # сначала смотрим
# Понимаем структуру
# ПОТОМ вносим изменение
sed -i 's/old_value/new_value/' /etc/nginx/site.conf
-- ❌ НЕПРАВИЛЬНО
UPDATE products SET category_id=5 WHERE sku='ABC123';
-- ✅ ПРАВИЛЬНО
SELECT * FROM products WHERE sku='ABC123'; -- сначала смотрим
-- Видим текущее состояние
-- ПОТОМ обновляем
UPDATE products SET category_id=5 WHERE sku='ABC123';
2. BACKUP BEFORE CHANGE (бэкап перед изменением)
Любое изменение → СНАЧАЛА БЭКАП
# Файлы: всегда с timestamp
cp /path/to/file /path/to/file.bak-$(date +%Y%m%d-%H%M%S)
-- БД: backup строк
CREATE TABLE tablename_backup_20260213_143500
AS SELECT * FROM tablename WHERE condition;
3. SPECIFIC NOT GLOBAL (конкретное, не глобальное)
Изменяй КОНКРЕТНОЕ, НЕ ВСЁ
# ❌ ГЛОБАЛЬНО (опасно)
echo "new" > file.txt # перезаписывает ВСЁ
# ✅ КОНКРЕТНО (безопасно)
sed -i 's/^old_line$/new_line/' file.txt # меняет ОДНУ строку
-- ❌ ГЛОБАЛЬНО (опасно)
UPDATE users SET active=0; -- меняет ВСЕ записи
-- ✅ КОНКРЕТНО (безопасно)
UPDATE users SET active=0 WHERE last_login < '2024-01-01';
4. VERIFY AFTER CHANGE (проверить после изменения)
Изменил → ПРОВЕРЬ результат
# 1. Изменение
sed -i 's/listen 80/listen 8080/' nginx.conf
# 2. Проверка содержимого
grep "listen" nginx.conf
# listen 8080; ✓
# 3. Проверка синтаксиса
nginx -t
# syntax is ok ✓
# 4. Проверка работы
systemctl reload nginx
curl -I http://localhost:8080
# HTTP/1.1 200 OK ✓
-- 1. Изменение
UPDATE products SET price=price*1.1 WHERE category_id=5;
-- Query OK, 42 rows affected
-- 2. Проверка результата
SELECT COUNT(*), AVG(price), MIN(price), MAX(price)
FROM products WHERE category_id=5;
-- Проверить разумность цен ✓
-- 3. Проверка конкретной записи
SELECT * FROM products WHERE category_id=5 LIMIT 5;
5. ATOMIC OPERATIONS (атомарность)
Операция = атомарная (всё или ничего)
-- Транзакции
START TRANSACTION;
UPDATE accounts SET balance=balance-100 WHERE id=1;
UPDATE accounts SET balance=balance+100 WHERE id=2;
-- Проверить
SELECT balance FROM accounts WHERE id IN (1,2);
-- Если OK → зафиксировать
COMMIT;
-- Если НЕ OK → откатить
-- ROLLBACK;
# Файлы: write to temp → rename (атомарная замена)
cat > /tmp/config.new << 'EOF'
new_content
EOF
# Проверить
cat /tmp/config.new
# Атомарная замена (одна операция)
mv /tmp/config.new /etc/config.conf
6. ROLLBACK PLAN READY (план отката готов)
Перед изменением → ЗНАТЬ как откатить
ПЕРЕД ИЗМЕНЕНИЕМ:
□ Есть backup?
□ Знаю команду rollback?
□ Проверил backup (можно восстановить)?
□ Записал что изменяю (в DEVLOG)?
ЕСЛИ ВСЁ ✓ → делать изменение
ЕСЛИ ЧТО-ТО ✗ → СТОП, сначала подготовить
┌─────────────────────────────────────────────┐
│ ЛЮБОЕ ИЗМЕНЕНИЕ НА УДАЛЁННОМ СЕРВЕРЕ/БД │
└─────────────────────────────────────────────┘
↓
┌──────────────────────┐
│ 1. READ (прочитать) │
│ - Что там сейчас? │
│ - Понятна структура? │
└──────────────────────┘
↓
┌──────────────────────┐
│ 2. BACKUP (сохранить)│
│ - Файл: .bak-DATE │
│ - БД: backup таблица │
└──────────────────────┘
↓
┌──────────────────────┐
│ 3. MODIFY (изменить) │
│ - Конкретное место │
│ - НЕ всё подряд │
└──────────────────────┘
↓
┌──────────────────────┐
│ 4. VERIFY (проверить)│
│ - Прочитать результат│
│ - Тест (syntax/logic)│
└──────────────────────┘
↓
┌─────────┐
│ OK? │
└─────────┘
/ \
ДА / \ НЕТ
↓ ↓
┌──────────────┐ ┌──────────────┐
│ 5. COMMIT │ │ ROLLBACK │
│ - Применить │ │ - Откатить │
│ - Записать │ │ - Из backup │
└──────────────┘ └──────────────┘
Пример 1: Изменение nginx конфига
# 1. READ
ssh server "cat /etc/nginx/sites-available/site.conf" > site.conf.current
cat site.conf.current # изучаем
# 2. BACKUP на сервере
ssh server "cp /etc/nginx/sites-available/site.conf \
/etc/nginx/sites-available/site.conf.bak-$(date +%Y%m%d-%H%M%S)"
# 3. MODIFY (локально)
cp site.conf.current site.conf.new
vim site.conf.new # редактируем
# 4. VERIFY (локально)
docker run --rm -v $(pwd):/etc/nginx nginx nginx -t -c /etc/nginx/site.conf.new
# syntax is ok ✓
# 5. UPLOAD
scp site.conf.new server:/tmp/site.conf.new
# 6. ATOMIC REPLACE
ssh server "sudo mv /tmp/site.conf.new /etc/nginx/sites-available/site.conf"
# 7. VERIFY на сервере
ssh server "nginx -t"
# syntax is ok ✓
# 8. COMMIT
ssh server "systemctl reload nginx"
# 9. CHECK
curl -I https://site.ru
# HTTP/1.1 200 OK ✓
# ROLLBACK (если что-то не так):
# ssh server "cp /etc/nginx/sites-available/site.conf.bak-DATE \
# /etc/nginx/sites-available/site.conf && \
# systemctl reload nginx"
Пример 2: UPDATE в БД
-- 1. READ (сколько затронем?)
SELECT COUNT(*) FROM products WHERE sku LIKE 'ABC%';
-- 5000 rows! ← СТОП, это много!
-- Уточняем
SELECT COUNT(*) FROM products WHERE sku='ABC-123';
-- 1 row ✓
-- 2. BACKUP
CREATE TABLE products_backup_20260213_143500
AS SELECT * FROM products WHERE sku='ABC-123';
-- 3. MODIFY
UPDATE products
SET price=999.99
WHERE sku='ABC-123';
-- Query OK, 1 row affected ✓
-- 4. VERIFY
SELECT sku, price FROM products WHERE sku='ABC-123';
-- sku='ABC-123', price=999.99 ✓
-- ROLLBACK (если ошибка):
-- UPDATE products p
-- SET price=(SELECT price FROM products_backup_20260213_143500 b
-- WHERE b.id=p.id)
-- WHERE sku='ABC-123';
Пример 3: Массовое удаление
# 1. READ (что удалим?)
find /var/log -name "*.log" -mtime +30
# /var/log/old1.log
# /var/log/old2.log
# 2. BACKUP
mkdir -p /var/log/archive-$(date +%Y%m%d)
find /var/log -name "*.log" -mtime +30 \
-exec cp {} /var/log/archive-$(date +%Y%m%d)/ \;
# 3. VERIFY backup
ls -lh /var/log/archive-$(date +%Y%m%d)/
# old1.log ✓
# old2.log ✓
# 4. DELETE
find /var/log -name "*.log" -mtime +30 -delete
# 5. VERIFY
ls -lh /var/log/*.log
# Только свежие логи ✓
ПЕРЕД ИЗМЕНЕНИЕМ НА СЕРВЕРЕ/БД:
□ 1. READ: Прочитал текущее состояние?
□ 2. UNDERSTAND: Понял что там и как устроено?
□ 3. BACKUP: Создал backup (файл.bak или backup таблица)?
□ 4. SPECIFIC: Изменяю КОНКРЕТНОЕ, не всё подряд?
□ 5. WHERE: Есть WHERE в UPDATE? Проверил COUNT(*)?
□ 6. PLAN: Знаю команду rollback?
□ 7. VERIFY: Буду проверять результат?
□ 8. LOG: Запишу в DEVLOG что изменил?
ЕСЛИ ВСЁ ✓ → делать изменение
ЕСЛИ ЧТО-ТО ✗ → СТОП, доделать подготовку
ПРАВИЛА:
ПРАВИЛО: Перед ЛЮБЫМ проектом — сначала проверить окружение.
ДВА СЛУЧАЯ:
СЛУЧАЙ A: Создание нового (PATH A)
# 1. Проверить выбранный стек
php -v
# PHP 8.4 ✓
mysql --version
# MySQL 8.0 ✓
nginx -v
# nginx/1.24 ✓
# 2. Проверить место на диске
df -h /
# 45GB available ✓
# 3. Тестовая страница
echo "<?php phpinfo();" > /var/www/test.php
curl http://localhost/test.php
# PHP Version 8.4 ✓
# 4. Записать
echo "[$(date +%Y-%m-%d\ %H:%M)] INFRA CHECK (PATH A)" >> DEVLOG.md
echo " PHP: 8.4" >> DEVLOG.md
echo " MySQL: 8.0" >> DEVLOG.md
echo " nginx: 1.24" >> DEVLOG.md
echo " Диск: 45GB" >> DEVLOG.md
echo " ✓ Всё установлено" >> DEVLOG.md
echo " → ГОТОВО для нового проекта" >> DEVLOG.md
СЛУЧАЙ B: Онбординг существующего (PATH B)
# 1. Узнать требования ПРОЕКТА
cat composer.json | grep "php"
# "php": ">=8.1"
cat composer.json | grep "drupal/core"
# "drupal/core": "^10.2"
# 2. Проверить НАШ стек
php -v
# PHP 8.4 ✓ (>= 8.1)
# 3. Сверить
echo "[$(date +%Y-%m-%d\ %H:%M)] INFRA CHECK (PATH B)" >> DEVLOG.md
echo " Требуется: PHP >=8.1, Drupal 10.2" >> DEVLOG.md
echo " Есть: PHP 8.4, MySQL 8.0" >> DEVLOG.md
echo " ✓ Совместимость подтверждена" >> DEVLOG.md
echo " → ГОТОВО для онбординга" >> DEVLOG.md
ЕСЛИ НЕ СОВПАДАЕТ:
# СТОП! Сначала исправить инфру
# Проект требует PHP 7.4, у нас 8.4? → Установить PHP 7.4
# НЕ пытаться "подогнать" проект под инфру
Чеклист:
□ Версии софта проверены
□ База данных доступна
□ Веб-сервер настроен
□ Права доступа корректны
□ Тестовая страница работает
□ Место на диске достаточно
□ Всё записано в DEVLOG.md
✓ ВСЁ → Можно создавать проект
✗ ЧТО-ТО → СТОП, исправить инфру
ЦЕЛЬ: Из "ничего" создать Vanilla (голый дистрибутив), готовый к разработке.
ЭТАПЫ:
НИЧЕГО → Zero → Vanilla (v0.0.0) → Backup L3 → Готово к разработке
→ См. раздел 0.0 Проверка инфраструктуры
Особенность PATH A:
- Мы сами выбираем стек (PHP 8.4, MySQL 8.0, nginx)
- Проверяем что выбранный стек установлен
Результат:
[2026-02-13 03:00] INFRA CHECK (PATH A)
✓ PHP 8.4
✓ MySQL 8.0
✓ nginx 1.24
✓ Диск: 45GB
→ ГОТОВО для нового проекта
ЧТО: Развернуть систему из коробки (Drupal/Laravel/WordPress).
Пример: Drupal 11
# 1. Развернуть
cd ~/
composer create-project drupal/recommended-project new.site.ru
cd new.site.ru
# 2. Проверить
ls -la
# composer.json, web/, vendor/ ✓
# 3. Записать
echo "[$(date +%Y-%m-%d\ %H:%M)] ZERO: Drupal deployed" >> DEVLOG.md
echo " Версия: 11.3.3" >> DEVLOG.md
echo " Путь: ~/new.site.ru" >> DEVLOG.md
echo " ✓ Файлы на месте" >> DEVLOG.md
echo " → ZERO создан" >> DEVLOG.md
# 4. Git commit
git init
git add .
git commit -m "Zero: Drupal 11.3.3 deployed"
Проверка Zero:
curl -I http://new.site.ru/
# Редирект на /install ✓ (ожидаемо, БД не подключена)
ЧТО: Настроить систему до голого дистрибутива.
Шаг 1: БД
mysql -u root -p
CREATE DATABASE site_db;
CREATE USER 'site_user'@'localhost' IDENTIFIED BY 'SecurePass123';
GRANT ALL ON site_db.* TO 'site_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
echo "[$(date +%Y-%m-%d\ %H:%M)] SETUP: database created" >> DEVLOG.md
git add DEVLOG.md
git commit -m "Setup: database created"
Шаг 2: Установка
cd web
php core/scripts/drupal install standard \
--db-url=mysql://site_user:SecurePass123@localhost/site_db \
--site-name="New Site" \
--account-name=admin \
--account-pass=Admin123!
curl -I http://new.site.ru/
# HTTP/1.1 200 OK ✓
echo "[$(date +%Y-%m-%d\ %H:%M)] SETUP: Drupal installed" >> ../DEVLOG.md
cd ..
git add sites/default/settings.php DEVLOG.md
git commit -m "Setup: Drupal installed"
Шаг 3: Базовые модули (ТОЛЬКО из коробки)
drush en locale -y
echo "[$(date +%Y-%m-%d\ %H:%M)] SETUP: module locale enabled" >> DEVLOG.md
git add DEVLOG.md
git commit -m "Setup: module locale enabled"
ВАЖНО:
- Только модули из коробки (locale, но НЕ commerce)
- НЕТ custom кода
- НЕТ contrib модулей (пока)
- Vanilla = ГОЛЫЙ ДИСТРИБУТИВ
Проверка Vanilla:
curl -s http://new.site.ru/ | head
# Главная страница ✓
curl -I http://new.site.ru/admin
# HTTP/1.1 200 OK ✓
Записать:
[2026-02-13 03:15] VANILLA: готов голый дистрибутив
✓ Сайт: http://new.site.ru/
✓ Админка: http://new.site.ru/admin
✓ Логин: admin / Admin123!
✓ Модули: ТОЛЬКО locale (из коробки)
✓ НЕТ custom кода
✓ НЕТ contrib модулей
→ VANILLA (голый дистрибутив) готов
Git: commit abc123 "Setup: module locale enabled"
ЧТО: Создать .credentials.md и .project-config.md
→ См. раздел 0.4 Эталонные данные в корне
Файл: .credentials.md
# CREDENTIALS: new.site.ru
## База данных
- Host: localhost
- Database: site_db
- User: site_user
- Password: SecurePass123
## Drupal Admin
- Username: admin
- Password: Admin123!
Файл: .project-config.md
# PROJECT CONFIG: new.site.ru
## Окружение
- CMS: Drupal 11.3.3
- PHP: 8.4
- Database: MySQL 8.0
## Переменные
DB_NAME=site_db
DB_USER=site_user
ADMIN_USER=admin
## Credentials
Все пароли см. [.credentials.md](.credentials.md)
Git:
echo ".credentials.md" >> .gitignore
git add .gitignore .project-config.md DEVLOG.md
git commit -m "Setup: project config created"
Уровень: L3 (см. раздел 0.6 Контрольные точки)
ЧТО: Сохранить голый дистрибутив для отката.
# 1. Backup файлов
cd ~/
tar -czf vanilla-$(date +%Y%m%d-%H%M%S).tar.gz new.site.ru/
# 2. Backup БД
mysqldump -u site_user -pSecurePass123 site_db | gzip > vanilla-db.sql.gz
# 3. Сохранить
mkdir -p ~/backups/vanilla
mv vanilla-*.tar.gz ~/backups/vanilla/
mv vanilla-db.sql.gz ~/backups/vanilla/
# 4. Записать
echo "[$(date +%Y-%m-%d\ %H:%M)] BACKUP: L3 vanilla created" >> new.site.ru/DEVLOG.md
echo " Файлы: ~/backups/vanilla/vanilla-20260213-032000.tar.gz" >> new.site.ru/DEVLOG.md
echo " БД: ~/backups/vanilla/vanilla-db.sql.gz" >> new.site.ru/DEVLOG.md
echo " Размер: 45M" >> new.site.ru/DEVLOG.md
echo " ✓ Проверен" >> new.site.ru/DEVLOG.md
echo " → Backup L3 готов" >> new.site.ru/DEVLOG.md
cd new.site.ru
git add DEVLOG.md
git commit -m "Vanilla: backup L3 created"
ЧТО: Отметить голый дистрибутив как v0.0.0
git tag -a v0.0.0 -m "Vanilla: clean Drupal 11.3.3"
echo "" >> DEVLOG.md
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> DEVLOG.md
echo "[$(date +%Y-%m-%d\ %H:%M)] VERSION: v0.0.0 (Vanilla)" >> DEVLOG.md
echo " Состояние: Голый дистрибутив Drupal 11.3.3" >> DEVLOG.md
echo " Модули: locale (из коробки)" >> DEVLOG.md
echo " Custom код: НЕТ" >> DEVLOG.md
echo " Contrib модули: НЕТ" >> DEVLOG.md
echo " ✓ Готово к разработке" >> DEVLOG.md
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> DEVLOG.md
git add DEVLOG.md
git commit -m "Vanilla: version v0.0.0 tagged"
СОЗДАНИЕ НОВОГО ПРОЕКТА:
□ 1.1 Проверка инфраструктуры (→ 0.0)
✓ Стек выбран и установлен
□ 1.2 Zero
✓ Система развёрнута
✓ git commit "Zero"
□ 1.3 Vanilla
✓ БД подключена
✓ Система установлена
✓ Базовые модули (из коробки)
✓ НЕТ custom кода
✓ НЕТ contrib
✓ git commit каждый шаг
□ 1.4 Эталонные данные (→ 0.4)
✓ .credentials.md
✓ .project-config.md
✓ git commit
□ 1.5 Backup L3
✓ tar.gz + sql.gz
✓ Проверен
✓ git commit
□ 1.6 Версия v0.0.0
✓ git tag v0.0.0
✓ Записано в DEVLOG
→ VANILLA (голый дистрибутив) ГОТОВ
→ Можно разрабатывать (v0.1.0+)
ЦЕЛЬ: Завести готовый проект на наш сервер и подготовить к работе.
ВАЖНО: Онбординг НЕ даёт Vanilla. Vanilla = только голый дистрибутив.
ЭТАПЫ:
Получение → Анализ → Развёртывание → Онбординг (v1.0.0) → Backup → Работа
→ См. раздел 0.0 Проверка инфраструктуры
Особенность PATH B:
- Проект диктует требования
- Мы подстраиваем инфру под проект (НЕ наоборот!)
Пример:
# Узнать требования
cat composer.json | grep "php"
# "php": ">=8.1"
# Проверить наш стек
php -v
# PHP 8.4 ✓ (>= 8.1)
# Записать
echo "[$(date +%Y-%m-%d\ %H:%M)] INFRA CHECK (PATH B)" >> DEVLOG.md
echo " Требуется: PHP >=8.1" >> DEVLOG.md
echo " Есть: PHP 8.4" >> DEVLOG.md
echo " ✓ Совместимо" >> DEVLOG.md
echo " → ГОТОВО для онбординга" >> DEVLOG.md
Способы:
A) Git clone:
git clone https://github.com/user/project.git existing-project
cd existing-project
echo "[$(date +%Y-%m-%d\ %H:%M)] PROJECT: cloned from git" >> DEVLOG.md
echo " Source: https://github.com/user/project.git" >> DEVLOG.md
echo " Commit: $(git rev-parse HEAD)" >> DEVLOG.md
B) Копирование:
scp user@old-server:/var/www/project.tar.gz ~/
tar -xzf project.tar.gz
mv project existing-project
echo "[$(date +%Y-%m-%d\ %H:%M)] PROJECT: copied from server" >> existing-project/DEVLOG.md
echo " Source: user@old-server:/var/www/project" >> existing-project/DEVLOG.md
ЧТО узнать:
- CMS/Framework?
- Зависимости?
- Модули?
- Конфиги?
cd ~/existing-project
# Тип
ls -la
# composer.json → PHP (Drupal/Laravel)
# Зависимости
cat composer.json | grep -A 20 "require"
# Создать документ анализа
cat > ANALYSIS.md << 'EOF'
# PROJECT ANALYSIS
## Тип
- CMS: Drupal 10.2
- PHP: >=8.1
## Модули (contrib)
- commerce: 2.35
- token
- pathauto
## Модули (custom)
- custom_shop
- custom_sync
## База данных
- Дамп: dump.sql (150MB)
## Документация
- README.md (минимальная)
EOF
git add ANALYSIS.md DEVLOG.md
git commit -m "Setup: project analysis completed"
ПРАВИЛО: ВСЕГДА сначала тест, НИКОГДА сразу прод.
# 1. Зависимости
composer install --no-dev
echo "[$(date +%Y-%m-%d\ %H:%M)] SETUP: dependencies installed" >> DEVLOG.md
git add composer.lock DEVLOG.md
git commit -m "Setup: dependencies installed"
# 2. БД
mysql -u root -p
CREATE DATABASE existing_db;
CREATE USER 'existing_user'@'localhost' IDENTIFIED BY 'Pass456';
GRANT ALL ON existing_db.* TO 'existing_user'@'localhost';
EXIT;
mysql -u existing_user -pPass456 existing_db < dump.sql
echo "[$(date +%Y-%m-%d\ %H:%M)] SETUP: database imported" >> DEVLOG.md
git add DEVLOG.md
git commit -m "Setup: database imported"
# 3. Конфиг БД
vim sites/default/settings.php
# Прописать $databases
echo "[$(date +%Y-%m-%d\ %H:%M)] SETUP: database configured" >> DEVLOG.md
git add sites/default/settings.php DEVLOG.md
git commit -m "Setup: database configured"
# 4. Nginx
sudo vim /etc/nginx/sites-available/test.existing.ru
sudo nginx -t
sudo systemctl reload nginx
echo "[$(date +%Y-%m-%d\ %H:%M)] SETUP: web server configured" >> DEVLOG.md
Проверка:
curl -I http://test.existing.ru/
# HTTP/1.1 200 OK ✓
drush status
# Drupal: 10.2.8 ✓
# Database: Connected ✓
Записать:
[2026-02-13 03:45] SETUP: deployment completed
✓ Сайт: http://test.existing.ru/
✓ Админка: http://test.existing.ru/admin
✓ БД подключена
✓ Модули работают
→ Проект развёрнут на тесте
→ См. раздел 0.4 Эталонные данные в корне
Файл: .credentials.md
# CREDENTIALS: existing-project
## База данных
- Host: localhost
- Database: existing_db
- User: existing_user
- Password: Pass456
## Drupal Admin
- Username: admin
- Password: [см. старый сервер]
## Источник (справка)
- Старый сервер: old-server.com
- Старый путь: /var/www/project
Файл: .project-config.md
# PROJECT CONFIG: existing-project
## Источник
- Клонирован: 2026-02-13
- Старый сервер: old-server.com (справка)
## Окружение
- CMS: Drupal 10.2.8
- PHP: 8.4
- Database: MySQL 8.0
## Домены
- Test: http://test.existing.ru/
- Production: [будет позже]
## Переменные
DB_NAME=existing_db
DB_USER=existing_user
echo ".credentials.md" >> .gitignore
git add .gitignore .project-config.md DEVLOG.md
git commit -m "Setup: project config created"
# Кеш
drush cr
# Временные файлы
find . -name "*.log" -delete
rm -rf sites/default/files/tmp/*
# Проверка
curl -I http://test.existing.ru/
# HTTP/1.1 200 OK ✓
echo "[$(date +%Y-%m-%d\ %H:%M)] SETUP: cleanup completed" >> DEVLOG.md
git add -A
git commit -m "Setup: cleanup completed"
Уровень: L4 (весь проект, см. раздел 0.6)
ВАЖНО: Это НЕ vanilla backup! Это backup рабочего проекта после онбординга.
cd ~/
tar -czf onboarding-$(date +%Y%m%d-%H%M%S).tar.gz existing-project/
mysqldump -u existing_user -pPass456 existing_db | gzip > onboarding-db.sql.gz
mkdir -p ~/backups/onboarding
mv onboarding-*.tar.gz ~/backups/onboarding/
mv onboarding-db.sql.gz ~/backups/onboarding/
echo "[$(date +%Y-%m-%d\ %H:%M)] BACKUP: L4 onboarding completed" >> existing-project/DEVLOG.md
echo " Файлы: ~/backups/onboarding/onboarding-20260213-035500.tar.gz" >> existing-project/DEVLOG.md
echo " БД: ~/backups/onboarding/onboarding-db.sql.gz" >> existing-project/DEVLOG.md
echo " ✓ НЕ vanilla (рабочий проект)" >> existing-project/DEVLOG.md
echo " → Backup L4 готов" >> existing-project/DEVLOG.md
cd existing-project
git add DEVLOG.md
git commit -m "Setup: backup L4 (onboarding) created"
ЕСЛИ есть версия в проекте:
git tag
# v2.3.1 ← сохраняем существующую
echo "[$(date +%Y-%m-%d\ %H:%M)] VERSION: onboarding at v2.3.1" >> DEVLOG.md
echo " Онбординг завершён" >> DEVLOG.md
echo " Версия проекта сохранена" >> DEVLOG.md
ЕСЛИ НЕТ версии:
git tag -a v1.0.0 -m "Onboarding: project ready for work"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> DEVLOG.md
echo "[$(date +%Y-%m-%d\ %H:%M)] VERSION: v1.0.0 (Onboarding)" >> DEVLOG.md
echo " Состояние: Онбординг завершён" >> DEVLOG.md
echo " НЕ vanilla (рабочий проект)" >> DEVLOG.md
echo " Test: http://test.existing.ru/" >> DEVLOG.md
echo " ✓ Готово к работе" >> DEVLOG.md
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> DEVLOG.md
git add DEVLOG.md
git commit -m "Setup: version v1.0.0 (onboarding completed)"
ОНБОРДИНГ СУЩЕСТВУЮЩЕГО ПРОЕКТА:
□ 2.1 Проверка инфраструктуры (→ 0.0)
✓ Требования проекта известны
✓ Наш стек совместим
□ 2.2 Получение
✓ Git clone / scp
✓ Дамп БД получен
□ 2.3 Анализ
✓ ANALYSIS.md создан
✓ Зависимости известны
□ 2.4 Развёртывание на тесте
✓ composer install
✓ БД импортирована
✓ Конфиг настроен
✓ Сайт работает
✓ git commit каждый шаг
□ 2.5 Эталонные данные (→ 0.4)
✓ .credentials.md
✓ .project-config.md
✓ git commit
□ 2.6 Очистка
✓ Кеш, временные файлы
✓ Проверка
□ 2.7 Backup L4
✓ tar.gz + sql.gz
✓ НЕ vanilla (рабочий проект)
✓ git commit
□ 2.8 Версия
✓ Сохранена существующая ИЛИ v1.0.0
✓ Записано в DEVLOG
→ ОНБОРДИНГ ЗАВЕРШЁН
→ Можно работать (v1.1.0+)
TODO: Будет добавлено позже.
Версия: 1.3.0
Дата: 2026-02-13