Files
few-line-engine/DEPLOYMENT-README.md
lborv 41f1c402ed feat: Add test deployment workflow and setup documentation
- 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.
2025-10-13 20:59:12 +03:00

8.3 KiB
Raw Blame History

🚀 Автоматическое развертывание на тестовом сервере

Обзор

Этот репозиторий содержит 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

  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

📊 Мониторинг

Команды на сервере

# Мониторинг всех развертываний
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

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. Запустите тест

Локальное тестирование

# Сборка и тест 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

🤝 Вклад в развитие

  1. Создайте форк репозитория
  2. Создайте ветку для новой функции
  3. Внесите изменения
  4. Создайте Pull Request
  5. Протестируйте развертывание

📝 Лицензия

Этот проект использует лицензию, указанную в основном проекте.


💡 Совет: Начните с QUICK-START.md для быстрой настройки, затем обратитесь к DEPLOYMENT.md для подробной конфигурации.