# GitHub Actions Deployment Setup Этот документ описывает настройку автоматического развертывания на тестовом сервере при создании Pull Request в ветку `develop`. ## Требуемые GitHub Secrets Перейдите в настройки репозитория → Settings → Secrets and variables → Actions и добавьте следующие секреты: ### SSH Connection - `TESTING_SERVER_HOST` - IP адрес или домен тестового сервера - `TESTING_SERVER_USER` - Пользователь для SSH подключения (например: `deploy`) - `TESTING_SERVER_SSH_KEY` - Приватный SSH ключ для подключения к серверу - `TESTING_SERVER_PORT` - (опционально) Порт SSH (по умолчанию 22) ### Database Configuration - `TESTING_DB_ROOT_PASSWORD` - Root пароль для MariaDB - `TESTING_DB_USERNAME` - Пользователь базы данных - `TESTING_DB_PASSWORD` - Пароль пользователя базы данных ## Требуемые GitHub Variables Перейдите в настройки репозитория → Settings → Secrets and variables → Actions → Variables и добавьте: - `TESTING_BASE_PORT` - Базовый порт для приложений (по умолчанию: 3000) - `TESTING_BASE_DB_PORT` - Базовый порт для баз данных (по умолчанию: 3306) - `TESTING_BASE_REDIS_PORT` - Базовый порт для Redis (по умолчанию: 6379) ## Настройка тестового сервера ### 1. Установка Docker и Docker Compose ```bash # Обновление системы sudo apt update && sudo apt upgrade -y # Установка Docker curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh # Добавление пользователя в группу docker sudo usermod -aG docker $USER # Установка Docker Compose sudo apt install docker-compose-plugin -y ``` ### 2. Создание пользователя для развертывания ```bash # Создание пользователя sudo useradd -m -s /bin/bash deploy sudo usermod -aG docker deploy # Создание директории для SSH ключей sudo mkdir -p /home/deploy/.ssh sudo chmod 700 /home/deploy/.ssh # Добавление публичного SSH ключа sudo nano /home/deploy/.ssh/authorized_keys # Вставьте публичный ключ, соответствующий приватному ключу в TESTING_SERVER_SSH_KEY sudo chmod 600 /home/deploy/.ssh/authorized_keys sudo chown -R deploy:deploy /home/deploy/.ssh # Создание директории для приложений sudo mkdir -p /opt/low-code-engine sudo chown deploy:deploy /opt/low-code-engine ``` ### 3. Настройка Nginx (опционально) Если хотите использовать доменные имена вместо портов: ```bash sudo apt install nginx -y # Создание конфигурации для тестовых приложений sudo nano /etc/nginx/sites-available/testing-apps ``` Содержимое файла: ```nginx server { listen 80; server_name ~^pr-(?\d+)\.testing\.yourdomain\.com$; location / { set $app_port 3000$pr_number; proxy_pass http://127.0.0.1:$app_port; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` ```bash # Активация конфигурации sudo ln -s /etc/nginx/sites-available/testing-apps /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx ``` ## Как работает развертывание ### Процесс развертывания 1. **Trigger**: Создание или обновление Pull Request в ветку `develop` 2. **Build**: Сборка приложения и создание Docker образа 3. **Deploy**: Копирование файлов на сервер и запуск контейнеров 4. **Health Check**: Проверка доступности приложения 5. **Comment**: Добавление комментария в PR с информацией о развертывании ### Структура на сервере ``` /opt/low-code-engine/ ├── testing-pr-123/ # Отдельная директория для каждого PR │ ├── docker-compose.yml # Основной docker-compose файл │ ├── docker-compose.override.yml # Переопределения для тестинга │ ├── .env # Переменные окружения │ ├── docker/ # Docker конфигурации │ └── low-code-engine-testing.tar.gz # Docker образ ├── testing-pr-124/ └── ... ``` ### Порты Каждому PR назначаются уникальные порты: - Приложение: `TESTING_BASE_PORT + PR_NUMBER` (например: 3000 + 123 = 3123) - База данных: `TESTING_BASE_DB_PORT + PR_NUMBER` (например: 3306 + 123 = 3429) - Redis: `TESTING_BASE_REDIS_PORT + PR_NUMBER` (например: 6379 + 123 = 6502) ### Cleanup При закрытии или мердже PR автоматически происходит: 1. Остановка и удаление контейнеров 2. Удаление Docker образов 3. Удаление файлов на сервере 4. Добавление комментария об очистке ## Безопасность 1. **SSH ключи**: Используйте отдельный SSH ключ только для развертывания 2. **Пользователь**: Создайте отдельного пользователя с минимальными правами 3. **Firewall**: Настройте фаервол для ограничения доступа к портам 4. **SSL/TLS**: Рассмотрите использование SSL сертификатов для HTTPS ## Мониторинг и логи ### Просмотр логов приложения ```bash cd /opt/low-code-engine/testing-pr-{PR_NUMBER} docker-compose logs -f app ``` ### Просмотр статуса контейнеров ```bash docker-compose ps ``` ### Мониторинг ресурсов ```bash docker stats ``` ## Troubleshooting ### Проблемы с портами Если порт занят, проверьте какие приложения его используют: ```bash sudo netstat -tulpn | grep :{PORT} ``` ### Проблемы с Docker Очистка неиспользуемых ресурсов: ```bash docker system prune -f ``` ### Проблемы с базой данных Проверка подключения к базе данных: ```bash docker-compose exec mariadb mysql -u root -p -e "SHOW DATABASES;" ``` ### Проблемы с миграциями Ручной запуск миграций: ```bash docker-compose exec app yarn migration:run ```