Semaphore Docs
Search
K

Installation

You can install Semaphore in 4 ways:
See also:

Snap

To install Semaphore via snap, run following command in terminal:
sudo snap install semaphore
Semaphore will be available by URL https://localhost:3000.
But to log in, you should create an admin user. Use the following commands:
sudo snap stop semaphore
sudo semaphore user add --admin \
--login john \
--name=John \
--password=12345
sudo snap start semaphore
You can check the status of the Semaphore service using the following command:
sudo snap services semaphore
It should print the following table:
Service Startup Current Notes
semaphore.semaphored enabled active -
After installation, you can set up Semaphore via Snap Configuration. Use the following command to see your Semaphore configuration:
sudo snap get semaphore
List of available options you can find in Configuration options reference.

Package manager

Python, Ansible and Git should be installed on your system.
Look into the manual installation on how to set-up your Python/Ansible/Systemd environment!
Download package file from Releases page.
*.deb for Debian and Ubuntu, *.rpm for CentOS and RedHat.
Here are several installation commands, depending on the package manager:
Debian / Ubuntu (x64)
Debian / Ubuntu (ARM64)
CentOS (x64)
CentOS (ARM64)
wget https://github.com/ansible-semaphore/semaphore/releases/\
download/v2.9.44/semaphore_2.9.44_linux_amd64.deb
sudo dpkg -i semaphore_2.9.44_linux_amd64.deb
wget https://github.com/ansible-semaphore/semaphore/releases/\
download/v2.9.44/semaphore_2.9.44_linux_arm64.deb
sudo dpkg -i semaphore_2.9.44_linux_arm64.deb
wget https://github.com/ansible-semaphore/semaphore/releases/\
download/v2.9.44/semaphore_2.9.44_linux_amd64.rpm
sudo yum install semaphore_2.9.44_linux_amd64.rpm
wget https://github.com/ansible-semaphore/semaphore/releases/\
download/v2.9.44/semaphore_2.9.44_linux_arm64.rpm
sudo yum install semaphore_2.9.44_linux_arm64.rpm
Setup Semaphore by using the following command:
semaphore setup
Now you can run Semaphore:
semaphore server --config=./config.json
Semaphore will be available via this URL https://localhost:3000.

Docker

Create a docker-compose.yml file with following content:
services:
# uncomment this section and comment out the mysql section to use postgres instead of mysql
#postgres:
#restart: unless-stopped
#image: postgres:14
#hostname: postgres
#volumes:
# - semaphore-postgres:/var/lib/postgresql/data
#environment:
# POSTGRES_USER: semaphore
# POSTGRES_PASSWORD: semaphore
# POSTGRES_DB: semaphore
# if you wish to use postgres, comment the mysql service section below
mysql:
restart: unless-stopped
image: mysql:8.0
hostname: mysql
volumes:
- semaphore-mysql:/var/lib/mysql
environment:
MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
MYSQL_DATABASE: semaphore
MYSQL_USER: semaphore
MYSQL_PASSWORD: semaphore
semaphore:
restart: unless-stopped
ports:
- 3000:3000
image: semaphoreui/semaphore:latest
environment:
SEMAPHORE_DB_USER: semaphore
SEMAPHORE_DB_PASS: semaphore
SEMAPHORE_DB_HOST: mysql # for postgres, change to: postgres
SEMAPHORE_DB_PORT: 3306 # change to 5432 for postgres
SEMAPHORE_DB_DIALECT: mysql # for postgres, change to: postgres
SEMAPHORE_DB: semaphore
SEMAPHORE_PLAYBOOK_PATH: /tmp/semaphore/
SEMAPHORE_ADMIN_PASSWORD: changeme
SEMAPHORE_ADMIN_NAME: admin
SEMAPHORE_ADMIN_EMAIL: admin@localhost
SEMAPHORE_ADMIN: admin
SEMAPHORE_ACCESS_KEY_ENCRYPTION: gs72mPntFATGJs9qK0pQ0rKtfidlexiMjYCH9gWKhTU=
SEMAPHORE_LDAP_ACTIVATED: 'no' # if you wish to use ldap, set to: 'yes'
SEMAPHORE_LDAP_HOST: dc01.local.example.com
SEMAPHORE_LDAP_PORT: '636'
SEMAPHORE_LDAP_NEEDTLS: 'yes'
SEMAPHORE_LDAP_DN_BIND: 'uid=bind_user,cn=users,cn=accounts,dc=local,dc=shiftsystems,dc=net'
SEMAPHORE_LDAP_PASSWORD: 'ldap_bind_account_password'
SEMAPHORE_LDAP_DN_SEARCH: 'dc=local,dc=example,dc=com'
SEMAPHORE_LDAP_SEARCH_FILTER: "(\u0026(uid=%s)(memberOf=cn=ipausers,cn=groups,cn=accounts,dc=local,dc=example,dc=com))"
depends_on:
- mysql # for postgres, change to: postgres
volumes:
semaphore-mysql: # to use postgres, switch to: semaphore-postgres
You must specify following confidential variables:
  • MYSQL_PASSWORD and SEMAPHORE_DB_PASS — password for the MySQL user.
  • SEMAPHORE_ADMIN_PASSWORD — password for the Semaphore's admin user.
  • SEMAPHORE_ACCESS_KEY_ENCRYPTION — key for encrypting access keys in database. It must be generated by using the following command: head -c32 /dev/urandom | base64.
Run the following command to start Semaphore with configured database (MySQL or Postgres):
docker-compose up
Semaphore will be available via the following URL http://localhost:3000.
For more information about the Docker Compose, see the Docker Compose reference.

Binary file

Python, Ansible and Git should be installed on your system.
Look into the manual installation on how to set-up your Python/Ansible/Systemd environment!
Download the *.tar.gz for your platform from Releases page. Unpack it and setup Semaphore using the following commands:
Linux (x64)
Linux (ARM64)
Windows (x64)
wget https://github.com/ansible-semaphore/semaphore/releases/\
download/v2.9.44/semaphore_2.9.44_linux_amd64.tar.gz
tar xf semaphore_2.9.44_linux_amd64.tar.gz
./semaphore setup
wget https://github.com/ansible-semaphore/semaphore/releases/\
download/v2.9.44/semaphore_2.9.44_linux_arm64.tar.gz
tar xf semaphore_2.9.44_linux_arm64.tar.gz
./semaphore setup
Invoke-WebRequest `
-Uri ("https://github.com/ansible-semaphore/semaphore/releases/" +
"download/v2.9.44/semaphore_2.9.44_windows_amd64.zip") `
-OutFile semaphore.zip
Expand-Archive -Path semaphore.zip -DestinationPath ./
./semaphore setup
Now you can run Semaphore:
./semaphore server --config=./config.json
Semaphore will be available via the following URL https://localhost:3000.

Run as a service

For more detailed information - look into the extended Systemd service documentation.
If you installed Semaphore via a package manager, or by downloading a binary file, you should create the Semaphore service manually.
Create the systemd service file:
Replace /path/to/semaphore and /path/to/config.json to your semaphore and config file path
sudo cat > /etc/systemd/system/semaphore.service <<EOF
[Unit]
Description=Semaphore Ansible
Documentation=https://github.com/ansible-semaphore/semaphore
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
ExecReload=/bin/kill -HUP $MAINPID
ExecStart=/path/to/semaphore server --config=/path/to/config.json
SyslogIdentifier=semaphore
Restart=always
RestartSec=10s
[Install]
WantedBy=multi-user.target
EOF
Start the Semaphore service:
sudo systemctl daemon-reload
sudo systemctl start semaphore
Check the Semaphore service status:
sudo systemctl status semaphore
To make the Semaphore service auto start:
sudo systemctl enable semaphore