iride-setup/README.md

122 lines
5.4 KiB
Markdown

# IRIDE — Setup & Installer
Tecnotel Servizi SRL — [www.tecnotelsrl.com](https://www.tecnotelsrl.com)
Repository **pubblico** con l'installer di prima fase e il Web Installer di IRIDE,
sullo schema di `argos-setup`. Non contiene segreti: solo la chiave pubblica con cui
si verifica la licenza. Il software è nel repository privato `tecnotel/iride`,
raggiungibile con il token di sola lettura incluso nella licenza.
## Flusso
```text
curl bootstrap.sh | sudo bash
└─ first-setup.sh sistema, Node 22, utente iride, sudoers ristretti,
/opt/iride/*, UFW, fail2ban, nginx temporaneo
└─ Web Installer http://IP:8888 — wizard in 6 step
└─ install() licenza → clone iride → venv → iride.json/users.json →
migrazioni → (frontend) → SSL → nginx → systemd →
licenza in /opt/iride/data → chiude la 8888 e si rimuove
```
## Prerequisiti
- VM **Ubuntu 24.04 o 26.04 LTS** pulita (Python 3.12/3.14), accesso `sudo`.
- Sizing minimo: 2 vCPU / 4 GB RAM / 40 GB disco (il DB è SQLite, niente broker).
- Uscita verso `repo.argosdefense.io` (codice e aggiornamenti) e `license.argosdefense.io`
(licenze, heartbeat); per i canali: Meta, Telegram, provider SMS, OpenAI.
- Ingresso: `443` dal pubblico se i canali usano webhook (WhatsApp, Telegram in
webhook), `8888` **solo** dal tuo IP durante il wizard, `22` solo dagli IP admin.
- Una **licenza IRIDE** emessa da Tecnotel per il `machine_id` del server (lo mostra
il wizard al primo step).
## Installazione
```bash
curl -fsSL https://repo.argosdefense.io/tecnotel/iride-setup/raw/branch/main/bootstrap.sh | sudo bash
```
Manuale equivalente:
```bash
sudo apt update && sudo apt install -y git
git clone https://repo.argosdefense.io/tecnotel/iride-setup.git /opt/iride-setup-pkg
cd /opt/iride-setup-pkg && sudo bash first-setup.sh
```
Poi apri `http://<IP>:8888`:
1. **Licenza** — copia il `machine_id`, invialo a Tecnotel, carica `license.json`.
Il wizard verifica firma Ed25519, prodotto (`iride`), `machine_id`, scadenza e
presenza del token Gitea.
2. **Cliente** — nome breve, nome completo, tipo, contesto per l'assistente, logo.
3. **Rete & SSL** — hostname pubblico, alias, certificato:
- *Let's Encrypt* (automatico, richiede DNS pubblico già puntato alla VM),
- *certificato esistente* (upload `.crt` + `.key`, es. wildcard aziendale),
- *autofirmato* (RSA 4096, 10 anni, SAN con hostname, alias e IP: LAN e demo;
**non** per WhatsApp, che richiede un certificato valido).
4. **Intelligenza artificiale** — provider del modello testuale: `fake` (demo, nessuna
chiave), OpenAI o Anthropic con API key. Modificabile dal portale.
5. **Utente admin** — primo accesso al portale (password ≥ 12 caratteri, hash bcrypt).
6. **Installa** — riepilogo e avvio; il log dell'installazione scorre nella pagina.
A fine wizard la porta 8888 viene chiusa e `/opt/iride-setup-pkg` rimosso.
Aggiornamenti successivi: `sudo bash /opt/iride/app/scripts/update.sh` (usa il token
della licenza, mai credenziali personali). Verifica rapida: `iride-health`.
## Layout risultante
```text
/opt/iride/app repository tecnotel/iride (utente iride)
/opt/iride/config iride.json, users.json, channels.json, credentials.json (0600)
/opt/iride/data iride.db (WAL), license.json, heartbeat, stato update
/opt/iride/logs demoni e nginx (logrotate)
/opt/iride/certs certificati TLS
/opt/iride/backups snapshot pre-update e giornalieri
```
Servizi: `iride-api` (8080), `iride-worker`, `iride-scheduler`; `iride-voice` (8081)
solo dopo il POC-01. nginx su 80/443.
## Hardening applicato (stesso di argos-setup)
Aggiornamento completo del sistema, UFW con default deny (22, 80, 443; 8888 chiusa a
fine setup), fail2ban, utente di servizio senza privilegi con sudoers limitati al
restart dei demoni IRIDE e a `update.sh`, configurazione e licenza in file 0600,
token Gitea mai in `.git/config` (URL autenticato solo per clone e fetch),
Strict-Transport-Security e rate limit sulle API in nginx.
## Server di sviluppo (solo Tecnotel)
Lo stesso server può ospitare l'istanza demo, il checkout di sviluppo e il runner CI:
```bash
sudo bash /opt/iride-setup-pkg/dev-setup.sh --token <REGISTRATION_TOKEN>
```
Installa l'ultimo **Gitea Runner** (ex act_runner) in modalità host con label
`ubuntu-latest:host`, come utente `gitea-runner`, servizio `gitea-runner.service`.
Il token si crea su Gitea in *Impostazioni → Actions → Runners*. Va lanciato
**prima** del wizard (che a fine install rimuove `/opt/iride-setup-pkg`).
Il checkout di sviluppo è un normale `git clone` nella home dell'utente.
## Contenuto del repository
| File | Scopo |
|---|---|
| `bootstrap.sh` | One-liner: scarica il repo e avvia `first-setup.sh` |
| `first-setup.sh` | Installer ambiente base: sistema, utente, firewall, nginx temporaneo, avvia il wizard |
| `setup_server.py` | Backend del Web Installer (porta 8888, self-contained) |
| `setup.html` | Frontend del Web Installer, wizard in 6 step |
| `dev-setup.sh` | Gitea Runner in modalità host per il server di sviluppo |
| `checks/health.sh` | Verifica dell'istanza (copiato in `/usr/local/bin/iride-health`) |
## Repository correlati
- [`tecnotel/iride`](https://repo.argosdefense.io/tecnotel/iride) — codice di IRIDE
(privato, accessibile con licenza).
## Versioning
SemVer, tag `vX.Y.Z`, allineato al repository `iride`.