In questo Articolo parlo di come utilizzare âDocker Composeâ per automatizzare il deployment di un server Web Apache che dia accesso (tramite proxy) ad applicativi Shiny e RStudio. Un unico comando prepara lâintero ambiente da zero: i server (Apache, Shiny e Rstudio) vengono scaricati, installati in modo isolato, e viene predisposta una rete privata per fare comunicare queste applicazioni. Unica dipendenza è avere Docker Compose installato sul computer.
Questo articolo è il seguito dellâarticolo precedente dove ho spiegato le ragioni e i vantaggi di questa configurazione, come fare lâinstallazione e la configurazione manuale. In questo articolo spiego come ottenere un risultato simile con tecnologia Docker, in modo completamente automatizzato con âDocker Composeâ.
Automazione
Questa operazione è quando basta. Credi di potercela fare? :-)
docker-compose up
Docker e Docker Compose
A cosa servono?
Partiamo dalle definizione:
Docker è un progetto open-source che automatizza il deployment (consegna o rilascio al cliente, con relativa installazione e messa in funzione o esercizio, di unâapplicazione o di un sistema software tipicamente allâinterno di un sistema informatico aziendale) di applicazioni allâinterno di contenitori software, fornendo unâastrazione aggiuntiva grazie alla virtualizzazione a livello di sistema operativo di Linux. Wikipedia IT
Molto brevemente, diciamo che assomiglia ad una macchina virtuale dedicata ad una singola applicazione. Un container docker immaginatelo come composto da un eseguibile, una porzione di file system contenente lâecosistema necessario allâapplicazione, unâinterfaccia di rete dedicata. Il container interagisce con lâambiente tramite connessione di rete o regioni di file system condivise. Il vantaggio di questa configurazione è che gli applicativi nei container non dipendono dal software installato sul server, ma si portano dietro le dipendenze. Si evitano in cosĂŹ problemi di incompatibilitĂ : se il container funziona su un computer funzionerĂ anche sugli altri. Questo consente di utilizzare software senza preoccuparsi di avere installato lo stesso identico environment, di fare degli aggiornamenti âper applicazioneâ, e di fare rollback con estrema facilitĂ .
Compose è unâapplicazione che permette di assemblare un numero di container Docker e utilizzarli come un unico servizio. Un unico file di configurazione descrive come configurarli, connetterli tra loro tramite una rete virtuale e dedicata.
Come si utilizzano?
Per comoditĂ ho preparato un Repository Git con la configurazione: https://github.com/rinproduction/docker-rweb/
Il file YAML docker-compose.yml
contiene la configurazione della composizione:
|
|
Il file di configurazione contiene tre servizi (tre docker container) e una rete (sp-net
).
Apache è il server web utilizzato. Lâimmagine docker di apache
è indicata da bitnami/apache:latest
, che significa che si trova allâindirizzo https://hub.docker.com/r/bitnami/apache e se ne prende lâultima versione. A questo indirizzo trovate la documentazione dellâimmagine Docker. Il parametro ports
indica quali porte condividere con il mondo esterno al Compose: in questo caso le porte relative ai servizi HTTP e HTTPS. Gli indirizzi http://localhost e https://localhost funziona proprio perchĂŠ le porte 80 e 443 sono condivise tra Docker e lâhost (il computer). volumes
indica come condividere i file di configurazione tra lâhost e uno dei container. environment
serve a configurare alcune variabili dâambiente utilizzate nel container.
Le immagini che contengono gli applicativi Shiny ed RStudio sono prese da https://hub.docker.com/r/rocker/. Qui trovate un buon numero di immagini Docker aggiornate e pronte allâuso.
Nota che in docker-compose.yml
tutti i container sono collegati alla stessa sottorete: sp-net
. Questo permette ad Apache quando riceve una connessione di inoltrarla a Shiny o RStudio.
La prossima sezione contiente una piccola guida su come utilizzare questa configurazione nella pratica.
How-to
Requirements
Un computer con una distribuzione Linux su cui è installato o è possibile installare Docker e Docker Compose. Da notare che rispetto allâarticolo con la procedura manuale, in cui si chiedeva che fossero presenti e installati RStudio e Shiny Server, qui non è richiesto perchĂŠ la procedura installa anche questi software.
Installare Docker e Docker Compose
Per installare Docker utilizza le istruzioni specifiche per la distribuzione che stai utilizzando. Scrivo qui le istruzioni che ho testato su Ubuntu 20.04.
sudo apt install docker.io docker-compose
Scaricare la configurazione
Per scaricare la configurazione puoi utilizzare Git:
|
|
Nota: Ho creato una sotto-cartella rweb
perchĂŠ Compose la utilizza per creare le etichette delle singoli istanze Docker: quindi rinominala con cautela se devi.
Se non hai git, scarica il repository da questo indirizzo: https://github.com/rinproduction/docker-rweb/archive/main.zip .
Attiva la configurazione
Premessa: devi avere i permessi per accedere al servizio docker per fare questo. Quindi o il tuo utente appartiene al gruppo docker
oppure devi utilizzare i privilegi amministativi (con su
o sudo
).
|
|
Se non hai ricevuto errori il servizio è attivo!
Vai sul tuo browser a
- https://localhost/ per avere la conferma del funzionamento
- https://localhost/shiny per accedere a Shiny Server
- https://localhost/rstudio per accedere a RStudio Server (user: rstudio, password: rinproduction)
Note sulla sicurezza
Il codice è stato scritto con il proposito di provare la possibilitĂ e la facilitĂ dâuso di Docker Compose applicato al nostro problema. In caso lo voglia utilizzare in produzione, in funzione della situazione, ci possono essere altre misure di sicurezza da prendere. Sicuramente è necessario rigenerare le chiavi SSL nella cartella config/ssl/
in quanto la la chiave segreta è condivisa su un repository pubblico (a beneficio della divulgazione). Trovi come rigenerare i certificati auto-firmati qui.
Conclusione
Con questa pratica si ottiene un sistema isolato dal server principale, le cui parti interne sono tra loro ben separate, possono essere aggiornate singolarmente e sono massimamente riproducibili: significa che, testate su un server, in linea di principio funzionano su tutti gli altri.
Commenti
Commenta su Linkedin
Commenta su Twitter