Installazione
Serve una macchina Linux con systemd, amd64 o arm64. Docker può arrivare dopo: se manca, il
wizard del primo avvio propone di installarlo.
1. Installare
Sezione intitolata “1. Installare”Da una release (consigliato)
Sezione intitolata “Da una release (consigliato)”curl -fsSLO https://github.com/marsaldev/siriosysadmin/releases/latest/download/install.shsudo bash install.shFinito. 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:
sudo bash install.sh ./sirio-sysadmin-vX.Y.Z-linux-amd64Così 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:
curl -fsSLO https://github.com/marsaldev/siriosysadmin/releases/download/v0.5.0/install.sh2. Cosa fa lo script
Sezione intitolata “2. Cosa fa lo script”Usa le unit systemd e gli helper che porta con sé e il binario che scarica o che gli passi, e:
- crea l’utente di sistema
sirioe lo aggiunge al gruppodocker; - installa il binario in
/usr/local/bin/sirio-sysadmin; - prepara
/var/lib/siriocon permessi0700; - installa
sirio-sysadmin.servicee lo (ri)avvia; - 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 unitsirio-pkg.serviceesirio-pkg.path, e attiva la seconda. Senza, la sezione Pacchetti del pannello resta in sola lettura — il perché è in pacchetti.md; - 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; - installa l’helper dei log dei container (
/usr/local/lib/sirio/sirio-logs) con le unitsirio-logs.serviceesirio-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; - con apt-get, dnf o yum, installa l’helper di fail2ban (
/usr/local/lib/sirio/sirio-fail2ban) con le unitsirio-fail2ban.serviceesirio-fail2ban.path, che permettono alla pagina Porte di installare fail2ban e attivarne la jail SSH. Senza, fail2ban viene solo controllato; - installa l’helper di controllo di fail2ban (
/usr/local/lib/sirio/sirio-fail2ban-ctl) con le unitsirio-fail2ban-ctl.serviceesirio-fail2ban-ctl.path, che permettono alla pagina fail2ban di mostrare le jail attive e gli indirizzi che bannano. Senza, non vengono mostrati; - installa l’helper di alimentazione (
/usr/local/lib/sirio/sirio-power) con le unitsirio-power.serviceesirio-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:
systemctl status sirio-sysadminjournalctl -u sirio-sysadmin -fcurl -s localhost:22722/api/statusIl 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:
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ì.
3. Mettere HTTPS davanti
Sezione intitolata “3. Mettere HTTPS davanti”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:22722Environment=SIRIO_SECURE_COOKIES=trueCaddy (consigliato)
Sezione intitolata “Caddy (consigliato)”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
UpgradeeConnectionservono ai WebSocket di log e statistiche; proxy_buffering offevita che i log arrivino a blocchi con secondi di ritardo (e ilproxy_read_timeoutlungo evita che un log seguito venga interrotto).
Proxy gestito da Sirio
Sezione intitolata “Proxy gestito da Sirio”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=trueEnvironment=SIRIO_PANEL_DOMAIN=sirio.esempio.itEnvironment=SIRIO_LISTEN=127.0.0.1:22723Qui 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.
TLS diretto, senza proxy
Sezione intitolata “TLS diretto, senza proxy”Environment=SIRIO_TLS_CERT=/etc/sirio/fullchain.pemEnvironment=SIRIO_TLS_KEY=/etc/sirio/privkey.pemEnvironment=SIRIO_LISTEN=0.0.0.0:443Con 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=truee riavvia con sudo systemctl restart sirio-sysadmin.
4. Primo accesso
Sezione intitolata “4. Primo accesso”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-Forpermetterebbe di aggirare il limite falsificandoli.
Ho perso la password
Sezione intitolata “Ho perso la password”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:
sudo -u sirio /usr/local/bin/sirio-sysadmin -data-dir /var/lib/sirio -reset-password admin@example.comMostra 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:
printf '%s\n' "$NUOVA_PASSWORD" | sudo -u sirio /usr/local/bin/sirio-sysadmin -data-dir /var/lib/sirio -reset-password admin@example.comIn 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.
Ripartire con un nuovo amministratore
Sezione intitolata “Ripartire con un nuovo amministratore”-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.
sudo -u sirio /usr/local/bin/sirio-sysadmin -data-dir /var/lib/sirio -reset-adminElenca 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.
Aggiornamento
Sezione intitolata “Aggiornamento”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:
curl -fsSLO https://github.com/marsaldev/siriosysadmin/releases/latest/download/install.shsudo bash install.shSostituisce 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 è inutileruns/ log delle esecuzioniworkspaces/ checkout dei repository (rigenerabili)sudo systemctl stop sirio-sysadminsudo tar czf sirio-backup-$(date +%F).tar.gz -C /var/lib siriosudo systemctl start sirio-sysadminConserva secret.key separatamente dal database: insieme sono la chiave di casa.
Disinstallazione
Sezione intitolata “Disinstallazione”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.pathsudo 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-sysadminsudo systemctl daemon-reloadsudo rm -rf /var/lib/sirio # cancella anche i datisudo userdel sirio