Accessing Semaphore UI
Open in browser: http://<SERVER_IP>
Login:
- Username:
admin - Password: stored inside
/root/semaphore/docker-compose.yml(SEMAPHORE_ADMIN_PASSWORD)
Retrieve password:
grep SEMAPHORE_ADMIN_PASSWORD /root/semaphore/docker-compose.yml
Important Files & Directories
- Install Path:
/root/semaphore - Compose File:
/root/semaphore/docker-compose.yml - Caddy Config:
/etc/caddy/Caddyfile - Postgres Volume:
semaphore_postgres - Data Volume:
semaphore_data - Config Volume:
semaphore_config - Temp Volume:
semaphore_tmp
Domain & HTTPS (Caddy)
0. HTTPS does NOT work with IP addresses.
1. Point a domain (e.g. example.com) to your server’s IP address.
2. Update /etc/caddy/Caddyfile:
example.com {
reverse_proxy 127.0.0.1:3000 {
header_up X-Real-IP {client_ip}
}
}
3. Restart Caddy:
systemctl restart caddy
4. Caddy will automatically issue and renew SSL certificates.
Managing the Stack
cd /root/semaphore
Check status:
docker compose ps
View logs:
docker compose logs -f
Restart services:
docker compose restart
Stop stack:
docker compose down
Start stack:
docker compose up -d
Notes
- PostgreSQL is deployed as a container (
semaphore_db) - UI is only exposed via Caddy (no direct port exposure)