Требования
У самого Semaphore почти нет жёстких требований. Большая часть того, что нужно подготовить, относится к автоматизации, которую он будет запускать, и к окружению вокруг неё. Пройдите эту страницу до Установки — и сама установка займёт считаные минуты.
Хост
Semaphore поставляется как один бинарный файл и как образ контейнера и работает на Linux, macOS и Windows. На Linux рассчитаны пакеты, образы Docker и Helm-чарт, и именно он используется в большинстве установок.
Сам сервис лёгкий: это процесс на Go, обслуживающий веб-интерфейс. Память и CPU на самом деле потребляют Ansible, Terraform и ваши скрипты, работающие параллельно на той же машине. Подбирайте размер хоста под работу, а не под Semaphore, и ограничивайте параллельность настройкой проекта Max number of parallel tasks — или вынесите выполнение на раннеры и подбирайте размер уже для них.
Заложите постоянное хранилище в двух местах: база данных и каталог из tmp_path, куда
клонируются репозитории. В Docker это означает том; контейнер без него теряет данные при
пересоздании.
База данных
Выберите её до установки, потому что смена потом означает миграцию данных.
| СУБД | Когда использовать |
|---|---|
| SQLite | Один сервер, одна команда. Встроена, ничего настраивать не нужно, используется по умолчанию. |
| PostgreSQL или MySQL/MariaDB | Сервис важен более чем для нескольких человек, вы хотите резервное копирование и мониторинг средствами имеющейся платформы баз данных или планируете запускать более одного узла. |
Высокая доступность требует PostgreSQL или MySQL и Redis и не может работать с SQLite. Если HA есть в ваших планах, начинайте с PostgreSQL.
Создайте базу данных и пользователя с правами на неё до установки; свои таблицы Semaphore создаёт сам при первом запуске и при каждом обновлении.
Сетевой доступ
| Semaphore должен иметь доступ | Зачем |
|---|---|
| К вашим удалённым Git-репозиториям | Клонирование репозиториев, на которые указывают шаблоны. |
| К хостам и облачным API, которы е вы автоматизируете | Собственно выполнение работы. |
| К вашему провайдеру идентификации, если он используется | Вход через LDAP или OpenID Connect. |
| К вашим каналам уведомлений | Электронная почта, Telegram, Slack и остальные. |
Пользователи обращаются к веб-интерфейсу на порт 3000, если вы его не изменили.
Поставьте перед ним TLS до того, как кто-либо начнёт
входить: по нему передаются сессии и API-токены.
Если задачи будет выполнять раннер, то доступ к удалённым Git-репозиториям и целевым хостам нужен ему, и ему же нужен исходящий доступ к серверу Semaphore. Сервер никогда не подключается к раннеру.
Инструменты автоматизации
Всё, что запускает задача, должно быть установлено там, где она выполняется, — на сервере, на раннере или в образе контейнера, который использует исполнитель.
- В образах Docker уже есть Ansible, Terraform, OpenTofu и обычные зависимости.
Дополнительные пакеты Python указываются в примонтированном
requirements.txt, см. Установка дополнительных зависимостей Python. - Установка из пакета или бинарного файла даёт вам только Semaphore. Git, Python, Ansible и любые коллекции или провайдеры устанавливайте самостоятельно, см. Установка вручную.
Убедитесь, что ваш playbook или конфигурация запускаются из командной строки на этой машине, от имени пользователя, под которым работает Semaphore, прежде чем создавать из них шаблон. Почти каждая жалоба «локально всё работает» сводится к отсутствующей коллекции, провайдеру или пакету Python.
Учётные данные, которые стоит подготовить
Соберите их до первого шаблона, иначе каждое из них станет отдельной остановкой:
- Deploy-ключ или токен для каждого репозитория, который будет клонировать Semaphore.
- SSH-ключи или логины для доступа к хостам, которыми вы управляете.
- Любые облачные учётные данные, которые требуются вашему Terraform или модулям.
- Пароль Ansible Vault, если ваши playbook'и зашифрованы.
Всё это должно храниться в Хранилище ключей, а не в репозитории.
Решения, которые нужно принять сразу
Три выбора дёшевы сейчас и дороги потом:
- СУБД, как описано выше.
- URL, по которому будут обращаться пользователи. Задайте его в
web_host. От него зависят обратные прокси, redirect URI для OIDC, цели вебхуков и ссылки в уведомлениях. access_key_encryption. Сгенерируйте его при установке, сохраните резервную копию отдельно и не меняйте без веской причины: им зашифрован каждый хранимый секрет.
head -c32 /dev/urandom | base64
Что дальше
- Установка — выберите способ и установите.
- Конфигурация — как задаются опции и что они означают.
- Начало работы — от установленного сервера до первой задачи.