feat: Add Nanaxe server with Docker, GitHub Actions CI/CD, and auto-deployment
- Add complete server infrastructure with Gitea, API, PostgreSQL - Implement Obsidian-compatible markdown mindmap converter - Add Flutter service for server synchronization - Configure GitHub Actions for automated build and deploy - Add production docker-compose with health checks - Include VPS setup and deployment scripts - Add comprehensive deployment documentation
This commit is contained in:
+349
@@ -0,0 +1,349 @@
|
||||
# 🚀 Настройка 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 проверяют работоспособность
|
||||
|
||||
Ваш сервер всегда будет актуальным! 🚀
|
||||
Reference in New Issue
Block a user