Skip to content

Self-host Semaphore UI

updated Sep 2026prices checked · Jul 2026Install verified on Ubuntu 26.04 · Sep 2026 · how we test
We earn commissions when you shop through the links below. Full disclosure →

A web interface for running Ansible playbooks, as well as Terraform/OpenTofu, PowerShell and shell scripts, with projects, inventories, stored credentials, schedules and a run history.

Key facts

CategoryCI/CD
LicenseMIT
StackGo, Vue
Min RAM512 MB
Official imageyes
Measured idle RAM11 MB
Difficulty

What you need

  • Any VPS with at least 512 MB of RAM
  • A domain you control — most self-hosted setups need HTTPS in front of them
  • Under an hour if you've used Docker before
Where to host itaffiliate disclosure
Hetzner Cloudrun it on
From $23.59/mo · 2 vCPU / 4 GB / 80 GB · EU + US
Get Hetzner Cloud (opens in new tab)
Kamaterafree trial
From $4/mo · 1 vCPU / 1 GB / 20 GB · US + EU + Asia
Start free on Kamatera → (opens in new tab)
DigitalOceanalso works on
From $6/mo · 1 vCPU / 1 GB / 25 GB · US + EU + Asia
Deploy on DigitalOcean → (opens in new tab)

Paid link — we earn a commission if you shop through it.

Install

Run these commands on your server:

# Semaphore UI — official image with the documented SQLite option (v2.16+)
mkdir -p ~/semaphore && cd ~/semaphore
cat > .env <<EOF
SEMAPHORE_ADMIN_PASSWORD=$(openssl rand -hex 16)
SEMAPHORE_ACCESS_KEY_ENCRYPTION=$(head -c32 /dev/urandom | base64)
EOF
cat > docker-compose.yml <<'EOF'
services:
  semaphore:
    image: semaphoreui/semaphore:latest
    restart: unless-stopped
    ports: ["3000:3000"]
    volumes: ["semaphore-config:/etc/semaphore", "semaphore-data:/var/lib/semaphore"]
    environment:
      SEMAPHORE_DB_DIALECT: sqlite
      SEMAPHORE_DB: /etc/semaphore/semaphore.sqlite
      SEMAPHORE_PLAYBOOK_PATH: /tmp/semaphore/
      SEMAPHORE_ADMIN: admin
      SEMAPHORE_ADMIN_NAME: admin
      SEMAPHORE_ADMIN_EMAIL: admin@localhost
      SEMAPHORE_ADMIN_PASSWORD: ${SEMAPHORE_ADMIN_PASSWORD}
      SEMAPHORE_ACCESS_KEY_ENCRYPTION: ${SEMAPHORE_ACCESS_KEY_ENCRYPTION}
      TZ: UTC
volumes:
  semaphore-config:
  semaphore-data:
EOF
docker compose up -d
# open http://SERVER_IP:3000 — user admin, password: grep ADMIN_PASSWORD ~/semaphore/.env

More self-hosted tools

We use analytics cookies (Google Analytics, PostHog) to see which guides are useful. No ad networks, no cross-site tracking. See our privacy policy.