Настройка Semaphore UI для управления Ansible: пошаговое руководство

Когда плейбуков становится больше, а запуск Ansible через консоль — неудобным, приходит время веб-интерфейса. Мы настраиваем Semaphore UI — лёгкую альтернативу AWX, которая запускается в Docker и закрывает базовые потребности команды. Реализуем проект под ключ: от установки до поддержки, с многолетним опытом и без срыва сроков.
Часто задаваемые вопросы

Настройка Semaphore UI для управления Ansible

Мы часто сталкиваемся с ситуацией: команда использует Ansible, но запуск плейбуков через консоль перестаёт быть удобным, когда плейбуков больше пяти, а инженеров — три. AWX кажется тяжёлым и требует Kubernetes или крупной VM. Semaphore UI — лёгкая open-source альтернатива. Она запускается в одном Docker-контейнере, занимает меньше 512 МБ RAM в простое и закрывает базовые потребности: хранение SSH-ключей, инвентари, запуск плейбуков через веб-интерфейс, расписания и история выполнения. По нашим оценкам, внедрение Semaphore обходится в 3–4 раза дешевле, чем развёртывание AWX, при сопоставимой функциональности для небольших команд.

Наш опыт показывает, что Semaphore идеально вписывается в сценарии, где не нужны Survey-формы или сложный RBAC на уровне отдельных задач. Если у вас 2–5 инженеров и до 20 плейбуков — Semaphore справится на 100%. А если нужна интеграция с GitLab CI — мы добавляем REST API, и всё летает. Закажите консультацию — мы поможем оценить, подходит ли Semaphore под ваш проект.

Почему Semaphore UI, а не AWX?

Semaphore проще в развёртывании и эксплуатации. Сравним ключевые характеристики:

Параметр Semaphore AWX
Ресурсы 512 МБ RAM, 1 vCPU 4 ГБ RAM, 2 vCPU (рекомендация)
Среда Один Docker-контейнер + PostgreSQL Kubernetes или кластер Podman
RBAC Роли на уровне проекта Роли на уровне проектов, организаций, отдельных ресурсов
Survey-формы Нет (параметры через Environment JSON) Есть веб-формы с валидацией
Smart Inventory Нет Да (на основе фактов Ansible)
Интеграция с CI/CD REST API (простой) REST API + вебхуки + модули
Срок внедрения 1–3 дня 1–2 недели

Semaphore разворачивается в разы быстрее и требует значительно меньше памяти. Для небольших команд это решающий аргумент.

Как развернуть Semaphore UI за один день?

Мы подготовили типовой docker-compose.yml, который поднимает Semaphore вместе с PostgreSQL. Ключевой момент — генерация SEMAPHORE_ACCESS_KEY_ENCRYPTION:

# docker-compose.yml
services:
  semaphore:
    image: semaphoreui/semaphore:v2.10.22
    environment:
      SEMAPHORE_DB_DIALECT: postgres
      SEMAPHORE_DB_HOST: postgres
      SEMAPHORE_DB_PORT: 5432
      SEMAPHORE_DB_USER: semaphore
      SEMAPHORE_DB_PASS: ${DB_PASSWORD}
      SEMAPHORE_DB: semaphore
      SEMAPHORE_PLAYBOOK_PATH: /tmp/semaphore/
      SEMAPHORE_ADMIN_PASSWORD: ${ADMIN_PASSWORD}
      SEMAPHORE_ADMIN_NAME: admin
      SEMAPHORE_ADMIN_EMAIL: [email protected]
      SEMAPHORE_ADMIN: admin
      SEMAPHORE_ACCESS_KEY_ENCRYPTION: ${ENCRYPTION_KEY}
      TZ: Europe/Moscow
    ports:
      - "3000:3000"
    depends_on:
      - postgres
  postgres:
    image: postgres:15-alpine
    environment:
      POSTGRES_USER: semaphore
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: semaphore
    volumes:
      - pg_data:/var/lib/postgresql/data

SEMAPHORE_ACCESS_KEY_ENCRYPTION — 32-символьный ключ. Генерируется один раз:

openssl rand -base64 32 

После запуска заходим на порт 3000, создаём проект и добавляем репозиторий с плейбуками.

Шаги по развёртыванию

  1. Создайте docker-compose.yml с указанным содержимым и файл .env с переменными DB_PASSWORD, ADMIN_PASSWORD, ENCRYPTION_KEY.
  2. Запустите docker-compose up -d.
  3. Откройте браузер на http://localhost:3000, войдите под admin, создайте проект и добавьте репозиторий.
Дополнительно: настройка HTTPS и резервного копирования

Для production-среды рекомендуется настроить обратный прокси (nginx/caddy) с Let’s Encrypt и регулярные бэкапы PostgreSQL. Пример конфигурации nginx – официальная документация Semaphore.

Как интегрировать Semaphore UI с CI/CD?

Semaphore имеет REST API — мы используем его для запуска задач из GitLab CI. Вот пример скрипта:

# Получить token
TOKEN=$(curl -s -X POST https://semaphore.mycompany.com/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"auth": "admin", "password": "'$SEMAPHORE_ADMIN_PASSWORD'"}' \
  | jq -r '.token')

# Запустить Task Template с ID=5
curl -X POST https://semaphore.mycompany.com/api/project/1/tasks \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "template_id": 5, "environment": "{\"app_version\": \"'"$CI_COMMIT_TAG"'\"}", "message": "Deploy from CI: '"$CI_COMMIT_SHA"'" }'

Статус проверяем polling'ом или через webhook (Semaphore 2.9+).

Основные компоненты Semaphore

Компонент Назначение
Key Store Хранение SSH-ключей и паролей, шифруется в БД
Inventory Список управляемых хостов (статический YAML/INI или dynamic)
Environment Переменные окружения (extra_vars), хранятся в JSON
Repository Git-репозиторий с Ansible-плейбуками
Task Template Связка: репозиторий + плейбук + инвентарь + ключ + environment

Что входит в работу под ключ

Отметим: когда вы заказываете у нас внедрение Semaphore, мы предоставляем:

  • Развёртывание Semaphore + PostgreSQL (Docker или bare metal)
  • Настройку шифрования ключей и интеграцию с вашим Git (GitHub, GitLab, Bitbucket)
  • Создание проектов, инвентарей, ключей и Task Template
  • Интеграцию с CI/CD (примеры скриптов)
  • Документацию по администрированию и сценариям отката
  • Обучение команды (1–2 часа)
  • Гарантию работоспособности 2 недели после сдачи

Сроки: от 1 до 3 дней в зависимости от числа проектов. Оценим проект — свяжитесь с нами. Получите консультацию нашего инженера по внедрению.

Ограничения Semaphore и когда стоит выбрать AWX

Semaphore проще — это плюс и минус. Нет Survey-форм (параметры через Environment JSON), Smart Inventory и RBAC на уровне отдельных плейбуков. Для большой команды с разграничением доступа лучше AWX. Но для 2–5 инженеров и десятка плейбуков Semaphore — верное решение. Закажите пилотное внедрение — мы покажем, как Semaphore работает на ваших плейбуках.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1141