OVHserver/.claude/workflow.md
SamoilenkoVadym 972003dba2 feat: add /mnt folder to Syncthing sync
Added /mnt folder synchronization for backups (6.8GB) and PostgreSQL data. Updated documentation in README.md, .claude/workflow.md and .gitignore to exclude large backup files.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-05 16:52:52 +00:00

9.3 KiB
Raw Blame History

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:

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

# На Mac:
brew services list | grep syncthing

Git:

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

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

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

Размер синхронизированных данных:

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 или отдельное хранилище

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

# Проверить синхронизацию 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)