<!--
  Copyright (c) 2024-2026 Тарабанов Александр Викторович
  All rights reserved.
  
  This software is proprietary and confidential.
  Unauthorized copying, modification, or distribution is prohibited.
  
  For licensing inquiries: info@hb3-accelerator.com
  Website: https://hb3-accelerator.com
  GitHub: https://github.com/VC-HB3-Accelerator
-->

# Скрипты миграции приложения

Этот набор скриптов позволяет полностью перенести приложение с базами данных между различными провайдерами.

## Файлы

- `migrate-app.sh` - Основной скрипт миграции приложения
- `update-dns.sh` - Скрипт обновления DNS записей
- `setup-gitea-db.sh` - Создание БД и пользователя для Gitea в PostgreSQL (один раз перед первым запуском Gitea)
- `README.md` - Эта инструкция

## Что мигрируется

Скрипт переносит **всё приложение**:

### ✅ **Контейнеры:**
- Frontend (Vue.js)
- Backend (Node.js)
- PostgreSQL (база данных)
- Ollama (AI модели)
- Vector Search

### ✅ **Данные:**
- PostgreSQL база данных (полный дамп)
- Ollama модели (список для восстановления)
- Переменные окружения
- Конфигурационные файлы

### ❌ **Исключается:**
- `node_modules/` (пересобирается)
- `.git/` (не нужен на продакшене)
- `*.log` (логи)
- `temp/` (временные файлы)
- `sessions/` (сессии)

## Требования

### На исходном сервере:
- Docker и Docker Compose
- SSH доступ
- Достаточно места для бэкапа

### На целевом сервере:
- Docker и Docker Compose
- SSH доступ
- Достаточно места для приложения

### На локальной машине:
- SSH ключи настроены для обоих серверов
- `dig` (для проверки DNS)
- `curl` (для API запросов)
- `jq` (для работы с JSON)

## Использование

### 1. Миграция приложения

```bash
# Сделать скрипт исполняемым
chmod +x scripts/migrate-app.sh

# Запустить миграцию
./scripts/migrate-app.sh source-server target-server app-path
```

**Пример:**
```bash
./scripts/migrate-app.sh user@hostland-server.com user@aws-server.com /home/user/dapp
```

### 2. Обновление DNS записей

```bash
# Сделать скрипт исполняемым
chmod +x scripts/update-dns.sh

# Запустить обновление DNS
./scripts/update-dns.sh domain new-server-ip
```

**Пример:**
```bash
./scripts/update-dns.sh mydapp.site 123.456.789.10
```

## Автоматическое обновление DNS

Скрипт поддерживает автоматическое обновление DNS через API:

### Cloudflare
```bash
export CLOUDFLARE_API_TOKEN="your-api-token"
./scripts/update-dns.sh mydapp.site 123.456.789.10
```

### GoDaddy
```bash
export GODADDY_API_KEY="your-api-key"
export GODADDY_API_SECRET="your-api-secret"
./scripts/update-dns.sh mydapp.site 123.456.789.10
```

### Namecheap
```bash
export NAMECHEAP_API_USER="your-username"
export NAMECHEAP_API_KEY="your-api-key"
./scripts/update-dns.sh mydapp.site 123.456.789.10
```

## Процесс миграции

### 1. Подготовка
- Проверка подключений к серверам
- Проверка установки Docker
- Создание временных файлов

### 2. Создание бэкапа
- Остановка приложения
- Создание дампа PostgreSQL
- Сохранение списка Ollama моделей
- Создание полного архива

### 3. Восстановление
- Копирование архива на целевой сервер
- Распаковка файлов
- Восстановление PostgreSQL
- Восстановление Ollama моделей
- Запуск приложения

### 4. Проверка
- Проверка статуса контейнеров
- Проверка логов
- Проверка доступности портов
- Очистка временных файлов

## Примеры использования

### Миграция с Hostland на AWS

```bash
# 1. Мигрируем приложение
./scripts/migrate-app.sh user@hostland.com ec2-user@aws-server.com /home/ec2-user/dapp

# 2. Получаем новый IP
NEW_IP=$(ssh ec2-user@aws-server.com "curl -s ifconfig.me")

# 3. Обновляем DNS
./scripts/update-dns.sh mydapp.site $NEW_IP
```

### Миграция с AWS на DigitalOcean

```bash
# 1. Мигрируем приложение
./scripts/migrate-app.sh ec2-user@aws-server.com root@digitalocean.com /root/dapp

# 2. Получаем новый IP
NEW_IP=$(ssh root@digitalocean.com "curl -s ifconfig.me")

# 3. Обновляем DNS
./scripts/update-dns.sh mydapp.site $NEW_IP
```

## Мониторинг процесса

Скрипты выводят подробную информацию о процессе:

- `[INFO]` - Информационные сообщения
- `[SUCCESS]` - Успешные операции
- `[WARNING]` - Предупреждения
- `[ERROR]` - Ошибки

## Устранение неполадок

### Ошибка подключения SSH
```bash
# Проверьте SSH ключи
ssh -T user@server.com

# Добавьте ключ в ssh-agent
ssh-add ~/.ssh/id_rsa
```

### Ошибка Docker
```bash
# Установите Docker на сервере
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
```

### Ошибка DNS
```bash
# Проверьте DNS записи
dig mydapp.site

# Обновите вручную в панели управления доменом
```

### Ошибка восстановления PostgreSQL
```bash
# Проверьте логи PostgreSQL
docker compose logs postgres

# Создайте базу вручную
docker compose exec postgres createdb -U dapp_user dapp_db
```

### Gitea (PostgreSQL)
Перед первым запуском Gitea создайте БД и пользователя в существующем Postgres:
```bash
chmod +x scripts/setup-gitea-db.sh
./scripts/setup-gitea-db.sh
docker compose up -d gitea
```
Пароль по умолчанию для пользователя `gitea`: `gitea`. Свой пароль задайте в `.env`: `GITEA_DB_PASSWORD=...` (и тот же в docker-compose для сервиса gitea уже подхватывается).

## Безопасность

### SSH ключи
- Используйте SSH ключи вместо паролей
- Ограничьте доступ к серверам
- Регулярно обновляйте ключи

### API ключи
- Храните API ключи в переменных окружения
- Не коммитьте ключи в репозиторий
- Используйте минимальные права доступа

### Данные
- Бэкапы содержат чувствительные данные
- Удаляйте временные файлы после миграции
- Шифруйте бэкапы при необходимости

## Резервное копирование

Рекомендуется создавать резервные копии перед миграцией:

```bash
# Создать бэкап вручную
cd /path/to/app
docker compose down
tar -czf backup-$(date +%Y%m%d).tar.gz .
```

## Поддержка

При возникновении проблем:

1. Проверьте логи скриптов
2. Проверьте статус контейнеров
3. Проверьте подключения к серверам
4. Проверьте DNS записи
5. Обратитесь к документации провайдера

## Лицензия

Эти скрипты распространяются под MIT лицензией. 