Files
few-line-engine/DEPLOYMENT.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

210 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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-(?<pr_number>\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
```