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

7.2 KiB
Raw Blame History

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

# Обновление системы
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. Создание пользователя для развертывания

# Создание пользователя
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 (опционально)

Если хотите использовать доменные имена вместо портов:

sudo apt install nginx -y

# Создание конфигурации для тестовых приложений
sudo nano /etc/nginx/sites-available/testing-apps

Содержимое файла:

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;
    }
}
# Активация конфигурации
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

Мониторинг и логи

Просмотр логов приложения

cd /opt/low-code-engine/testing-pr-{PR_NUMBER}
docker-compose logs -f app

Просмотр статуса контейнеров

docker-compose ps

Мониторинг ресурсов

docker stats

Troubleshooting

Проблемы с портами

Если порт занят, проверьте какие приложения его используют:

sudo netstat -tulpn | grep :{PORT}

Проблемы с Docker

Очистка неиспользуемых ресурсов:

docker system prune -f

Проблемы с базой данных

Проверка подключения к базе данных:

docker-compose exec mariadb mysql -u root -p -e "SHOW DATABASES;"

Проблемы с миграциями

Ручной запуск миграций:

docker-compose exec app yarn migration:run