# 🚀 Автоматическое развертывание на тестовом сервере ## Обзор Этот репозиторий содержит GitHub Actions workflow для автоматического развертывания приложения на тестовом сервере при создании Pull Request в ветку `develop`. Каждый PR получает свою изолированную среду тестирования. ## 📁 Структура файлов ``` .github/workflows/ ├── deploy-testing.yml # Основной workflow для развертывания └── test-deployment.yml # Workflow для тестирования развертывания scripts/ └── setup-testing-server.sh # Скрипт настройки тестового сервера DEPLOYMENT.md # Подробная документация по настройке QUICK-START.md # Быстрый старт .env.testing.example # Пример переменных окружения ``` ## ⚡ Быстрый старт ### 1. Настройте тестовый сервер ```bash # На вашем тестовом сервере выполните: curl -sSL https://raw.githubusercontent.com/YOUR_USERNAME/YOUR_REPO/main/scripts/setup-testing-server.sh | bash ``` ### 2. Добавьте GitHub Secrets В настройках репозитория добавьте следующие секреты: ``` TESTING_SERVER_HOST=your.server.ip.address TESTING_SERVER_USER=deploy TESTING_SERVER_SSH_KEY=-----BEGIN OPENSSH PRIVATE KEY----- your private SSH key content -----END OPENSSH PRIVATE KEY----- TESTING_DB_ROOT_PASSWORD=strong_root_password TESTING_DB_USERNAME=app_user TESTING_DB_PASSWORD=strong_user_password ``` ### 3. Создайте Pull Request 1. Создайте новую ветку от `develop` 2. Внесите изменения 3. Создайте Pull Request в ветку `develop` 4. GitHub Actions автоматически развернет ваше приложение 5. Проверьте комментарий в PR с ссылкой на развертывание ## 🏗️ Как это работает ### Workflow процесс 1. **Триггер**: Pull Request в ветку `develop` 2. **Сборка**: Установка зависимостей, линтинг, сборка приложения 3. **Docker**: Создание Docker образа 4. **Развертывание**: Копирование файлов на сервер и запуск контейнеров 5. **Проверка**: Health check и уведомление в PR 6. **Очистка**: Автоматическая очистка при закрытии PR ### Архитектура развертывания ``` Тестовый сервер ├── /opt/low-code-engine/ │ ├── testing-pr-123/ # Изолированная среда для PR #123 │ │ ├── docker-compose.yml │ │ ├── docker-compose.override.yml │ │ ├── .env │ │ └── docker/ │ ├── testing-pr-124/ # Изолированная среда для PR #124 │ └── ... └── Порты: ├── Приложение: 3000 + PR_NUMBER ├── База данных: 3300 + PR_NUMBER └── Redis: 6300 + PR_NUMBER ``` ## 🔧 Конфигурация ### Порты по умолчанию - **Приложение**: 3000 + номер PR (например, PR #123 → порт 3123) - **База данных**: 3300 + номер PR (например, PR #123 → порт 3423) - **Redis**: 6300 + номер PR (например, PR #123 → порт 6423) ### Переменные окружения Можно настроить базовые порты через GitHub Variables: ``` TESTING_BASE_PORT=3000 # Базовый порт приложения TESTING_BASE_DB_PORT=3300 # Базовый порт БД TESTING_BASE_REDIS_PORT=6300 # Базовый порт Redis ``` ## 📊 Мониторинг ### Команды на сервере ```bash # Мониторинг всех развертываний sudo /usr/local/bin/monitor-deployments # Очистка старых развертываний (старше 7 дней) sudo /usr/local/bin/cleanup-old-deployments # Просмотр логов конкретного PR cd /opt/low-code-engine/testing-pr-123 docker-compose logs -f app # Проверка статуса docker-compose ps ``` ### Пример вывода мониторинга ``` === Testing Deployments Status === Date: Mon Oct 13 10:30:00 UTC 2025 Active Deployments: PR #123: Running on port 3123 Status: ✅ Healthy PR #124: Running on port 3124 Status: ❌ Unhealthy === System Resources === Disk Usage: /dev/sda1 20G 8.5G 11G 45% /opt/low-code-engine ``` ## 🔒 Безопасность ### Рекомендации 1. **SSH ключи**: Используйте отдельный SSH ключ только для развертывания 2. **Пользователь**: Создайте отдельного пользователя `deploy` с минимальными правами 3. **Firewall**: Настройте фаервол для ограничения доступа 4. **Пароли**: Используйте сильные пароли для базы данных 5. **Автоочистка**: Включена автоматическая очистка старых развертываний ### Настройка firewall ```bash sudo ufw enable sudo ufw allow ssh sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow 3000:3999/tcp # Порты приложений sudo ufw allow 3300:3999/tcp # Порты БД sudo ufw allow 6300:6999/tcp # Порты Redis ``` ## 🧪 Тестирование ### Тестирование самого процесса развертывания Запустите тестовый workflow вручную: 1. Перейдите в Actions → Test Deployment Workflow 2. Нажмите "Run workflow" 3. Укажите номер PR для симуляции (например, 999) 4. Запустите тест ### Локальное тестирование ```bash # Сборка и тест Docker образа локально docker build -t low-code-engine:local . docker run -d --name test-app -p 3000:3000 low-code-engine:local # Проверка health endpoint curl http://localhost:3000/health # Очистка docker stop test-app && docker rm test-app ``` ## 📚 Дополнительная документация - [DEPLOYMENT.md](./DEPLOYMENT.md) - Подробная документация по настройке - [QUICK-START.md](./QUICK-START.md) - Краткое руководство по быстрому старту - [.env.testing.example](./.env.testing.example) - Пример переменных окружения ## 🛠️ Troubleshooting ### Часто встречающиеся проблемы #### "Permission denied" при SSH ```bash # Проверьте права на сервере sudo ls -la /home/deploy/.ssh/ sudo chmod 700 /home/deploy/.ssh/ sudo chmod 600 /home/deploy/.ssh/authorized_keys ``` #### Порт уже занят ```bash # Найдите процесс sudo netstat -tulpn | grep :3123 # Остановите развертывание cd /opt/low-code-engine/testing-pr-123 docker-compose down ``` #### Нехватка места на диске ```bash # Очистка Docker docker system prune -a -f # Очистка старых развертываний sudo /usr/local/bin/cleanup-old-deployments ``` ## 🤝 Вклад в развитие 1. Создайте форк репозитория 2. Создайте ветку для новой функции 3. Внесите изменения 4. Создайте Pull Request 5. Протестируйте развертывание ## 📝 Лицензия Этот проект использует лицензию, указанную в основном проекте. --- 💡 **Совет**: Начните с [QUICK-START.md](./QUICK-START.md) для быстрой настройки, затем обратитесь к [DEPLOYMENT.md](./DEPLOYMENT.md) для подробной конфигурации.