Ansible: Instalación Semaphore Ubuntu 24.04

  • Actualizamos e instalamos dependencias
su - root
apt update && apt upgrade -y && apt autoremove -y && apt clean
apt install -y wget tar git
  • Instalación de la BD
apt install -y postgresql postgresql-contrib
  • Verifica que el servicio esté activo:
systemctl status postgresql
  • Crear usuario y base de datos para Semaphore
su - postgres
psql
  • crear la base de datos y usuario para Semaphore:
CREATE USER semaphore_user WITH PASSWORD 'user4semaphore';
CREATE DATABASE semaphore_db OWNER semaphore_user;
GRANT ALL PRIVILEGES ON DATABASE semaphore_db TO semaphore_user;
\q
  • Salimos de postgres y root
exit
exit
  • Ahora vamos a crear los directorios para losplybooks y logs de semaphore
# con usuario cgi

mkdir -p /home/cgi/semaphore/logs
mkdir -p /home/cgi/semaphore/tmp
chown -R cgi:cgi /home/cgi/semaphore
  • Configuramos
semaphore setup
cd /root
wget https://github.com/semaphoreui/semaphore/releases/download/v2.16.32/semaphore_2.16.32_linux_amd64.deb
  • Instalamos
dpkg -i semaphore_2.16.32_linux_amd64.deb
exit
  • como el usuario cgi configuramos
semaphore setup
  • Wizzard
Hello! You will now be guided through a setup to:

1. Set up configuration for a MySQL/MariaDB database
2. Set up a path for your playbooks (auto-created)
3. Run database Migrations
4. Set up initial semaphore user & password

What database to use:
   1 - MySQL
   2 - BoltDB (DEPRECATED!!!)
   3 - PostgreSQL
   4 - SQLite
 (default 1): 3

db Hostname (default 127.0.0.1:5432): 

db User (default root): semaphore_user

db Password: user4semaphore

db Name (default semaphore): semaphore_db

Playbook path (default /tmp/semaphore): /home/cgi/semaphore/tmp

Public URL (optional, example: https://example.com/semaphore): 

Enable email alerts? (yes/no) (default no): 

Enable telegram alerts? (yes/no) (default no): 

Enable slack alerts? (yes/no) (default no): 

Enable Rocket.Chat alerts? (yes/no) (default no): 

Enable Microsoft Team Channel alerts? (yes/no) (default no): yes

Microsoft Teams Webhook URL: 

Enable LDAP authentication? (yes/no) (default no): 

Config output directory (default /home/cgi/semaphore):

...

> Username: gmatamoros
 > Email: gustavo.matamoros.gonzalez@una.ac.cr
WARN[0266] no rows in result set                         fields.level=Warn
 > Your name: Gustavo Matamoros González
 > Password: A2


You are all setup Gustavo Matamoros González!
 Re-launch this program pointing to the configuration file

./semaphore server --config /home/cgi/config.json

 To run as daemon:

nohup ./semaphore server --config /home/cgi/config.json &

 You can login with gustavo.matamoros.gonzalez@una.ac.cr or gmatamoros.
  • Esto crea el archivo
cat cat /home/cgi/semaphore/config.json
  • Contenido
{
 	"postgres": {
 		"host": "127.0.0.1:5432",
 		"user": "semaphore_user",
 		"pass": "user4semaphore",
 		"name": "semaphore_db",
 		"options": {
 			"sslmode": "disable"
 		}
 	},
 	"dialect": "postgres",
 	"tmp_path": "/home/cgi/semaphore/playbooks",
 	"cookie_hash": "58GUP2OjIQ3Tv5PUWcp2mO0Jhyhx4saaq7Xp2/1/KWw=",
 	"cookie_encryption": "gHB2cyoUOL8kZ7WWhWPJVm64XmQckRMR/ueq2ZZDe0U=",
 	"access_key_encryption": "OgErfTBwj43U3nUua3Hx+MK9IuipEtA/IuYWgfDJQNs=",
 	"microsoft_teams_alert": true
 }
  • Ahora lo probamos
semaphore server --config /home/cgi/semaphore/config.json
  • Ahora para crearlo como servicio
su - root
nano /etc/systemd/system/semaphore.service
  • Le agregamos
[Unit]
Description=Ansible Semaphore Web UI
After=network.target

[Service]
User=cgi
Group=cgi
WorkingDirectory=/home/cgi/semaphore
ExecStart=semaphore server --config /home/cgi/semaphore/config.json
Environment=PATH=/usr/local/bin:/usr/bin:/bin
Environment=SSH_AUTH_SOCK=/home/cgi/.ssh/ssh-agent.sock
Restart=always
StandardOutput=append:/home/cgi/semaphore/logs/semaphore.log
StandardError=append:/home/cgi/semaphore/logs/semaphore.err

[Install]
WantedBy=multi-user.target
  • Activar el servicio:
systemctl daemon-reload
systemctl enable --now semaphore
systemctl status semaphore
  • el programa se configuro para tener la carpeta de los temporales en /home/cgi/semaphore/tmp
  • Por tanto debemos programar un cron para borrar esta carpeta
crontab -e
  • Agregar el cron que: Limpia archivos con más de 7 días, una vez por semana a las 3 a.m.
0 3 * * 0 find /home/cgi/semaphore/tmp -type f -mtime +7 -delete