122 lines
5.4 KiB
Markdown
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`.
|