Files
semaphore/README.md
T
zpericic 2e971845d8 Initial semaphore 2.19.8 package with service, container and postgresql subpackages
Semaphore UI packaged from the upstream community (MIT) release
binaries, following the gitea packaging pattern: native systemd service
and Podman quadlet variants (mutually exclusive), with an optional
PostgreSQL backend via quadlet drop-ins. SQLite is the default
database; session/encryption secrets are generated into
/etc/semaphore/env on first install.
2026-08-18 12:22:56 +02:00

71 lines
2.6 KiB
Markdown

# semaphore
Semaphore UI (https://semaphoreui.com) packaged for InfoMaOS. Web UI and
API for running Ansible, Terraform, OpenTofu, Terragrunt, Bash and
PowerShell tasks.
Binaries are the upstream **community** (fully open source, MIT) release
builds. Download the source tarballs with:
spectool -g semaphore.spec
## Subpackages
- `semaphore` — common base: `semaphore` user/group (uid/gid 127),
`/etc/semaphore/config.json`, `/etc/semaphore/env` (secrets generated
on first install), `/var/lib/semaphore` data directory.
- `semaphore-service` — native binary + `semaphore.service` unit.
Requires `git` and `ansible`. Conflicts with `semaphore-container`.
- `semaphore-container` — Podman quadlet running
`docker.io/semaphoreui/semaphore:v<version>` in a pod
(`semaphore-pod`, web UI published on port 3000). The image bundles
Ansible, Terraform, OpenTofu and Terragrunt. Conflicts with
`semaphore-service`.
- `semaphore-postgresql` — optional PostgreSQL backend as a
`semaphore-db` quadlet container. With `-service` it runs standalone,
published on `127.0.0.1:5432`; with `-container` it joins the
semaphore pod. Without it, Semaphore uses SQLite at
`/var/lib/semaphore/database.sqlite` (zero configuration).
## Database
Default dialect is SQLite (`config.json`). Installing
`semaphore-postgresql` switches the dialect to PostgreSQL via
`SEMAPHORE_DB_*` environment drop-ins:
- service mode: `/etc/systemd/system/semaphore.service.d/database.conf`
- container mode: `/usr/share/containers/systemd/semaphore.container.d/database.conf`
Change the default `semaphore`/`semaphore` credentials in **both** the
relevant `database.conf` and
`/etc/containers/systemd/semaphore-db.container.d/credentials.conf`
before first start.
## First start
```bash
systemctl enable --now semaphore.service # service mode
systemctl start semaphore.service # container mode (enabled via pod drop-in)
# Create the initial admin user
semaphore user add --admin --login admin --name Admin \
--email admin@example.org --password '<password>' \
--config /etc/semaphore/config.json
```
In container mode `/usr/bin/semaphore` is a shim that runs the CLI
inside the running container.
Session/encryption secrets (`SEMAPHORE_COOKIE_HASH`,
`SEMAPHORE_COOKIE_ENCRYPTION`, `SEMAPHORE_ACCESS_KEY_ENCRYPTION`) are
generated into `/etc/semaphore/env` by the base package `%post` on first
install. Back up this file — `SEMAPHORE_ACCESS_KEY_ENCRYPTION` encrypts
the stored SSH keys and secrets, which are lost if it changes.
## Updating
1. Bump `Version` in the spec and the image tag in
`semaphore.container`.
2. `spectool -g semaphore.spec`
3. `./build.sh`