# 🚀 Настройка GitHub Actions и Автодеплоя ## 📋 Содержание 1. [Создание репозитория](#создание-репозитория) 2. [Настройка Secrets](#настройка-secrets) 3. [Настройка VPS](#настройка-vps) 4. [Первый деплой](#первый-деплой) 5. [Автоматический деплой](#автоматический-деплой) --- ## Создание репозитория ### 1. Инициализация Git ```bash # В корне проекта cd c:\Users\ormix\StudioProjects\NANAXE git init # Добавьте .gitignore echo "# Flutter/Dart .dart_tool/ .flutter-plugins .flutter-plugins-dependencies .packages .pub-cache/ .pub/ build/ *.g.dart *.freezed.dart # IDE .idea/ .vscode/ *.iml *.ipr *.iws # Environment .env .env.local # Server server/node_modules/ server/logs/ server/backups/ *.log # OS .DS_Store Thumbs.db " > .gitignore # Первый коммит git add . git commit -m "Initial commit: Nanaxe CRM with server" ``` ### 2. Создание репозитория на GitHub ```bash # Создайте репозиторий на GitHub (через веб-интерфейс) # Затем: git remote add origin https://github.com/YOUR_USERNAME/nanaxe-crm.git git branch -M main git push -u origin main ``` --- ## Настройка Secrets Перейдите в **Settings → Secrets and variables → Actions** и добавьте: ### Обязательные Secrets | Secret Name | Description | Example | |-------------|-------------|---------| | `VPS_HOST` | IP или домен VPS | `203.0.113.1` или `nanaxe.example.com` | | `VPS_USER` | SSH пользователь | `root` или `deploy` | | `VPS_SSH_KEY` | Приватный SSH ключ | Содержимое `~/.ssh/id_rsa` | | `DEPLOY_PATH` | Путь на сервере | `/opt/nanaxe-server` | ### Опциональные Secrets | Secret Name | Description | |-------------|-------------| | `GITEA_DOMAIN` | Домен для Gitea | | `GITEA_TOKEN` | API токен Gitea | | `JWT_SECRET` | Секретный ключ JWT | | `POSTGRES_PASSWORD` | Пароль PostgreSQL | | `WEBDAV_USER` | WebDAV пользователь | | `WEBDAV_PASSWORD` | WebDAV пароль | ### Генерация SSH ключа На вашем локальном компьютере: ```bash # Сгенерируйте ключ (без пароля для CI/CD) ssh-keygen -t ed25519 -C "github-actions" -f ~/.ssh/nanaxe_deploy # Добавьте публичный ключ на VPS ssh-copy-id -i ~/.ssh/nanaxe_deploy.pub root@YOUR_VPS_IP # Скопируйте приватный ключ для GitHub cat ~/.ssh/nanaxe_deploy # Скопируйте вывод в секрет VPS_SSH_KEY ``` --- ## Настройка VPS ### 1. Быстрая настройка (автоматическая) ```bash # На VPS выполните: curl -fsSL https://raw.githubusercontent.com/YOUR_USERNAME/nanaxe-crm/main/server/scripts/setup-vps.sh | bash ``` ### 2. Ручная настройка ```bash # Скопируйте скрипт на VPS scp server/scripts/setup-vps.sh root@YOUR_VPS_IP:/tmp/ # Выполните ssh root@YOUR_VPS_IP chmod +x /tmp/setup-vps.sh /tmp/setup-vps.sh ``` ### 3. Что делает скрипт - ✅ Обновляет систему - ✅ Устанавливает Docker и Docker Compose - ✅ Настраивает UFW firewall - ✅ Устанавливает Fail2Ban - ✅ Создаёт директорию деплоя - ✅ Настраивает SSL (Let's Encrypt) - ✅ Создаёт systemd сервис - ✅ Генерирует секреты --- ## Первый деплой ### 1. Локально настройте окружение ```bash cd server cp .env.example .env # Отредактируйте .env ``` ### 2. Запушьте на GitHub ```bash git add . git commit -m "Add server deployment configuration" git push origin main ``` ### 3. Запустите GitHub Actions Перейдите в **Actions** вкладку на GitHub и запустите workflow вручную или дождитесь автоматического запуска. ### 4. Проверьте деплой ```bash # На VPS ssh root@YOUR_VPS_IP cd /opt/nanaxe-server/server docker compose -f docker-compose.prod.yml ps docker compose -f docker-compose.prod.yml logs -f ``` --- ## Автоматический деплой ### Как это работает ``` ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ Push to │────→│ GitHub │────→│ Build & │ │ main │ │ Actions │ │ Push │ └─────────────┘ └─────────────┘ │ Docker │ │ Image │ └──────┬──────┘ │ ▼ ┌─────────────┐ │ Deploy │ │ to VPS │ └──────┬──────┘ │ ▼ ┌─────────────┐ │ Health │ │ Check │ └─────────────┘ ``` ### Триггеры деплоя Автодеплой запускается при: - Push в `main` или `master` ветку - Merge Pull Request - Ручной запуск через GitHub UI ### Проверка статуса ```bash # На VPS docker compose -f docker-compose.prod.yml ps # Логи API docker compose -f docker-compose.prod.yml logs api -f # Логи Gitea docker compose -f docker-compose.prod.yml logs gitea -f ``` --- ## 🔧 Полезные команды ### Ручной деплой ```bash # На VPS cd /opt/nanaxe-server/server bash scripts/deploy.sh ``` ### Откат (Rollback) ```bash # Через GitHub Actions # Actions → Deploy Nanaxe Server → Run workflow → Use workflow from: main # Выберите "Rollback" (если добавлено) или вручную: # На VPS docker compose -f docker-compose.prod.yml down docker compose -f docker-compose.prod.yml up -d ``` ### Обновление ```bash # Локально git pull origin main # Внесите изменения git add . && git commit -m "Update" && git push # GitHub Actions автоматически задеплоит ``` ### Мониторинг ```bash # Статус сервисов docker compose -f docker-compose.prod.yml ps # Использование ресурсов docker stats # Логи в реальном времени docker compose -f docker-compose.prod.yml logs -f --tail=100 ``` --- ## 🐛 Устранение неполадок ### Проблема: Деплой не запускается ```bash # Проверьте GitHub Actions logs # Actions → Deploy Nanaxe Server → Последний run ``` ### Проблема: SSH подключение не работает ```bash # На VPS проверьте ключ cat ~/.ssh/authorized_keys # Проверьте права chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys ``` ### Проблема: Контейнеры не стартуют ```bash # На VPS cd /opt/nanaxe-server/server docker compose -f docker-compose.prod.yml down docker compose -f docker-compose.prod.yml up -d docker compose -f docker-compose.prod.yml logs ``` ### Проблема: Health check failed ```bash # Проверьте API curl http://localhost:8080/health # Проверьте Gitea curl http://localhost:3000/api/healthz ``` --- ## 📊 Workflow файлы ### Основной деплой: `.github/workflows/deploy.yml` - Собирает Docker образ - Публикует в GitHub Container Registry - Деплоит на VPS - Запускает health checks - Поддерживает rollback ### PR Checks: `.github/workflows/pr-check.yml` - Запускается на Pull Request - Проверяет код - Тестирует сборку Docker - Сканирует уязвимости - Валидирует docker-compose --- ## 🎉 Готово! Теперь при каждом push в `main`: 1. ✅ Код автоматически тестируется 2. ✅ Docker образ собирается 3. ✅ Образ публикуется в GitHub Container Registry 4. ✅ VPS автоматически обновляется 5. ✅ Health checks проверяют работоспособность Ваш сервер всегда будет актуальным! 🚀