# Claude Code Workflow для OVHserver

## Общая архитектура проекта

Этот проект использует **трёхуровневую систему синхронизации и бэкапа**:

### 1. Syncthing (Синхронизация в реальном времени)
- **Назначение:** Мгновенная двусторонняя синхронизация между Mac и сервером
- **Режим:** Send & Receive (bidirectional)
- **Синхронизируемые папки:**
  - `/opt` (сервер) ↔ `/Volumes/SSD/Aimpress_Cloud_Prod/opt` (Mac)
  - `/data` (сервер) ↔ `/Volumes/SSD/Aimpress_Cloud_Prod/data` (Mac)
  - `/home/ubuntu` (сервер) ↔ `/Volumes/SSD/Aimpress_Cloud_Prod/home` (Mac)
  - `/mnt` (сервер) ↔ `/Volumes/SSD/Aimpress_Cloud_Prod/mnt` (Mac) - бэкапы и PostgreSQL данные
- **Автозапуск:** Да, через systemd (сервер) и brew services (Mac)

### 2. GitHub (Версионный контроль)
- **Репозиторий:** git@github.com:SamoilenkoVadym/OVHserver.git
- **Что хранится:** Весь код из `/opt`, конфигурации, документация
- **Исключения:** См. `.gitignore` - логи, секреты, бэкапы, зависимости

### 3. rsync (Полный системный бэкап)
- **Назначение:** Полная копия системы для восстановления
- **Запуск:** По требованию через скрипт
- **Место хранения:** `/Volumes/SSD/Aimpress_Cloud_Prod/system-backup/`

---

## Как я (Claude) работаю с проектом

### ⚠️ ВАЖНО: Пользователь работает ТОЛЬКО через меня
- Все изменения в проект вносятся через меня
- Я работаю с **локальными файлами** на Mac
- После моих изменений Syncthing автоматически синхронизирует их на сервер (10-30 сек)

### Процесс работы:

```
1. Пользователь: "Claude, добавь функцию X"
   ↓
2. Я читаю локальные файлы из /Volumes/SSD/Aimpress_Cloud_Prod/opt
   ↓
3. Я вношу изменения в файлы
   ↓
4. Syncthing: Автоматически синхронизирует на сервер (10-30 сек)
   ↓
5. Я делаю git commit с осмысленным сообщением:
   "feat: add authentication module with JWT"
   ↓
6. Git hook: Автоматически выполняет git push в GitHub
```

### Когда делать git commit:

✅ **ВСЕГДА делаю commit после каждого значимого изменения:**
- Добавлена новая функция → `feat: <description>`
- Исправлен баг → `fix: <description>`
- Рефакторинг кода → `refactor: <description>`
- Обновлена документация → `docs: <description>`
- Изменена конфигурация → `chore: update <config name>`
- Улучшена производительность → `perf: <description>`

✅ **Формат сообщений коммита:**
```
<type>: <short description>

<detailed explanation if needed>

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
```

❌ **НЕ коммичу:**
- Временные файлы (они в .gitignore)
- Логи (они в .gitignore)
- Секреты типа .env, .key (они в .gitignore + pre-commit hook блокирует)
- Незавершенные изменения (только работающий код)

---

## Git Hooks

### pre-commit
- **Проверяет:** Наличие секретов в коммите (.env, .key, .pem файлы)
- **Действие:** Блокирует коммит если найдены секреты

### post-commit
- **Действие:** Автоматически пушит каждый коммит в GitHub
- **Ветка:** main или master

---

## Структура проекта

```
/Volumes/SSD/Aimpress_Cloud_Prod/
├── opt/                          # Основные проекты и приложения
│   ├── 00-infrastructure/        # Инфраструктура (vault, nginx, etc.)
│   ├── 01-security/              # Безопасность
│   ├── 02-core/                  # Ядро системы
│   ├── 03-business/              # Бизнес-логика
│   ├── 04-tools/                 # Утилиты и инструменты
│   ├── 05-backups/               # Бэкапы (исключены из Git)
│   └── 06-webflow/               # Webflow интеграция
├── data/                         # Данные приложений
├── home/                         # Пользовательские файлы ubuntu
├── .git/                         # Git репозиторий
├── .gitignore                    # Исключения для Git
├── .claude/                      # Документация для Claude
│   ├── workflow.md              # Этот файл
│   └── project-structure.md     # Детальная структура проекта
└── README.md                     # Общая информация

На сервере:
/opt/                             # Синхронизировано с Mac
/data/                            # Синхронизировано с Mac
/home/ubuntu/                     # Синхронизировано с Mac
```

---

## Проверка состояния систем

### Syncthing:
```bash
# На сервере:
ssh ubuntu@51.89.231.46 "systemctl --user status syncthing"

# На Mac:
brew services list | grep syncthing
```

### Git:
```bash
# Проверить статус:
git status

# Проверить последние коммиты:
git log --oneline -10

# Проверить remote:
git remote -v
```

### Размер синхронизированных данных:
```bash
du -sh /Volumes/SSD/Aimpress_Cloud_Prod/{opt,data,home,mnt}
```

---

## Типичные задачи

### Добавить новую функцию:
1. Читаю существующий код
2. Вношу изменения
3. Жду синхронизации (10-30 сек)
4. Делаю коммит: `git commit -m "feat: add new feature"`
5. Push происходит автоматически через hook

### Исправить баг:
1. Нахожу проблемный код
2. Исправляю
3. Жду синхронизации
4. Коммит: `git commit -m "fix: resolve issue with X"`

### Обновить конфигурацию:
1. Изменяю конфиг файл
2. Жду синхронизации
3. Коммит: `git commit -m "chore: update nginx config"`

### Создать документацию:
1. Создаю .md файл
2. Коммит: `git commit -m "docs: add API documentation"`

---

## Важные замечания

⚠️ **Права доступа:**
- Некоторые файлы на сервере принадлежат root (например vault/data)
- Syncthing может не иметь прав на их чтение
- Это нормально, игнорируем эти файлы через .stignore

⚠️ **Большие файлы:**
- Бэкапы из `/opt/05-backups/` исключены из Git
- Логи не синхронизируются (в .stignore)
- SQL дампы и архивы не коммитятся

⚠️ **Секреты:**
- .env файлы в .gitignore
- pre-commit hook блокирует коммит секретов
- Если нужно - использую vault или отдельное хранилище

---

## Полезные команды

```bash
# Проверить синхронизацию Syncthing
syncthing cli show system

# Посмотреть что синхронизируется
du -sh /Volumes/SSD/Aimpress_Cloud_Prod/*

# Проверить Git статус
git status

# Посмотреть последние изменения
git log --oneline -20

# Создать коммит вручную (если нужно)
git add .
git commit -m "type: description"
# Push произойдет автоматически

# Проверить что на сервере
ssh ubuntu@51.89.231.46 "ls -la /opt"
```

---

## В следующих сессиях

Когда я (Claude) начинаю новую сессию:
1. Читаю этот файл (.claude/workflow.md)
2. Понимаю что проект работает через Syncthing + Git
3. Работаю с локальными файлами
4. Делаю коммиты после каждого изменения
5. Не спрашиваю пользователя о workflow - он задокументирован здесь

Этот workflow обеспечивает:
✅ Мгновенную синхронизацию изменений
✅ Полную историю версий в Git
✅ Автоматический бэкап в GitHub
✅ Безопасность (pre-commit hooks)
✅ Возможность восстановления системы (через rsync)
