Skip to content

Latest commit

 

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Deployer — Docker Deployment API

Минималистичный Go-сервис, который принимает docker-compose.yml по webhook и разворачивает проекты на сервере.

Что делает

GitHub Actions → POST /deploy → deployer → docker compose up -d

Принимает base64-encoded docker-compose.yml, .env и любые дополнительные файлы. Сам делает docker compose down, pull, up -d.

API

Метод Endpoint Описание
GET /health?token=TOKEN Health-check
POST /deploy?token=TOKEN Развернуть проект
GET /containers?token=TOKEN Список контейнеров
GET /logs?token=TOKEN&name=xxx&tail=100 Логи контейнера
POST /stop?token=TOKEN&name=xxx Остановить контейнер
POST /remove?token=TOKEN&name=xxx Удалить контейнер

Deploy request

curl -X POST "http://localhost:9090/deploy?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "project": "my-app",
    "compose_b64": "<base64 docker-compose.yml>",
    "env_b64": "<base64 .env>",
    "extra_files_b64": {
      "dist/index.html": "<base64 file content>"
    }
  }'

Быстрый старт

Способ 1: готовый образ (рекомендуется)

docker run -d \
  --name deployer \
  --restart unless-stopped \
  -p 9090:9090 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /opt/projects:/opt/projects \
  -e DEPLOY_TOKEN=$(openssl rand -hex 32) \
  ghcr.io/isklv/deploy-system:latest

Готово. Deployer слушает на :9090.

📦 Образ автоматически собирается и пушится в GHCR при каждом пуше в main. Теги: latest + commit SHA.

Способ 2: docker-compose (рекомендуется для VPS)

Создать docker-compose.deployer.yml:

services:
  deployer:
    image: ghcr.io/isklv/deploy-system:latest
    container_name: deployer
    restart: unless-stopped
    ports:
      - "9090:9090"
    environment:
      - DEPLOY_TOKEN=${DEPLOY_TOKEN:?Set DEPLOY_TOKEN}
      - GHCR_TOKEN=${GHCR_TOKEN}  # опционально, для GHCR образов
      # - LOG_WEBHOOK=https://api.telegram.org/bot<token>/sendMessage?chat_id=<chat_id>
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /opt/projects:/opt/projects

Создать .env.deployer:

# Случайный токен для авторизации
deeploy_TOKEN=$(openssl rand -hex 32)

# GitHub PAT (read:packages) — если нужны образы из GHCR
GHCR_TOKEN=ghp_xxxxxxxx

Запустить:

docker compose -f docker-compose.deployer.yml up -d

Способ 3: собрать свой образ

cd deploy-system/deployer
docker build -t deployer:latest .
docker run -d --name deployer \
  -p 9090:9090 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /opt/projects:/opt/projects \
  -e DEPLOY_TOKEN=your-token \
  deployer:latest

Переменные окружения

Переменная Обязательно Описание
DEPLOY_TOKEN Токен авторизации для API-запросов
GHCR_TOKEN GitHub PAT (read:packages) для логина в ghcr.io
LOG_WEBHOOK Telegram webhook URL для уведомлений о деплоях
PORT Порт (по умолчанию 9090)
PROJECTS_DIR Директория проектов (по умолчанию /opt/projects)

Проверка

# Health check
curl http://localhost:9090/health?token=YOUR_TOKEN

# Список контейнеров
curl http://localhost:9090/containers?token=YOUR_TOKEN

Интеграция с GitHub Actions

В проекте добавить .github/workflows/deploy.yml:

name: Deploy
on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Deploy
        env:
          DEPLOY_URL: ${{ vars.DEPLOY_URL }}
          DEPLOY_TOKEN: ${{ secrets.DEPLOY_TOKEN }}
        run: |
          curl -sf "${DEPLOY_URL}/deploy?token=${DEPLOY_TOKEN}" \
            -H "Content-Type: application/json" \
            -d "$(jq -n \
              --arg compose "$(base64 -w0 docker-compose.yml)" \
              '{project: "my-app", compose_b64: $compose}')"

Настроить в GitHub repo settings:

  • Variable DEPLOY_URLhttp://your-server:9090
  • Secret DEPLOY_TOKEN → ваш токен

About

Automated deploy system — GHCR images + VPS webhook deployer

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages