1 19/10/2026 10 min

Su Ubuntu 20.04 LTS il punto non è “installare RStudio Server” e basta: il lavoro vero è farlo convivere in modo pulito con utenti, rete, aggiornamenti e manutenzione. Se lo lasci esposto senza disciplina operativa, diventa presto un servizio comodo ma fragile. L’obiettivo qui è portarlo su con un setup minimale, verificabile e reversibile.

Nota importante: per l’ecosistema RStudio Server esistono due famiglie di distribuzione, la versione open source e la versione commerciale/Pro. Su Ubuntu 20.04 si usa normalmente il pacchetto .deb pubblicato dal vendor per la build open source. Prima di partire conviene verificare il nome esatto del pacchetto disponibile per la release che vuoi installare, perché i repository cambiano nel tempo e non è utile cristallizzare un URL che domani potrebbe non essere più quello giusto.

Requisiti minimi e scelta dell’architettura

RStudio Server non è pesante solo per CPU e RAM: il collo di bottiglia reale spesso è la gestione delle sessioni utente, dei file temporanei e dei progetti caricati. Per un nodo piccolo, un profilo sensato è 2 vCPU e almeno 4 GB di RAM; sotto questa soglia il servizio parte, ma appena arrivano più sessioni o librerie R grandi la reattività peggiora in fretta. Se prevedi uso multiutente, considera almeno 8 GB e storage con IOPS decenti.

La scelta architetturale più semplice è esporre RStudio Server solo su rete interna o dietro reverse proxy con TLS. Esporlo direttamente su Internet non è una buona idea, soprattutto se non hai già un perimetro chiaro per autenticazione, logging e aggiornamenti. Se devi pubblicarlo, falla passare da un proxy terminatore TLS e limita l’accesso con firewall o VPN.

Preparazione del sistema Ubuntu 20.04

Prima di installare il servizio, aggiorna il sistema e porta a posto i prerequisiti più comuni. Il primo controllo utile è capire se la macchina ha spazio sufficiente e se i pacchetti base sono in ordine.

sudo apt update
sudo apt -y upgrade
df -h
free -h

Se df -h mostra la partizione root quasi piena, fermati prima di installare. RStudio Server scrive log, cache e file temporanei; partire con poco spazio residuo significa cercarsi problemi di stabilità. Un margine pratico è almeno il 20% libero sul filesystem che ospita /var e le home degli utenti.

Conviene anche verificare che il server abbia un hostname coerente e una risoluzione locale sensata, soprattutto se userai certificati TLS o accesso via nome DNS. Un controllo rapido:

hostnamectl
getent hosts $(hostname -f)

Installazione del pacchetto RStudio Server

Il flusso tipico è scaricare il pacchetto Debian corretto e installarlo con apt o dpkg. Il vantaggio di apt è che risolve le dipendenze in modo più pulito; dpkg resta utile se stai lavorando con un file locale e vuoi vedere subito gli errori di dipendenza.

Prima di installare, recupera il pacchetto dalla pagina ufficiale del vendor per Ubuntu 20.04 e architettura amd64. Il nome del file cambia in base alla release, quindi non ha senso fissare un link assoluto in un articolo operativo. Una volta scaricato, installa così:

sudo apt install ./rstudio-server-*.deb

Se apt segnala dipendenze mancanti, completa con:

sudo apt -f install

Subito dopo, verifica che il servizio sia stato registrato da systemd e che il binario sia presente:

systemctl status rstudio-server
which rserver

Se il servizio non parte, il problema non è “RStudio” in astratto: di solito è una dipendenza mancante, un errore nel file di servizio o un binario non posizionato nel path previsto. Il primo log da guardare è quello di systemd:

journalctl -u rstudio-server -n 100 --no-pager

Avvio del servizio e verifica del listener

Dopo l’installazione, il demone dovrebbe ascoltare sulla porta predefinita 8787. Non dare per scontato che sia davvero in ascolto: verifica il socket e lo stato del servizio insieme.

sudo systemctl enable --now rstudio-server
sudo ss -ltnp | grep 8787

Se ss non mostra nulla sulla porta 8787, ci sono tre scenari comuni: il servizio non è partito, sta crashando subito dopo l’avvio oppure è stato configurato per ascoltare su un’altra interfaccia o porta. Prima di cambiare configurazione, controlla sempre lo stato effettivo del processo.

Un test locale evita falsi positivi di rete o firewall:

curl -I http://127.0.0.1:8787

Il risultato atteso è una risposta HTTP, spesso un redirect verso la pagina di login. Se ottieni timeout o connection refused, il problema è a monte della rete: servizio non attivo o binding errato.

Accesso iniziale e gestione utenti Linux

La versione open source di RStudio Server usa autenticazione tramite utenti di sistema. Questo è semplice e robusto, ma impone disciplina: se un utente Linux esiste, può entrare nel servizio con le sue credenziali locali. La parte operativa consiste quindi nel creare account puliti e assegnare home directory corrette.

Per creare un utente dedicato:

sudo adduser rstudio01

Se vuoi limitarne i privilegi, evita di aggiungerlo a gruppi amministrativi inutili. In ambienti condivisi è meglio partire dal minimo e concedere solo ciò che serve davvero. Dopo il primo login, verifica che la home sia scrivibile e che l’utente possa creare file temporanei e salvare workspace senza errori.

Un controllo veloce lato shell:

sudo -iu rstudio01
pwd
touch ~/test-rstudio.txt
rm ~/test-rstudio.txt

Esposizione in rete: porta diretta o reverse proxy

La porta 8787 non dovrebbe essere il punto di ingresso pubblico “nudo e crudo” se puoi evitarlo. La soluzione più solida è mettere davanti Nginx o Apache con TLS, lasciando RStudio Server in ascolto solo su localhost o sulla rete privata. In questo modo separi la terminazione TLS, i log di accesso e i controlli di accesso dal processo applicativo.

Se resti su porta diretta, almeno limita l’accesso a livello firewall. Con UFW, ad esempio, puoi restringere a una subnet amministrativa:

sudo ufw allow from 192.0.2.0/24 to any port 8787 proto tcp
sudo ufw status numbered

Il controllo finale deve mostrare la regola attiva e nessuna esposizione indesiderata. Se la macchina è pubblica, preferisci una regola che consenta solo il proxy o la VPN, non tutto Internet.

Configurazione minima di RStudio Server

La configurazione principale, quando presente, si trova sotto /etc/rstudio/. I file più interessanti sono in genere rserver.conf e, a seconda del caso, database.conf o altri file di supporto. Prima di modificare, fai sempre una copia semplice o usa un file versionato. Non serve complicarsi la vita: basta poter tornare indietro in un minuto.

Un esempio minimale di configurazione per far ascoltare il servizio solo in locale, utile dietro proxy:

www-address=127.0.0.1
www-port=8787

Se modifichi il file, salva una copia prima del reload:

sudo cp /etc/rstudio/rserver.conf /etc/rstudio/rserver.conf.bak.$(date +%F-%H%M)

Dopo la modifica, riavvia il servizio e ricontrolla il binding:

sudo systemctl restart rstudio-server
sudo ss -ltnp | grep 8787

Reverse proxy con TLS davanti a RStudio Server

Se pubblichi il servizio, il reverse proxy è la scelta più pulita. Nginx è spesso la via più lineare, perché gestisce bene le connessioni persistenti e i websocket. RStudio Server usa traffico che beneficia di header corretti e di un proxy che non rompa le sessioni.

Un esempio essenziale di server block Nginx:

server { listen 443 ssl http2; server_name rstudio.example.com; ssl_certificate /etc/letsencrypt/live/rstudio.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/rstudio.example.com/privkey.pem; location / { proxy_pass http://127.0.0.1:8787; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 86400; }
}

Dopo aver attivato la configurazione, testa la sintassi e il reload del proxy:

sudo nginx -t
sudo systemctl reload nginx

Se usi Let’s Encrypt, ricordati che il rinnovo automatico deve essere verificato. Il controllo minimo è l’esito del timer o del servizio di rinnovo e la validità del certificato in uso. Un certificato scaduto davanti a RStudio produce un guasto molto più banale di quanto sembri, ma blocca gli utenti allo stesso modo.

Log utili e diagnosi dei problemi più comuni

Quando qualcosa non torna, non partire dalla configurazione “a sensazione”. Guarda prima i log. I punti di osservazione più utili sono il journal systemd, i log di RStudio e, se c’è il proxy, i log del web server.

journalctl -u rstudio-server -f
sudo tail -f /var/log/rstudio-server.log
sudo tail -f /var/log/nginx/error.log

I problemi ricorrenti sono abbastanza prevedibili:

  • porta già occupata: verifica con ss -ltnp e cambia binding o libera la porta;
  • permessi errati sulla home dell’utente: controlla ownership e mode con ls -ld ~utente;
  • proxy mal configurato: controlla gli header Upgrade e Connection;
  • memoria insufficiente: osserva free -h, top o htop e i messaggi OOM nel journal.
  • Se sospetti un problema di memoria, cerca indicatori concreti e non impressioni visive. Il kernel lascia tracce abbastanza chiare quando termina processi sotto pressione:

    journalctl -k | grep -i -E 'oom|killed process|out of memory'

    Hardening minimo senza complicarsi la vita

    Un servizio utile ma esposto va trattato come qualsiasi altro endpoint applicativo. Il primo livello di hardening non è “mettere mano a tutto”, ma ridurre la superficie e rendere prevedibile la manutenzione. Tre mosse hanno quasi sempre senso: limitare l’ascolto, mettere TLS, tenere aggiornato il nodo.

    Se il servizio non deve essere raggiungibile dall’esterno, ascolta solo su 127.0.0.1 o su un’interfaccia privata. Se invece è accessibile via proxy, il firewall deve permettere solo il traffico necessario. In più, tieni sotto controllo gli aggiornamenti del sistema e del pacchetto RStudio: una vulnerabilità nel layer applicativo non si compensa con un proxy ben fatto.

    Per una verifica essenziale della superficie esposta:

    sudo ss -ltnp
    sudo ufw status verbose

    Se il server ospita più utenti, il controllo dei permessi sulle directory condivise è parte della sicurezza, non un dettaglio amministrativo. Evita directory world-writable senza sticky bit e non usare account condivisi: quando serve audit o troubleshooting, gli utenti nominali fanno la differenza.

    Aggiornamento e rollback operativo

    Ogni modifica al pacchetto o al proxy dovrebbe avere un rollback chiaro. Prima di aggiornare RStudio Server, salva la configurazione e annota la versione installata. Questo vale soprattutto se il servizio è in uso da più persone e non puoi permetterti test lunghi in produzione.

    rstudio-server version
    sudo cp /etc/rstudio/rserver.conf /root/rserver.conf.$(date +%F-%H%M).bak

    Se dopo un upgrade il servizio non parte più, il rollback più rapido è reinstallare la versione precedente del pacchetto salvato localmente e ripristinare il file di configurazione. Non fare pulizia aggressiva dei log o dei file di stato finché non hai isolato il guasto: spesso la differenza sta in una riga del journal o in un parametro cambiato.

    Verifica finale da amministratore

    La verifica non è solo “la pagina si apre”. Devi controllare almeno quattro punti: servizio attivo, porta in ascolto, login funzionante e accesso coerente dal proxy o dalla rete interna. Se uno di questi fallisce, il setup non è ancora pronto per l’uso operativo.

  • Controlla lo stato del servizio con systemctl is-active rstudio-server: il risultato atteso è active.
  • Controlla il listener con ss -ltnp | grep 8787: il processo deve risultare in ascolto sul binding previsto.
  • Apri http://127.0.0.1:8787 localmente o il dominio dietro proxy: devi vedere la schermata di login e non un errore 502/503.
  • Effettua login con un utente Linux valido e verifica che l’ambiente R parta senza errori di permesso o di home directory.
  • Controlla i log dopo il primo accesso: se compaiono warning ricorrenti, correggili prima di considerare il servizio stabile.
  • Il punto chiave è questo: RStudio Server su Ubuntu 20.04 LTS si installa in pochi minuti, ma un’installazione davvero utilizzabile richiede due scelte nette. O lo tieni interno e molto semplice, oppure lo esponi dietro proxy, TLS e controllo accessi. La via di mezzo, in pratica, è quella che crea più incidenti.

    Assunzione operativa: il nodo è Linux recente con systemd, il servizio è destinato ad ambienti dove almeno una parte del traffico va osservata e limitata, e l’accesso utente avviene tramite account locali del sistema.