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>
9.3 KiB
9.3 KiB
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}
Типичные задачи
Добавить новую функцию:
- Читаю существующий код
- Вношу изменения
- Жду синхронизации (10-30 сек)
- Делаю коммит:
git commit -m "feat: add new feature" - Push происходит автоматически через hook
Исправить баг:
- Нахожу проблемный код
- Исправляю
- Жду синхронизации
- Коммит:
git commit -m "fix: resolve issue with X"
Обновить конфигурацию:
- Изменяю конфиг файл
- Жду синхронизации
- Коммит:
git commit -m "chore: update nginx config"
Создать документацию:
- Создаю .md файл
- Коммит:
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) начинаю новую сессию:
- Читаю этот файл (.claude/workflow.md)
- Понимаю что проект работает через Syncthing + Git
- Работаю с локальными файлами
- Делаю коммиты после каждого изменения
- Не спрашиваю пользователя о workflow - он задокументирован здесь
Этот workflow обеспечивает: ✅ Мгновенную синхронизацию изменений ✅ Полную историю версий в Git ✅ Автоматический бэкап в GitHub ✅ Безопасность (pre-commit hooks) ✅ Возможность восстановления системы (через rsync)