Скрипты миграции приложения
Этот набор скриптов позволяет полностью перенести приложение с базами данных между различными провайдерами.
Файлы
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. Миграция приложения
# Сделать скрипт исполняемым
chmod +x scripts/migrate-app.sh
# Запустить миграцию
./scripts/migrate-app.sh source-server target-server app-path
Пример:
./scripts/migrate-app.sh user@hostland-server.com user@aws-server.com /home/user/dapp
2. Обновление DNS записей
# Сделать скрипт исполняемым
chmod +x scripts/update-dns.sh
# Запустить обновление DNS
./scripts/update-dns.sh domain new-server-ip
Пример:
./scripts/update-dns.sh mydapp.site 123.456.789.10
Автоматическое обновление DNS
Скрипт поддерживает автоматическое обновление DNS через API:
Cloudflare
export CLOUDFLARE_API_TOKEN="your-api-token"
./scripts/update-dns.sh mydapp.site 123.456.789.10
GoDaddy
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
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
# 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
# 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
# Проверьте SSH ключи
ssh -T user@server.com
# Добавьте ключ в ssh-agent
ssh-add ~/.ssh/id_rsa
Ошибка Docker
# Установите Docker на сервере
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
Ошибка DNS
# Проверьте DNS записи
dig mydapp.site
# Обновите вручную в панели управления доменом
Ошибка восстановления PostgreSQL
# Проверьте логи PostgreSQL
docker compose logs postgres
# Создайте базу вручную
docker compose exec postgres createdb -U dapp_user dapp_db
Gitea (PostgreSQL)
Перед первым запуском Gitea создайте БД и пользователя в существующем Postgres:
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 ключи в переменных окружения
- Не коммитьте ключи в репозиторий
- Используйте минимальные права доступа
Данные
- Бэкапы содержат чувствительные данные
- Удаляйте временные файлы после миграции
- Шифруйте бэкапы при необходимости
Резервное копирование
Рекомендуется создавать резервные копии перед миграцией:
# Создать бэкап вручную
cd /path/to/app
docker compose down
tar -czf backup-$(date +%Y%m%d).tar.gz .
Поддержка
При возникновении проблем:
- Проверьте логи скриптов
- Проверьте статус контейнеров
- Проверьте подключения к серверам
- Проверьте DNS записи
- Обратитесь к документации провайдера
Лицензия
Эти скрипты распространяются под MIT лицензией.