- 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.
210 lines
7.2 KiB
Markdown
210 lines
7.2 KiB
Markdown
# 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
|
||
```
|