Настройка 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, создаём проект и добавляем репозиторий с плейбуками.
Шаги по развёртыванию
- Создайте
docker-compose.ymlс указанным содержимым и файл.envс переменнымиDB_PASSWORD,ADMIN_PASSWORD,ENCRYPTION_KEY. - Запустите
docker-compose up -d. - Откройте браузер на
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 работает на ваших плейбуках.







