- Implemented a new GitHub Actions workflow for testing deployments (`test-deployment.yml`). - Created detailed deployment documentation (`DEPLOYMENT-README.md`, `DEPLOYMENT.md`, `QUICK-START.md`) for setting up the testing server and configuring GitHub secrets. - Added a setup script (`setup-testing-server.sh`) for automating the environment setup on the testing server, including Docker, Nginx, and user configurations. - Included monitoring and cleanup scripts for managing deployments on the server.
8.3 KiB
8.3 KiB
🚀 Автоматическое развертывание на тестовом сервере
Обзор
Этот репозиторий содержит 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. Настройте тестовый сервер
# На вашем тестовом сервере выполните:
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
- Создайте новую ветку от
develop - Внесите изменения
- Создайте Pull Request в ветку
develop - GitHub Actions автоматически развернет ваше приложение
- Проверьте комментарий в PR с ссылкой на развертывание
🏗️ Как это работает
Workflow процесс
- Триггер: Pull Request в ветку
develop - Сборка: Установка зависимостей, линтинг, сборка приложения
- Docker: Создание Docker образа
- Развертывание: Копирование файлов на сервер и запуск контейнеров
- Проверка: Health check и уведомление в PR
- Очистка: Автоматическая очистка при закрытии 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
📊 Мониторинг
Команды на сервере
# Мониторинг всех развертываний
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
🔒 Безопасность
Рекомендации
- SSH ключи: Используйте отдельный SSH ключ только для развертывания
- Пользователь: Создайте отдельного пользователя
deployс минимальными правами - Firewall: Настройте фаервол для ограничения доступа
- Пароли: Используйте сильные пароли для базы данных
- Автоочистка: Включена автоматическая очистка старых развертываний
Настройка firewall
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 вручную:
- Перейдите в Actions → Test Deployment Workflow
- Нажмите "Run workflow"
- Укажите номер PR для симуляции (например, 999)
- Запустите тест
Локальное тестирование
# Сборка и тест 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 - Подробная документация по настройке
- QUICK-START.md - Краткое руководство по быстрому старту
- .env.testing.example - Пример переменных окружения
🛠️ Troubleshooting
Часто встречающиеся проблемы
"Permission denied" при SSH
# Проверьте права на сервере
sudo ls -la /home/deploy/.ssh/
sudo chmod 700 /home/deploy/.ssh/
sudo chmod 600 /home/deploy/.ssh/authorized_keys
Порт уже занят
# Найдите процесс
sudo netstat -tulpn | grep :3123
# Остановите развертывание
cd /opt/low-code-engine/testing-pr-123
docker-compose down
Нехватка места на диске
# Очистка Docker
docker system prune -a -f
# Очистка старых развертываний
sudo /usr/local/bin/cleanup-old-deployments
🤝 Вклад в развитие
- Создайте форк репозитория
- Создайте ветку для новой функции
- Внесите изменения
- Создайте Pull Request
- Протестируйте развертывание
📝 Лицензия
Этот проект использует лицензию, указанную в основном проекте.
💡 Совет: Начните с QUICK-START.md для быстрой настройки, затем обратитесь к DEPLOYMENT.md для подробной конфигурации.