Как организовать деплой без Kubernetes через GitHub Actions
Полное руководство по деплою приложений без Kubernetes с использованием GitHub Actions. Узнайте про SSH-подключение, Docker Hub и docker-compose для автоматизации развертывания.
Как организовать деплой без Kubernetes с использованием GitHub CI/CD?
Подскажите стандартный процесс развертывания приложений без Kubernetes через GitHub Actions.
Правильно ли я понимаю, что для этого нужно подключаться по SSH к удаленному серверу и скачивать обновленные Docker‑образы из Docker Hub?
Также интересует, можно ли в таком подходе использовать docker‑compose для управления контейнерами?
Deploy без Kubernetes с использованием GitHub Actions обычно выполняется через SSH‑подключение к удаленному серверу, где запускаются Docker‑контейнеры. Стандартный процесс включает сборку образа, публикацию в Docker Hub и развертывание на сервере с помощью SSH‑команд. Да, docker‑compose отлично подходит для управления контейнерами в таком подходе, позволяя оркестрировать несколько сервисов.
Содержание
- Основной процесс деплоя через GitHub Actions
- Настройка SSH‑ключей для безопасного доступа
- Использование Docker Hub для хранения образов
- Интеграция docker‑compose в процесс деплоя
- Бест‑практики CI/CD без Kubernetes
- Пример рабочего workflow
Основной процесс деплоя через GitHub Actions
Стандартный процесс деплоя приложений без Kubernetes через GitHub Actions включает несколько ключевых этапов. Сначала приложение собирается в Docker‑образ, который затем публикуется в Docker Hub или другом реестре образов. После этого через SSH‑подключение к удаленному серверу выполняются команды для обновления контейнеров и запуска нового приложения.
Основные шаги процесса:
- Сборка Docker‑образа – создание контейнера с вашим приложением
- Публикация образа – отправка образа в Docker Hub или частный реестр
- SSH‑подключение к серверу – установление безопасного соединения
- Обновление контейнеров – скачивание новых образов и запуск приложений
- Проверка работоспособности – тесты для подтверждения успешного деплоя
Такой подход позволяет автоматизировать развертывание приложений на традиционных серверах без необходимости в сложных оркестровочных системах вроде Kubernetes.
Настройка SSH‑ключей для безопасного доступа
Для безопасного деплоя через SSH необходимо правильно настроить аутентификацию. GitHub Actions позволяет использовать SSH‑ключи для безопасного подключения к удаленным серверам без ввода паролей.
Шаги настройки SSH‑ключей:
- Генерация SSH‑ключа – создайте пару ключей на вашем сервере
- Добавление публичного ключа – поместите публичный ключ в
authorized_keysпользователя на сервере - Хранение приватного ключа – сохраните приватный ключ в Secrets GitHub репозитория
- Настройка прав доступа – убедитесь, что deploy‑пользователь имеет необходимые права
# Пример добавления SSH‑ключа в workflow
- name: Add SSH key
uses: webfactory/ssh-agent@v0.6.0
with:
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
Важно: Никогда не храните SSH‑ключи в коде репозитория. Используйте GitHub Secrets для безопасного хранения секретных данных.
Использование Docker Hub для хранения образов
Docker Hub является наиболее популярным реестром контейнерных образов и идеально подходит для хранения Docker‑образов в CI/CD процессах.
Преимущества использования Docker Hub:
- Бесплатный аккаунт для публичных репозиториев
- Автоматическая сборка образов при каждом push в репозиторий
- Версионирование образов с помощью тегов
- Интеграция с GitHub Actions для публикации
Пример публикации образа в Docker Hub:
- name: Build and push Docker image
run: |
docker build -t ${{ secrets.DOCKER_USERNAME }}/myapp:${{ github.sha }} .
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker push ${{ secrets.DOCKER_USERNAME }}/myapp:${{ github.sha }}
Для приватных репозиториев рекомендуется использовать Docker Pro или организовать собственный реестр образов.
Интеграция docker‑compose в процесс деплоя
Да, docker‑compose идеально подходит для управления контейнерами в данном подходе. Он позволяет оркестрировать несколько контейнеров, управлять их зависимостями и конфигурацией.
Преимущества docker‑compose в CI/CD:
- Управление несколькими сервисами в одном файле
- Определение зависимостей между контейнерами
- Установка переменных окружения
- Управление сетями и томами данных
Пример workflow с docker‑compose:
- name: SSH to server and deploy
run: |
ssh -i ${{ secrets.SSH_PRIVATE_KEY }} user@server.com "
docker pull ${{ secrets.DOCKER_USERNAME }}/myapp:${{ github.sha }}
docker-compose down
docker-compose up -d
"
Рекомендуемая структура проекта:
project/
├── .github/
│ └── workflows/
│ └── deploy.yml
├── docker-compose.yml
├── Dockerfile
└── src/
Бест‑практики CI/CD без Kubernetes
При организации деплоя без Kubernetes через GitHub Actions следует учитывать несколько важных моментов для обеспечения надежности и безопасности.
Ключевые бест‑практики:
- Использование семантического версионирования – присваивайте образам осмысленные теги
- Rollback‑механизмы – всегда имейте возможность отката к предыдущей версии
- Health checks – реализуйте проверки состояния приложения после деплоя
- Безопасность – регулярно обновляйте образы и зависимые пакеты
- Мониторинг – настраивайте логирование и мониторинг развернутых приложений
Пример проверки состояния приложения:
- name: Health check
run: |
sleep 30
curl -f http://your-app-domain/health || exit 1
Пример рабочего workflow
В этом разделе представлен полный пример рабочего workflow для деплоя приложения без Kubernetes.
name: Deploy to Production
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push Docker image
run: |
docker build -t ${{ secrets.DOCKER_USERNAME }}/myapp:${{ github.sha }} .
docker push ${{ secrets.DOCKER_USERNAME }}/myapp:${{ github.sha }}
- name: Add SSH key
uses: webfactory/ssh-agent@v0.6.0
with:
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
- name: Deploy to server
run: |
ssh -i ${{ secrets.SSH_PRIVATE_KEY }} user@server.com "
cd /path/to/app
export DOCKER_IMAGE=${{ secrets.DOCKER_USERNAME }}/myapp:${{ github.sha }}
docker-compose pull
docker-compose up -d
docker system prune -f
"
- name: Health check
run: |
sleep 30
curl -f http://your-domain.com/health || exit 1
Разбор ключевых компонентов:
- Сборка образа – создание Docker‑образа с последующим push в Docker Hub
- SSH‑подключение – безопасный доступ к серверу для выполнения команд
- Обновление контейнеров – pull новых образов и перезапуск сервисов
- Очистка – удаление неиспользуемых образов для экономии места
Источники
- GitHub Actions Documentation
- Docker Documentation
- Docker Compose Documentation
- SSH Agent Action for GitHub Actions
- Docker Buildx Documentation
Заключение
Организация деплоя без Kubernetes через GitHub Actions является эффективным подходом для многих проектов. Основной процесс включает сборку Docker‑образов, их публикацию в Docker Hub и развертывание через SSH‑подключение на удаленных серверах. Docker‑compose отлично подходит для управления контейнерами в таком подходе, позволяя оркестрировать несколько сервисов.
Ключевые рекомендации:
- Всегда используйте SSH‑ключи для безопасного доступа к серверам
- Храните секреты (пароли, ключи) в GitHub Secrets
- Реализуйте механизмы отката на случай неудачного деплоя
- Настройте health checks для проверки работоспособности приложений
- Используйте семантическое версионирование для Docker‑образов
Для начала работы рекомендуется создать минимальный workflow и постепенно добавлять проверки мониторинга и безопасности. Такой подход позволяет достичь высокой надежности развертывания при сохранении относительной простоты управления.