Introduzione

Con gli strumenti di sviluppo che si spostano nel cloud, l'adozione delle piattaforme cloud IDE (Integrated Development Environment) è in crescita. Gli IDE cloud sono accessibili da ogni tipo di dispositivo moderno attraverso i browser Web e offrono numerosi vantaggi per gli scenari di collaborazione in tempo reale. Lavorare in un cloud IDE fornisce un ambiente di sviluppo e test unificato per te e il tuo team, riducendo al minimo le incompatibilità della piattaforma. Accessibili tramite browser Web, gli IDE cloud sono disponibili da ogni tipo di dispositivo moderno.

Eclipse Theia è un IDE cloud estensibile in esecuzione su un server remoto e accessibile da un browser web. Visivamente, è progettato per apparire e comportarsi in modo simile a Microsoft Visual Studio, il che significa che supporta molti linguaggi di programmazione, ha un layout flessibile e ha un terminale integrato. Ciò che separa Eclipse Theia dagli altri software IDE cloud è la sua estensibilità; può essere modificato utilizzando estensioni personalizzate, che consentono di creare un IDE cloud adatto alle proprie esigenze.

In questo tutorial, distribuirai Eclipse Theia sul tuo server Ubuntu 18.04 usando Docker Compose, uno strumento di orchestrazione dei container. Lo esporrai nel tuo dominio utilizzando nginx-proxy, un sistema automatizzato per Docker che semplifica il processo di configurazione di Nginx per fungere da proxy inverso per un contenitore. Lo proteggerai anche usando un certificato TLS Let's Encrypt gratuito, che effettuerà il provisioning usando il suo componente aggiuntivo specializzato. Alla fine, avrai Eclipse Theia in esecuzione sul tuo server Ubuntu 18.04 disponibile tramite HTTPS e richiedendo all'utente di accedere.

Prerequisiti

Se il tuo intento è installare Eclipse IDE Theia Cloud su un server in remoto continua a leggere, altrimenti salta il primo paragrafo "Connessione al Server" e leggi il successivo.

Connessione al Server

Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno dell'username e della password per l'autenticazione. Per connettersi al server come utente root digitare il seguente comando:

ssh [email protected]_DEL_SERVER

Successivamente sarà necessario inserire la password dell'utente root.

Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare root con il vostro nome_utente:

ssh [email protected]_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password del vostro utente.

La porta standard per connettersi tramite ssh è la 22, se il vostro server utilizza una porta diversa, sarà necessario specificarla utilizzando il parametro -p, quindi digitare il seguente comando:

ssh [email protected]_DEL_SERVER -p PORTA

Configurare nginx-proxy con Let's Encrypt

In questa sezione, distribuirai nginx-proxy e il suo componente aggiuntivo Let's Encrypt usando Docker Compose. Ciò consentirà il provisioning e il rinnovo automatici del certificato TLS, in modo che quando si distribuisce Eclipse Theia sarà accessibile nel proprio dominio tramite HTTPS.

Ai fini di questa esercitazione, verranno archiviati tutti i file in ~/eclipse-theia. Creare la directory eseguendo il comando seguente:

mkdir ~/eclipse-theia

Naviga verso di esso:

cd ~/eclipse-theia

Memorizzerai la configurazione di Docker Compose per nginx-proxy in un file denominato nginx-proxy-compose.yaml. Crealo usando il tuo editor di testo:

nano nginx-proxy-compose.yaml

Aggiungi le seguenti righe:

version: '2'

services:
  nginx-proxy:
    restart: always
    image: jwilder/nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "/etc/nginx/htpasswd:/etc/nginx/htpasswd"
      - "/etc/nginx/vhost.d"
      - "/usr/share/nginx/html"
      - "/var/run/docker.sock:/tmp/docker.sock:ro"
      - "/etc/nginx/certs"

  letsencrypt-nginx-proxy-companion:
    restart: always
    image: jrcs/letsencrypt-nginx-proxy-companion
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    volumes_from:
      - "nginx-proxy"

Qui stai definendo due servizi che Docker Compose eseguirà nginx-proxy e il suo compagno Let's Encrypt. Per il proxy, specificare jwilder/nginx-proxy come immagine, mappare le porte HTTP e HTTPS e definire i volumi che saranno accessibili ad esso durante il runtime.

I volumi sono directory sul tuo server a cui il servizio definito avrà pieno accesso, che successivamente utilizzerai per configurare l'autenticazione utente. Per ottenere ciò, farai uso del primo volume dall'elenco, che mappa la directory locale /etc/nginx/htpasswd sullo stesso contenitore. In quella cartella, nginx-proxy si aspetta di trovare un file chiamato esattamente come il dominio di destinazione, contenente le credenziali di accesso per l'autenticazione dell'utente nel htpasswd formato (username:hashed_password).

Per il componente aggiuntivo, si denomina l'immagine Docker e si consente l'accesso al socket Docker definendo un volume. Quindi, si specifica che il componente aggiuntivo deve ereditare l'accesso ai volumi definiti per nginx-proxy. Entrambi i servizi  hanno il parametro restart impostato su always, che ordina a Docker di riavviare i contenitori in caso di arresto anomalo o riavvio del sistema.

Salva e chiudi il file.

Applicare la configurazione eseguendo questo comando:

docker-compose -f nginx-proxy-compose.yaml up -d

Qui si passa il nome file nginx-proxy-compose.yaml al parametro -f del comando docker-compose, che specifica il file da eseguire. Quindi, si passa l'argomento up che gli indica di eseguire i contenitori. Il flag -d abilita la modalità staccata, il che significa che Docker Compose eseguirà i contenitori in background.

L'output finale sarà simile al seguente:

Creating network "eclipse-theia_default" with the default driver
Pulling nginx-proxy (jwilder/nginx-proxy:)...
latest: Pulling from jwilder/nginx-proxy
8d691f585fa8: Pull complete
5b07f4e08ad0: Pull complete
...
Digest: sha256:dfc0666b9747a6fc851f5fb9b03e65e957b34c95d9635b4b5d1d6b01104bde28
Status: Downloaded newer image for jwilder/nginx-proxy:latest
Pulling letsencrypt-nginx-proxy-companion (jrcs/letsencrypt-nginx-proxy-companion:)...
latest: Pulling from jrcs/letsencrypt-nginx-proxy-companion
89d9c30c1d48: Pull complete
668840c175f8: Pull complete
...
Digest: sha256:a8d369d84079a923fdec8ce2f85827917a15022b0dae9be73e6a0db03be95b5a
Status: Downloaded newer image for jrcs/letsencrypt-nginx-proxy-companion:latest
Creating eclipse-theia_nginx-proxy_1 ... done
Creating eclipse-theia_letsencrypt-nginx-proxy-companion_1 ... done

Hai distribuito nginx-proxy e il componente Let's Encrypt usando Docker Compose. Ora passerai a configurare Eclipse Theia nel tuo dominio e proteggerlo.

Configurare Dockerized Eclipse Theia

In questa sezione, creerai un file contenente tutte le combinazioni di accesso consentite che un utente dovrà inserire. Quindi, distribuirai Eclipse Theia sul tuo server usando Docker Compose.

Come spiegato nel passaggio precedente, nginx-proxy si aspetta che le combinazioni di accesso si trovino in un file che prende il nome dal dominio esposto, nel formato htpasswd e memorizzato nella directory nel contenitore /etc/nginx/htpasswd. La directory locale che si associa a quella virtuale non deve necessariamente essere la stessa, come specificato nella configurazione nginx-proxy.

Per creare combinazioni di accesso, devi prima installare htpasswd eseguendo il comando seguente:

sudo apt install apache2-utils

Il pacchettoapache2-utils  contiene  l'utilityhtpasswd.

Crea la directory /etc/nginx/htpasswd:

sudo mkdir -p /etc/nginx/htpasswd

Crea un file che memorizzerà gli accessi per il tuo dominio:

sudo touch /etc/nginx/htpasswd/theia.your_domain

Ricorda di sostituire theia.your_domain con il tuo dominio.

Per aggiungere una combinazione nome utente e password, eseguire il comando seguente:

sudo htpasswd /etc/nginx/htpasswd/theia.your_domain username

Sostituisci username con il nome utente che desideri aggiungere. Ti verrà richiesta una password due volte. Dopo averlo fornito, htpasswd aggiungerà la coppia nome utente e password con hash alla fine del file. Puoi ripetere questo comando per tutti gli accessi che desideri aggiungere.

Ora creerai la configurazione per distribuire Eclipse Theia. Lo memorizzerai in un file denominato eclipse-theia-compose.yaml. Crealo usando il tuo editor di testo:

nano eclipse-theia-compose.yaml

Aggiungi le seguenti righe:

version: '2.2'

services:
  eclipse-theia:
    restart: always
    image: theiaide/theia:next
    init: true
    environment:
      - VIRTUAL_HOST=theia.your_domain
      - LETSENCRYPT_HOST=theia.your_domain

In questa configurazione, si definisce un singolo servizio chiamato eclipse-theia con restart impostato su always e theiaide/theia:next come immagine del contenitore. Si imposta inoltre init su true per indicare a Docker di utilizzare init come gestore principale del processo quando si esegue Eclipse Theia all'interno del contenitore.

Quindi, si specificano due variabili di ambiente nella sezione environment: VIRTUAL_HOST e LETSENCRYPT_HOST. Il primo viene utilizzato con nginx-proxy che gli dice in quale dominio deve essere esposto il contenitore, mentre il secondo viene utilizzato dal componente aggiuntivo Let's Encrypt e specifica per quale dominio richiedere certificati TLS. A meno che non si specifichi un carattere wildcard come valore per VIRTUAL_HOST, devono essere uguali.

Ricorda di sostituire theia.your_domain con il dominio desiderato, quindi salva e chiudi il file.

Ora distribuisci Eclipse Theia eseguendo:

docker-compose -f eclipse-theia-compose.yaml up -d

L'output finale sarà simile a:

...
Pulling eclipse-theia (theiaide/theia:next)...
next: Pulling from theiaide/theia
63bc94deeb28: Pull complete
100db3e2539d: Pull complete
...
Digest: sha256:c36dff04e250f1ac52d13f6d6e15ab3e9b8cad9ad68aba0208312e0788ecb109
Status: Downloaded newer image for theiaide/theia:next
Creating eclipse-theia_eclipse-theia_1 ... done

Quindi, nel tuo browser, vai al dominio che stai utilizzando per Eclipse Theia. Il tuo browser ti mostrerà un prompt che ti chiede di accedere. Dopo aver fornito le credenziali corrette, entrerai in Eclipse Theia e vedrai immediatamente la sua GUI dell'editor. Nella barra degli indirizzi vedrai un lucchetto che indica che la connessione è sicura. Se non lo vedi immediatamente, attendi qualche minuto per il provisioning dei certificati TLS, quindi ricarica la pagina.

Ora che puoi accedere in modo sicuro al tuo IDE cloud, inizierai a utilizzare l'editor nel passaggio successivo.

Utilizzare l'interfaccia Eclipse Theia

In questa sezione, esplorerai alcune delle funzionalità dell'interfaccia di Eclipse Theia.

Sul lato sinistro dell'IDE, c'è una fila verticale di quattro pulsanti che aprono le funzioni più comunemente usate in un pannello laterale.

Questa barra è personalizzabile in modo da poter spostare queste viste in un ordine diverso o rimuoverle dalla barra. Per impostazione predefinita, la prima vista apre il pannello Explorer che fornisce una navigazione ad albero della struttura del progetto. È possibile gestire le cartelle e i file qui, creando, eliminando, spostando e rinominandoli secondo necessità.

Dopo aver creato un nuovo file tramite il menu File , vedrai un file vuoto aperto in una nuova scheda. Una volta salvato, è possibile visualizzare il nome del file nel pannello laterale Explorer. Per creare cartelle, fare clic con il tasto destro sulla barra laterale Explorer e fare clic su Nuova cartella . È possibile espandere una cartella facendo clic sul suo nome, nonché trascinando e rilasciando file e cartelle nelle parti superiori della gerarchia per spostarli in una nuova posizione.

Le successive due opzioni forniscono l'accesso alla ricerca e alla funzionalità di sostituzione. In seguito, quello successivo fornisce una vista dei sistemi di controllo del codice sorgente che potresti utilizzare, come Git.

La vista finale è l'opzione debugger, che fornisce tutte le azioni comuni per il debug nel pannello. È possibile salvare le configurazioni di debug nel file launch.json.

La parte centrale della GUI è il tuo editor, che puoi separare per schede per la modifica del codice. È possibile modificare la vista di modifica in un sistema a griglia o in file affiancati. Come tutti gli IDE moderni, Eclipse Theia supporta l'evidenziazione della sintassi per il tuo codice.

È possibile accedere a un terminale digitando CTRL+SHIFT+` o facendo clic su Terminale nel menu superiore e selezionando Nuovo terminale . Il terminale si aprirà in un pannello inferiore e la sua directory di lavoro verrà impostata nell'area di lavoro del progetto, che contiene i file e le cartelle mostrati nel pannello laterale Explorer.

Conclusione

Ora hai Eclipse Theia, un IDE cloud versatile, installato sul tuo server Ubuntu 18.04 usando Docker Compose e nginx-proxy. Lo hai protetto con un certificato TLS Let's Encrypt gratuito e impostato l'istanza per richiedere le credenziali di accesso da parte dell'utente.