Несколько лет назад я писал о Ansible Semaphore — удобном интерфейсе для Ansible, который гораздо проще в настройке и использовании, чем, например, Ansible AWX. С тех пор Semaphore UI превратился в нечто большее, чем просто графическая оболочка для Ansible. Теперь он поддерживает не только Ansible, но и Terraform, OpenTofu, Terragrunt, PowerShell, а также пользовательские скрипты. Если вам не нужна сложная система CI/CD вроде GitLab, Semaphore UI может стать идеальным решением для автоматизации.
Почему Semaphore UI?
Интерфейс Semaphore простой, современный и мощный. Развернуть его с помощью Docker Compose можно буквально за пять минут (пример кода ниже).
Этот инструмент отлично подходит для тех, кому не нужны сложные системы вроде GitLab, которые требуют больших ресурсов и сложны в настройке. Semaphore UI предлагает баланс между функциональностью и простотой.
Почему Semaphore UI может вам подойти:
- Простота установки: Развертывание на новой виртуальной машине или в контейнере занимает считанные минуты, после чего можно сразу импортировать плейбуки и репозитории Terraform.
- Поддержка множества инструментов: Управляйте Ansible, Terraform, PowerShell и другими инструментами из одного интерфейса.
- Встроенное планирование: Настраивайте автоматические задачи, например, ночные проверки безопасности или еженедельные аудиты инфраструктуры.
Теперь это не только Ansible
Раньше Semaphore поддерживал только Ansible, но теперь он может работать с:
-
Управление конфигурациями через Ansible
- Графический интерфейс для мониторинга выполнения задач.
- Совместная работа над шаблонами.
- Обнаружение дрейфа конфигураций.
-
Развертывание инфраструктуры с Terraform и OpenTofu
- Просмотр планов прямо в интерфейсе.
- Упрощенное применение изменений.
- Возможность отката к последней рабочей версии.
-
Работа с Terragrunt
- Стандартизация конфигураций для разных сред (dev, staging, prod).
-
Автоматизация Windows с PowerShell
- Запуск скриптов для настройки IIS, Active Directory и обновлений безопасности.
- Сбор логов прямо в веб-консоли.
- Пользовательские скрипты
- Запуск Python, Bash или любых других скриптов с возможностью планирования.
Установка Semaphore UI
Для установки используйте Docker Compose. Пример конфигурации:
yaml
version: ‘3.8’
services:
semaphore-postgres:
image: postgres:14
restart: always
ports:
- ‘5432:5432’
hostname: postgres
volumes: -
/mnt/cephfs/semaphore/postgres:/var/lib/postgresql/data
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}semaphore-ui:
image: semaphoreui/semaphore:latest
restart: always
ports: - ‘3000:3000’
volumes: - /mnt/cephfs/semaphore/data:/tmp/semaphore
environment:
SEMAPHORE_DB_USER: ${POSTGRES_USER}
SEMAPHORE_DB_PASS: ${POSTGRES_PASSWORD}
SEMAPHORE_DB_HOST: postgres
SEMAPHORE_DB_PORT: ${POSTGRES_DB_PORT:-5432}
SEMAPHORE_DB_DIALECT: postgres
SEMAPHORE_DB: ${POSTGRES_DB}
SEMAPHORE_PLAYBOOK_PATH: /tmp/semaphore/
SEMAPHORE_ADMIN_PASSWORD: ${SEMAPHORE_ADMIN_PASSWORD}
SEMAPHORE_ADMIN_NAME: ${SEMAPHORE_ADMIN_NAME}
SEMAPHORE_ADMIN_EMAIL: ${SEMAPHORE_ADMIN_EMAIL}
SEMAPHORE_ADMIN: ${SEMAPHORE_ADMIN_USER}
SEMAPHORE_EMAIL_HOST: ${SEMAPHORE_EMAIL_HOST}
SEMAPHORE_EMAIL_PORT: ${SEMAPHORE_EMAIL_PORT}
SEMAPHORE_EMAIL_SENDER: ${SEMAPHORE_EMAIL_SENDER}
SEMAPHORE_EMAIL_ALERT: ${SEMAPHORE_EMAIL_ALERT}
SEMAPHORE_EMAIL_ALERT_RECIPIENTS: ${SEMAPHORE_EMAIL_ALERT_RECIPIENTS}
SEMAPHORE_ACCESS_KEY_ENCRYPTION: ${SEMAPHORE_ACCESS_KEY_ENCRYPTION}
depends_on: - semaphore-postgres
networks:
default:
name: npm-stack_nginxproxy
external: true
Пример файла .env:
plaintext
PostgreSQL settings
POSTGRES_USER=semaphore
POSTGRES_PASSWORD=ChangeMeToAStrongPassword!
POSTGRES_DB=semaphore
POSTGRES_DB_PORT=5432
Semaphore admin credentials
SEMAPHORE_ADMIN_NAME=admin
SEMAPHORE_ADMIN_USER=admin
SEMAPHORE_ADMIN_PASSWORD=SuperSecretAdminPass123!
Email notifications
SEMAPHORE_EMAIL_HOST=mail.yourdomain.com
SEMAPHORE_EMAIL_PORT=25
SEMAPHORE_EMAIL_SENDER=admin@yourdomain.com
SEMAPHORE_EMAIL_ALERT=true
SEMAPHORE_EMAIL_ALERT_RECIPIENTS=team@yourdomain.com
Access key encryption (base64)
SEMAPHORE_ACCESS_KEY_ENCRYPTION=Zm9vYmFyMTIzIT8kKiYoKSctPUB+
Основные концепции Semaphore
- Проекты: Контейнеры для автоматизации, например, для лабораторных задач или развертывания в prod.
- Инвентари: Список целевых серверов для выполнения задач.
- Шаблоны задач: Определяют, какие действия выполнять (например, playbook Ansible или скрипт Terraform).
- Задачи: Экземпляры выполнения шаблонов.
- Расписания: Автоматический запуск задач по расписанию (cron, ежедневно, еженедельно).
Создание первого проекта
-
Новый проект
- Нажмите Create Project и укажите название (например, "Home Lab Automation").
-
Добавление инвентаря
- В разделе Inventories укажите хосты (IP или имена).
-
Создание шаблона задачи Ansible
- В Task Templates выберите Ansible, укажите репозиторий Git и playbook.
- Запуск playbook
- Нажмите Run и наблюдайте за выполнением в реальном времени.
- Планирование задач
- Настройте автоматический запуск через Add Schedule.
Дополнительные возможности
- Контроль доступа (RBAC): Разграничение прав для команд.
- Аудит: Логирование всех действий.
- Уведомления: Slack, Telegram, email.
- Хранилище секретов: Безопасное хранение SSH-ключей и токенов.
API и интеграции
Semaphore предоставляет REST API для управления проектами, задачами и интеграций с Git.
Платная версия
Доступны Pro и Enterprise версии с дополнительными функциями:
- Расширенный мониторинг.
- Поддержка Enterprise-инструментов.
- Приоритетная поддержка.
Заключение
Semaphore UI превратился из удобного интерфейса для Ansible в мощный инструмент для автоматизации, поддерживающий Terraform, PowerShell и многое другое. Это отличный вариант, если вам не нужны сложные CI/CD-системы. Попробуйте и поделитесь впечатлениями в комментариях!