Installare WebODM o NodeODM su un server cloud o VPS
In questa pagina
Un server cloud è la strada giusta quando il computer in ufficio non basta, quando più persone devono usare la stessa installazione o quando vuoi che i dati restino su una macchina che controlli tu, senza affidarli a un servizio esterno. In questa guida prepari un VPS (Virtual Private Server) con Ubuntu e Docker, poi installi la tua linea. Alla fine trovi le considerazioni sui costi e le regole minime di sicurezza.
Cosa installi dipende dalla linea, e su un server la differenza è più marcata che sul PC.
Installi WebODM, il progetto di UAV4GEO ospitato su github.com/WebODM/WebODM, con il motore ODX e il nodo NodeODX: interfaccia web completa con utenti, progetti e mappa, HTTPS integrato con webodm.sh. Se hai letto materiale di OpenDroneMap, tieni presente che dal 6 aprile 2026 i due progetti sono separati: la guida Ecosistema WebODM e OpenDroneMap nel 2026 spiega cosa cambia.
Alla data di verifica la nonprofit OpenDroneMap Inc. non pubblica un repository open dell'interfaccia OpenDroneMap Desktop, e la versione Linux di OpenDroneMap Desktop è dichiarata "gratuita con installazione manuale" su opendronemap.org/download: se vuoi installarla su un server, verifica la procedura su docs.opendronemap.org (vedi la guida su OpenDroneMap Desktop). Questa guida descrive la via documentata dalle immagini Docker della nonprofit: NodeODM (opendronemap/nodeodm, API REST con interfaccia web minima) e il motore ODM (opendronemap/odm). Un server NodeODM si usa in due modi: da solo, tramite la sua interfaccia minima o la sua API, oppure come nodo di elaborazione di un'interfaccia sul tuo PC (per esempio WebODM, con l'avvertenza riportata più avanti).
Scegliere il server#
Vale per entrambe le linee.
Quanta RAM#
La fotogrammetria è affamata di memoria. La documentazione di WebODM indica questa scala: circa 4 GB per 40 immagini, 16 GB per 250, 32 GB per 500, 64 GB per 1.500 e 256 GB per 5.000. La sola interfaccia, senza nodo di elaborazione, si accontenta di 1–2 GB. La documentazione di ODM indica 4 GB come minimo per 100–200 immagini e 16 GB consigliati: gli ordini di grandezza coincidono.
Per un uso professionale tipico (rilievi da 200 a 600 immagini) un'istanza con 32 GB di RAM è un buon punto di partenza. Il disco conta quasi quanto la RAM: entrambe le documentazioni consigliano 100 GB liberi, e ogni progetto conserva immagini originali e tutti i risultati. Trovi la tabella completa nella guida Requisiti hardware.
| Immagini per progetto | RAM da prevedere | Disco consigliato |
|---|---|---|
| fino a 250 | 16 GB | 100 GB SSD |
| fino a 500 | 32 GB | 200 GB SSD o volume aggiuntivo |
| fino a 1.500 | 64 GB | volume dedicato, da dimensionare sul numero di progetti |
Quale provider#
Entrambe le linee funzionano su qualsiasi VPS che esegua Ubuntu LTS e Docker: Hetzner, AWS, OVH, Aruba e molti altri offrono istanze adatte. Le differenze riguardano il prezzo orario, la sede dei data center (per una PA italiana può contare che i dati restino nell'Unione Europea) e la possibilità di accendere e spegnere la macchina a piacere. Per la scelta della distribuzione tra installer, Docker, server e servizi cloud vedi Quale versione scegliere; i comandi delle due linee affiancati sono in Installazione a confronto.
Costi: ordini di grandezza#
Non riportiamo cifre puntuali perché i listini cambiano spesso. L'ordine di grandezza è questo: un'istanza con 32 GB di RAM costa pochi euro al giorno se resta accesa solo durante l'elaborazione, e alcune decine di euro al mese se resta sempre accesa. Il disco si paga a parte, in base ai GB allocati, anche a macchina spenta. Prima di decidere, controlla il listino del provider e verifica se la fatturazione è oraria o mensile.
Una strategia comune è tenere una macchina piccola sempre accesa per l'interfaccia e accenderne una grande solo quando serve elaborare: è il modello a nodi descritto nella guida NodeODX, NodeODM e nodi di elaborazione, e vale per entrambe le linee.
Installazione#
1. Creare l'istanza e collegarsi via SSH#
Vale per entrambe le linee. Crea un'istanza con Ubuntu LTS (22.04 o 24.04) e, dove possibile, una chiave SSH al posto della password. Collegati con il tuo client SSH abituale e aggiorna il sistema. Il comando seguente aggiorna gli elenchi dei pacchetti e installa gli aggiornamenti disponibili.
sudo apt-get update && sudo apt-get upgrade
Attendi la fine dell'operazione; se il kernel viene aggiornato, riavvia la macchina.
2. Installare Docker#
Vale per entrambe le linee. Installa Docker Engine e il plugin docker compose seguendo la procedura ufficiale per Ubuntu. Al termine aggiungi il tuo utente al gruppo docker, così non dovrai usare sudo per ogni comando.
sudo usermod -aG docker $USER
# uscire e rientrare nella shell
Esci dalla sessione SSH e rientra: il nuovo gruppo diventa effettivo solo a un nuovo login.
3. Scaricare e avviare la tua linea#
Da qui le due linee divergono. Segui il blocco della tua linea.
Clona il repository ufficiale di WebODM e avvia i container. La prima esecuzione scarica le immagini webodm/* da Docker Hub e può richiedere diversi minuti.
git clone https://github.com/WebODM/WebODM --config core.autocrlf=input --depth 1
cd WebODM
./webodm.sh start
Quando la console si stabilizza e vedi i messaggi del server web, WebODM è in ascolto sulla porta 8000.
Se il server ha un volume dati separato (scelta consigliata), indica subito dove salvare i progetti e i file temporanei. Il percorso --media-dir è l'archivio permanente e non va più spostato dopo l'inizializzazione; --node-dir contiene i file temporanei di elaborazione.
./webodm.sh restart --media-dir /storage/media --node-dir /storage/node
Scarica le immagini della nonprofit e avvia NodeODM come servizio che riparte con il server. La prima esecuzione scarica diversi gigabyte.
docker pull opendronemap/nodeodm
docker run -d -p 3000:3000 --restart unless-stopped opendronemap/nodeodm
La porta 3000 è quella storica di NodeODM e --restart unless-stopped fa ripartire il contenitore con Docker a ogni riavvio: verifica nel README dell'immagine su Docker Hub e su docs.opendronemap.org porta, opzioni di avvio (numero di lavori paralleli, cartella dei dati, eventuale token di accesso) e sintassi aggiornata prima di affidarti a questi comandi. Se il server ha un volume dati separato, monta la cartella dei lavori del nodo con -v, seguendo il percorso interno indicato dal README: senza volume i lavori vivono nel contenitore e si perdono se lo rimuovi.
Per elaborazioni singole senza nodo, puoi usare direttamente il motore ODM: carica le foto sul server via SFTP in /storage/datasets/progetto/images e lancia il comando dalla guida ODM da riga di comando.
docker pull opendronemap/odm
docker run -ti --rm -v /storage/datasets:/datasets opendronemap/odm --project-path /datasets progetto
4. Aprire la porta nel firewall#
Ogni provider ha il proprio firewall (security group su AWS, firewall del progetto su Hetzner, regole di rete su OVH e Aruba). Se sul server è attivo anche un firewall locale come ufw, apri la stessa porta anche lì.
Aggiungi una regola in ingresso per TCP 8000. Poi apri il browser all'indirizzo http://IP-DEL-SERVER:8000: al primo accesso WebODM ti chiede di creare l'utente amministratore.
Aggiungi una regola in ingresso per la porta del nodo (TCP 3000 con il comando sopra). Poi apri http://IP-DEL-SERVER:3000: compare l'interfaccia web minima di NodeODM, senza login. Attenzione: chiunque raggiunga la porta può inviare lavori e scaricare risultati. Prima di lasciarla aperta su internet, limita la regola del firewall agli indirizzi IP che devono usare il nodo (il tuo ufficio, la macchina dell'interfaccia) e verifica su docs.opendronemap.org e nel README dell'immagine le opzioni di autenticazione del nodo.

5. Attivare HTTPS con un nome di dominio#
Un servizio esposto in chiaro su Internet non è accettabile per un uso professionale: password e dati viaggiano senza cifratura. Ti serve un nome di dominio (o sottodominio) con un record DNS che punti all'IP pubblico del server.
Lo script webodm.sh integra Let's Encrypt e ottiene un certificato valido da solo. Apri nel firewall le porte che Let's Encrypt utilizza per la verifica (in genere 80 e 443; verifica sulla documentazione ufficiale). Sostituisci il nome con il tuo e riavvia WebODM in modalità SSL.
./webodm.sh restart --ssl --hostname webodm.miaazienda.it # Let's Encrypt
Al termine WebODM risponde su https://webodm.miaazienda.it. Dopo il passaggio a HTTPS puoi chiudere la porta 8000 nel firewall, se non la usi più.
NodeODM non include l'equivalente di --ssl --hostname: per servirlo in HTTPS si mette davanti al contenitore un reverse proxy (per esempio Nginx o Caddy) con un certificato Let's Encrypt, che riceve sulla 443 e inoltra alla porta del nodo. La configurazione del proxy esce dallo scopo di questa guida; verifica su docs.opendronemap.org se la documentazione della linea propone una procedura consigliata. In alternativa, se il nodo serve solo alla tua interfaccia, puoi non esporlo affatto e raggiungerlo attraverso una VPN o un tunnel SSH: è la scelta più semplice e più sicura per un nodo usato da una sola sede.
Interfaccia WebODM con nodo ODM sul server#
Una configurazione che alcuni lettori cercano è WebODM (sul PC o su un secondo server piccolo) come interfaccia, e il server grande con NodeODM della nonprofit come nodo di calcolo. Si aggiunge il nodo dal menu Processing Nodes di WebODM indicando indirizzo e porta del server.
Utenti multipli#
Il vantaggio di un server condiviso è che più persone lavorano sulla stessa istanza. WebODM include una gestione degli account dal pannello di amministrazione: puoi creare un utente per ogni collega, decidere chi è amministratore e condividere i progetti tra utenti. Le modalità di dettaglio (gruppi, permessi per progetto) sono descritte nella documentazione ufficiale.
Alcune regole pratiche:
- Crea un account per persona, mai account condivisi: in caso di errore sai chi ha fatto cosa.
- Usa l'amministratore solo per la gestione, non per il lavoro quotidiano.
- Se dimentichi la password dell'amministratore, puoi reimpostarla dal server.
./webodm.sh start && ./webodm.sh resetadminpassword nuovapassword
Il comando stampa la conferma del cambio; scegli una password lunga e conservala in un gestore di password.
NodeODM non ha utenti né progetti: è un servizio di elaborazione. Chi può raggiungere la porta può usarlo, ed è per questo che il controllo degli accessi va fatto a monte, con il firewall, la VPN o le opzioni di autenticazione del nodo da verificare nella documentazione. Se ti serve una gestione degli utenti, la ottieni con un'interfaccia collegata al nodo: OpenDroneMap Desktop (con installazione manuale su Linux, da verificare su docs.opendronemap.org) oppure WebODM, con l'avvertenza sull'interoperabilità riportata sopra.
Sicurezza di base#
Vale per entrambe le linee. Un server esposto su Internet riceve tentativi di accesso automatici fin dal primo minuto. Non serve essere esperti di sicurezza, ma serve rispettare alcune regole.
| Misura | Perché |
|---|---|
| Accesso SSH con chiave, password disabilitata | Elimina gli attacchi a forza bruta sulla password |
| Utente non root per il lavoro quotidiano | Limita i danni in caso di errore o compromissione |
| Firewall con solo le porte necessarie (SSH, 443; la porta del nodo solo per IP noti) | Riduce la superficie di attacco |
| HTTPS sempre attivo, oppure nodo raggiungibile solo via VPN | Protegge credenziali e dati in transito |
Aggiornamenti del sistema e delle immagini (./webodm.sh update oppure docker pull) regolari |
Chiude le vulnerabilità note |
| Backup dei dati su un'altra macchina | Un VPS può essere cancellato per errore o per un guasto |
La procedura di backup e ripristino, con i comandi verificati per WebODM, è nella guida Aggiornare, backup e ripristino. Programmala fin dall'inizio: i dati di WebODM vivono nei volumi Docker webodm_dbdata e webodm_appmedia (o nella cartella indicata con --media-dir), non nel repository clonato. Per NodeODM e ODM i dati sono nella cartella o nel volume che hai montato con -v: è quella da copiare altrove.
Come verificare
Hai finito quando:
- Linea WebODM:
https://tuo-dominioapre la pagina di login di WebODM con il lucchetto valido nel browser e, dalla Dashboard, il nodo di elaborazione locale risulta online (menu Processing Nodes). Linea ODM: l'interfaccia di NodeODM risponde sulla porta del nodo dagli IP autorizzati (o attraverso la VPN) e non da altri. - Un piccolo dataset di prova (vedi Dataset di prova) si elabora fino alla fine: in WebODM l'ortofoto si apre nella mappa; con NodeODM gli output si scaricano dall'interfaccia minima o dall'interfaccia collegata.
- Riavviando il server (
sudo reboot) il servizio torna disponibile da solo. Se non accade, controlla che Docker sia impostato per avviarsi al boot e che i container abbiano la restart policy: la guida Linux e Docker tratta l'avvio automatico per entrambe le linee. - Nel log dell'elaborazione compare la versione del motore: ODX per la linea WebODM, ODM 3.6.0 per la linea ODM alla data di verifica.
Problemi frequenti#
La pagina non si apre su IP:8000 (o IP:3000). Nove volte su dieci è il firewall del provider: la regola va aggiunta nel pannello del cloud, non solo sul server. Controlla anche che il contenitore sia effettivamente avviato con docker ps.
Il certificato Let's Encrypt non viene emesso (WebODM). Verifica che il record DNS punti già all'IP del server (la propagazione può richiedere tempo) e che le porte necessarie siano aperte. Rilancia poi il comando --ssl --hostname.
WebODM non vede il nodo NodeODM remoto. Controlla che la porta del nodo sia raggiungibile dalla macchina dell'interfaccia (firewall del provider e ufw) e ricorda l'avvertenza sull'interoperabilità: dopo un aggiornamento di una delle due linee la compatibilità va riverificata.
Out of memory durante l'elaborazione. Il server è troppo piccolo per il dataset. Vale per ODX e ODM. Le soluzioni sono ridimensionare le immagini, ridurre la qualità, oppure passare a un'istanza più grande: vedi Ottimizzare tempi e memoria.
"No space left on device". Il disco del server è pieno. Sposta i dati su un volume dedicato (--media-dir e --node-dir per WebODM, cartella montata con -v per la linea ODM), oppure allarga il disco dal pannello del provider.
Il catalogo completo degli errori, con cause e rimedi, è nella guida Errori comuni.
Prossimi passi#
- Aggiornare, backup e ripristino: metti al sicuro i progetti prima di caricare dati veri.
- NodeODX, NodeODM e nodi di elaborazione: separa interfaccia e calcolo per pagare la macchina grande solo quando serve.
- Installazione a confronto: i comandi delle due linee affiancati per ogni piattaforma.
- Il primo progetto passo passo: carica le prime immagini e ottieni la prima ortofoto.
Fonti
- docs.webodm.org — installazione,
--ssl --hostname,--media-dir, gestione utenti: https://docs.webodm.org/installation/(link esterno) - github.com/WebODM/WebODM — repository di WebODM: https://github.com/WebODM/WebODM(link esterno)
- webodm.org/download — requisiti dichiarati: https://webodm.org/download/(link esterno)
- docs.opendronemap.org — NodeODM, ODM, requisiti, installazione Linux della linea ODM: https://docs.opendronemap.org/(link esterno)
- Docker Hub, immagini
opendronemap/nodeodmeopendronemap/odm: https://hub.docker.com/r/opendronemap/nodeodm(link esterno) · https://hub.docker.com/r/opendronemap/odm(link esterno) - Docker Engine su Ubuntu: https://docs.docker.com/engine/install/ubuntu/(link esterno)
Guide correlate
Installare WebODM e ODM su Ubuntu con Docker Engine
Installazione · Intermedio · Entrambe le linee
Aggiornare, fare il backup e ripristinare: WebODM e OpenDroneMap
Installazione · Intermedio · Entrambe le linee
NodeODX/NodeODM, ClusterODX/ClusterODM e nodi remoti
Installazione · Avanzato · Entrambe le linee
ODM e ODX da riga di comando con Docker
Installazione · Avanzato · Entrambe le linee
Installare WebODM o OpenDroneMap: comandi e download a confronto
Confronto ODM/ODX · Intermedio · Entrambe le linee
Requisiti hardware WebODM e OpenDroneMap: RAM, CPU, disco, GPU
Iniziare · Base · Entrambe le linee
Errori comuni di WebODM e OpenDroneMap: significato e rimedi
Risoluzione problemi · Intermedio · Entrambe le linee