前提条件
Semaphore 自体の必須要件はごくわずかです。準備すべきもののほとんどは、実行される自動化処理と、その周囲の環境に属します。インストール の前にこのページをひととおり進めておけば、インストール自体は数分で終わります。
ホスト
Semaphore は単一のバイナリとコンテナーイメージとして提供され、Linux、macOS、Windows で動作します。パッケージ、Docker イメージ、Helm チャートが対象としているのは Linux であり、ほとんどのデプロイでも Linux が使われています。
このサービス自体は軽量です。Web インターフェイスを提供する Go のプロセスにすぎません。実際にメモリーと CPU を消費するのは、同じマシン上で並列に動く Ansible、Terraform、そしてあなたのスクリプトです。ホストのサイズは Semaphore ではなく作業内容に合わせて決め、プロジェクト設定の 並列タスクの最大数 で同時実行数を制限してください。あるいは実行を ランナー へ移し、そちらのサイズを決めてください。
永続ストレージは 2 か所に必要です。データベースと、リポジトリがクローンされる tmp_path のディレクトリです。Docker ではボリュームがそれにあたり、ボリュームのないコンテナーは再作成時にデータを失います。
データベース
後から移行するとデータの移送が必要になるため、インストール前に 1 つ選んでください。
| エンジン | 選ぶ場面 |
|---|---|
| SQLite | サーバー 1 台、チーム 1 つ。同梱されており、設定は不要で、既定です。 |
| PostgreSQL または MySQL/MariaDB | このサービスがごく少数を超える人にとって重要である場合、既存のデータベース基盤でバックアップや監視を行いたい場合、または複数ノードでの運用を計画している場合。 |
高可用性 には PostgreSQL または MySQL に加えて Redis が必要で、SQLite は使えません。HA が 計画にあるなら、最初から PostgreSQL で始めてください。
インストール前に、データベースとそれに対する権限を持つユーザーを作成してください。テーブルは Semaphore が初回起動時とアップグレードのたびに自分で作成します。
ネットワークアクセス
| Semaphore が到達する必要のある先 | 目的 |
|---|---|
| 自分の Git リモート | テンプレートが指すリポジトリのクローン。 |
| 自動化の対象となるホストとクラウド API | 実際の作業の実行。 |
| ID プロバイダー(使用する場合) | LDAP または OpenID Connect によるサインイン。 |
| 通知チャネル | 電子メール、Telegram、Slack など。 |
変更しない限り、ユーザーはポート 3000 で Web インターフェイスに接続します。誰かがサインインする前に、その前段に TLS を配置してください。セッションと API トークンがその経路を通ります。
ランナーがタスクを実行する場合は、ランナー のほうが Git リモートと対象ホストへのアクセスを必要とし、さらに Semaphore サーバーへの外向きアクセスを必要とします。サーバーがランナーへ接続することは決してありません。
自動化ツール
タスクが実行するものは、それが実行される場所、すなわちサーバー、ランナー、またはエグゼキューターが使うコンテナーイメージにインストールされている必要があります。
- Docker イメージには Ansible、Terraform、OpenTofu と一般的な依存関係が同梱されています。追加の Python パッケージはマウントした
requirements.txtに記述します。追加の Python 依存関係のインストール を参照してください。 - パッケージまたはバイナリによるインストールでは Semaphore だけが入ります。Git、Python、Ansible、および必要なコレクションやプロバイダーは自分でインストールしてください。手動インストール を参照してください。
テンプレートを作成する前に、プレイブックや構成が、Semaphore の実行ユーザーとしてそのマシンのシェルから動作することを確認してください。「ローカルでは動く」という報告のほぼすべては、コレクション、プロバイダー、Python パッケージの不足に行き着きます。
用意しておく認証情報
そうしないと 1 つずつ作業が中断するため、最初のテンプレートを作る前に次のものを集めておいてください。
- Semaphore がクローンする各リポジトリの デプロイキーまたはトークン。
- 管理対象ホストへ接続するための SSH キーまたはログイン情報。
- Terraform やモジュールが必要とする クラウドの認証情報。
- プレイブックが暗号化されている場合は Ansible Vault のパスワード。
これらはすべてリポジトリではなく キーストア に置くべきものです。
先に決めておくべきこと
次の 3 つの選択は、いま決めれば安価で、後回しにすると高くつきます。
- 上記の データベースエンジン。
- ユーザーが使う URL。
web_hostとして設定します。リバースプロキシ、OIDC のリダイレクト URI、Webhook の宛先、通知内のリンクは、いずれもこれに由来します。 access_key_encryption。 インストール時に生成し、別途バックアップし、安易にローテーションしないでください。保存されるすべてのシークレットがこれで暗号化されます。
head -c32 /dev/urandom | base64