# 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://: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 ``` 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`.