Salta ai contenuti
Sirio è in beta privata: sorgenti e installer vengono inviati via email a chi la prova. Chiedi di partecipare.

Installazione

Serve una macchina Linux con systemd, amd64 o arm64. Docker può arrivare dopo: se manca, il wizard del primo avvio propone di installarlo.

Finestra del terminale
curl -fsSLO https://github.com/marsaldev/siriosysadmin/releases/latest/download/install.sh
sudo bash install.sh

Finito. Lo script porta con sé le unit systemd e gli helper della sua release; scarica il binario per l’architettura della macchina e lo verifica con il checksums.txt della release — niente da compilare, niente Go né Node. Serve curl o wget.

Senza scaricare nulla sulla macchina — offline, o dietro un proxy — porta tu install.sh e il binario della release (anche checksums.txt, se vuoi la verifica del checksum) e passa il binario come argomento:

Finestra del terminale
sudo bash install.sh ./sirio-sysadmin-vX.Y.Z-linux-amd64

Così lo script non tocca mai la rete. Verifica il binario con un checksums.txt nella stessa cartella, se c’è, e rifiuta un binario compilato per l’altra architettura o di una release diversa da quella dello script — le unit che porta con sé sono della sua release.

Per una versione precisa invece dell’ultima, prendi lo script da quella release:

Finestra del terminale
curl -fsSLO https://github.com/marsaldev/siriosysadmin/releases/download/v0.5.0/install.sh

Usa le unit systemd e gli helper che porta con sé e il binario che scarica o che gli passi, e:

  1. crea l’utente di sistema sirio e lo aggiunge al gruppo docker;
  2. installa il binario in /usr/local/bin/sirio-sysadmin;
  3. prepara /var/lib/sirio con permessi 0700;
  4. installa sirio-sysadmin.service e lo (ri)avvia;
  5. se sulla macchina c’è uno fra apt-get, dnf, yum o apk, installa anche l’helper dei pacchetti (/usr/local/lib/sirio/sirio-pkg) con le unit sirio-pkg.service e sirio-pkg.path, e attiva la seconda. Senza, la sezione Pacchetti del pannello resta in sola lettura — il perché è in pacchetti.md;
  6. alla stessa condizione, installa l’helper per l’installazione di Docker (/usr/local/lib/sirio/sirio-docker-install) con le sue unit, così il wizard del primo avvio può installare Docker se manca;
  7. installa l’helper dei log dei container (/usr/local/lib/sirio/sirio-logs) con le unit sirio-logs.service e sirio-logs.path, che permettono a Pulisci sul log di un container di eliminarne davvero i file di log. Senza, i log si possono solo leggere;
  8. con apt-get, dnf o yum, installa l’helper di fail2ban (/usr/local/lib/sirio/sirio-fail2ban) con le unit sirio-fail2ban.service e sirio-fail2ban.path, che permettono alla pagina Porte di installare fail2ban e attivarne la jail SSH. Senza, fail2ban viene solo controllato;
  9. installa l’helper di controllo di fail2ban (/usr/local/lib/sirio/sirio-fail2ban-ctl) con le unit sirio-fail2ban-ctl.service e sirio-fail2ban-ctl.path, che permettono alla pagina fail2ban di mostrare le jail attive e gli indirizzi che bannano. Senza, non vengono mostrati;
  10. installa l’helper di alimentazione (/usr/local/lib/sirio/sirio-power) con le unit sirio-power.service e sirio-power.path, che permettono agli amministratori di riavviare o spegnere il server dal menù utente. Senza, il menù non offre nessuna delle due voci.

Verifica:

Finestra del terminale
systemctl status sirio-sysadmin
journalctl -u sirio-sysadmin -f
curl -s localhost:22722/api/status

Il pannello ascolta su 0.0.0.0:22722: lo raggiungi da subito su http://IP-DELLA-MACCHINA:22722, senza bisogno di un dominio. Se sulla macchina c’è un firewall, permetti la porta:

Finestra del terminale
sudo ufw allow 22722/tcp # ufw (Debian/Ubuntu)
sudo firewall-cmd --permanent --add-port=22722/tcp && sudo firewall-cmd --reload # firewalld (famiglia RHEL)

Su molte VM cloud l’interfaccia di rete ha solo un indirizzo privato (10.x, 172.16–31.x, 192.168.x) e il provider vi associa quello pubblico con un NAT 1:1, per cui sulla macchina non compare mai. Quando l’installer trova solo un indirizzo privato lo segnala e, da terminale, chiede quello pubblico per stampare l’URL giusto (Invio per saltare; le installazioni non presidiate non si fermano). In questa configurazione spesso anche il provider ha un suo firewall (security group): apri 22722/tcp anche lì.

Su http://IP:22722 la connessione è in chiaro: il cookie di sessione e la password del primo accesso viaggiano leggibili in rete. Va bene per la configurazione iniziale su una rete di cui ti fidi; appena hai un dominio, metti davanti HTTPS e riporta l’ascolto sul loopback.

Le impostazioni si cambiano con sudo systemctl edit sirio-sysadmin, sotto un’intestazione [Service]: finiscono in un drop-in che gli aggiornamenti non toccano. (Se modifichi direttamente il file della unit, un aggiornamento lo lascia com’è e scrive la nuova versione accanto, come sirio-sysadmin.service.new, da unire a mano.)

Environment=SIRIO_LISTEN=127.0.0.1:22722
Environment=SIRIO_SECURE_COOKIES=true
sirio.esempio.it {
reverse_proxy 127.0.0.1:22722
encode gzip
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains"
}
}

Caddy ottiene e rinnova il certificato da solo, e lascia passare i WebSocket senza altra configurazione.

server {
listen 443 ssl http2;
server_name sirio.esempio.it;
ssl_certificate /etc/letsencrypt/live/sirio.esempio.it/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/sirio.esempio.it/privkey.pem;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
location / {
proxy_pass http://127.0.0.1:22722;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_buffering off;
proxy_read_timeout 3600s;
}
}
server {
listen 80;
server_name sirio.esempio.it;
return 301 https://$host$request_uri;
}

Due dettagli non sono opzionali:

  • gli header Upgrade e Connection servono ai WebSocket di log e statistiche;
  • proxy_buffering off evita che i log arrivino a blocchi con secondi di ritardo (e il proxy_read_timeout lungo evita che un log seguito venga interrotto).

In alternativa Sirio può governare lui stesso un Caddy, come container, e pubblicare sia il pannello sia i siti che ospiti sulla macchina. Per fargli servire anche il pannello, su https://DOMINIO:22722 con certificato automatico:

Environment=SIRIO_PROXY_ENABLED=true
Environment=SIRIO_PANEL_DOMAIN=sirio.esempio.it
Environment=SIRIO_LISTEN=127.0.0.1:22723

Qui SIRIO_LISTEN va su un’altra porta, non su 127.0.0.1:22722 come nello snippet sopra: il proxy pubblica il pannello sulla 22722 e raggiunge Sirio tramite un socket Unix, e Sirio si rifiuta di partire se entrambi vogliono la stessa porta. I cookie sicuri si attivano da soli. Installa il proxy da Proxy → Installa prima o dopo: in entrambi i casi Sirio pubblica la porta del pannello appena il container esiste.

Il proxy esistente sull’host va fermato prima: occupa le porte 80 e 443. Procedura completa, scelta della porta (SIRIO_PANEL_PORT) e migrazione in domini.md.

Environment=SIRIO_TLS_CERT=/etc/sirio/fullchain.pem
Environment=SIRIO_TLS_KEY=/etc/sirio/privkey.pem
Environment=SIRIO_LISTEN=0.0.0.0:443

Con TLS diretto i cookie sicuri si attivano da soli. Il rinnovo del certificato resta a carico tuo (systemctl reload non basta: serve un riavvio del servizio).

Dopo aver messo HTTPS, imposta anche:

Environment=SIRIO_SECURE_COOKIES=true

e riavvia con sudo systemctl restart sirio-sysadmin.

Apri il pannello: al primo avvio compare il wizard che crea l’account amministratore. La password deve avere almeno 10 caratteri; i tentativi di accesso sono limitati a 10 ogni 15 minuti per indirizzo IP.

Dietro reverse proxy, tutte le richieste arrivano dall’IP del proxy: il limite vale quindi per l’insieme dei client. È voluto — fidarsi degli header X-Forwarded-For permetterebbe di aggirare il limite falsificandoli.

Non c’è un recupero via email. Qualsiasi account può avere una nuova password in due modi:

  • dal pannello: un amministratore la imposta da Utenti → Reimposta password;
  • dalla riga di comando, sulla macchina — la via per rientrare quando nessun amministratore riesce ad accedere:
Finestra del terminale
sudo -u sirio /usr/local/bin/sirio-sysadmin -data-dir /var/lib/sirio -reset-password admin@example.com

Mostra l’account (email, ruolo, data di creazione) e chiede la nuova password due volte, senza mostrarla a schermo; valgono le stesse regole del pannello (almeno 10 caratteri). Se l’email non corrisponde a nessun account, elenca quelli esistenti. Da uno script la password può arrivare invece dallo standard input, su una riga, chiesta una volta sola:

Finestra del terminale
printf '%s\n' "$NUOVA_PASSWORD" | sudo -u sirio /usr/local/bin/sirio-sysadmin -data-dir /var/lib/sirio -reset-password admin@example.com

In entrambi i casi l’account conserva ruolo e permessi, le sue sessioni aperte vengono chiuse e il reset finisce nel registro attività come user.password.reset. Non serve fermare il servizio: lo stato viene riletto dal database a ogni richiesta, quindi un’istanza in esecuzione se ne accorge subito.

-reset-admin è l’opzione drastica: elimina tutti gli account amministratore e riporta il wizard del primo avvio, per crearne uno nuovo da zero. Usalo quando vuoi sostituire gli amministratori, non recuperarne uno.

Finestra del terminale
sudo -u sirio /usr/local/bin/sirio-sysadmin -data-dir /var/lib/sirio -reset-admin

Elenca gli account amministratore che eliminerà e quanti utenti non amministratori restano, poi chiede di digitare reset per confermare. Gli utenti non amministratori conservano account, password e permessi; repository, pipeline, siti, segreti e registro attività restano dove sono, e il reset finisce nel registro come admin.reset, una voce per ogni account eliminato. Ricrea poi gli eventuali altri amministratori da Utenti.

Finché il wizard non è completato, chi apre per primo il pannello crea l’amministratore. Esegui il reset quando puoi completare subito il wizard, meglio se il pannello non è esposto oltre una rete di cui ti fidi — oppure preferisci -reset-password, che quella finestra non la apre mai.

Una volta configurato un server degli aggiornamenti, Sirio si aggiorna da solo da Impostazioni → Aggiornamenti, a mano o in automatico: vedi aggiornamenti.md. Altrimenti rilancia lo script di installazione, nello stesso modo in cui hai installato:

Finestra del terminale
curl -fsSLO https://github.com/marsaldev/siriosysadmin/releases/latest/download/install.sh
sudo bash install.sh

Sostituisce binario, unit e helper, conserva i dati in /var/lib/sirio e le impostazioni nel drop-in, e riavvia il servizio. La versione in esecuzione è mostrata in Impostazioni → Release e da curl -s localhost:22722/api/status.

Le migrazioni del database vengono applicate all’avvio. I run rimasti in corso durante il riavvio sono marcati come falliti: nessuna esecuzione resta appesa.

Tutto lo stato sta in /var/lib/sirio:

sirio.db database (utenti, repository, pipeline, storico, audit)
secret.key chiave AES che cifra token e chiavi SSH ← senza questa il database è inutile
runs/ log delle esecuzioni
workspaces/ checkout dei repository (rigenerabili)
Finestra del terminale
sudo systemctl stop sirio-sysadmin
sudo tar czf sirio-backup-$(date +%F).tar.gz -C /var/lib sirio
sudo systemctl start sirio-sysadmin

Conserva secret.key separatamente dal database: insieme sono la chiave di casa.

Finestra del terminale
sudo systemctl disable --now sirio-sysadmin sirio-pkg.path sirio-docker-install.path sirio-logs.path \
sirio-fail2ban.path sirio-fail2ban-ctl.path sirio-update.path sirio-power.path
sudo rm -rf /etc/systemd/system/sirio-sysadmin.service* /etc/systemd/system/sirio-pkg.* \
/etc/systemd/system/sirio-docker-install.* /etc/systemd/system/sirio-logs.* \
/etc/systemd/system/sirio-fail2ban.* /etc/systemd/system/sirio-fail2ban-ctl.* \
/etc/systemd/system/sirio-update.* /etc/systemd/system/sirio-power.* \
/usr/local/lib/sirio /usr/local/bin/sirio-sysadmin
sudo systemctl daemon-reload
sudo rm -rf /var/lib/sirio # cancella anche i dati
sudo userdel sirio