- 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.
7.2 KiB
7.2 KiB
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 пароль для MariaDBTESTING_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
Как работает развертывание
Процесс развертывания
- Trigger: Создание или обновление Pull Request в ветку
develop - Build: Сборка приложения и создание Docker образа
- Deploy: Копирование файлов на сервер и запуск контейнеров
- Health Check: Проверка доступности приложения
- 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 автоматически происходит:
- Остановка и удаление контейнеров
- Удаление Docker образов
- Удаление файлов на сервере
- Добавление комментария об очистке
Безопасность
- SSH ключи: Используйте отдельный SSH ключ только для развертывания
- Пользователь: Создайте отдельного пользователя с минимальными правами
- Firewall: Настройте фаервол для ограничения доступа к портам
- 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