Dokku è un'implementazione Platform-as-a-Service (PaaS), che puoi ospitare autonomamente sul tuo hardware. Dokku utilizza Docker per distribuire automaticamente il tuo codice quando git push
dal tuo terminale.
La configurazione di un server Dokku ti consente di distribuire rapidamente nuove applicazioni utilizzando il familiare flusso di lavoro Git. I costi di hosting possono essere molto inferiori rispetto alle soluzioni PaaS commerciali e alle offerte Kubernetes gestite. Una volta che il tuo server Dokku è attivo e funzionante, l'avvio di una nuova applicazione dovrebbe richiedere solo pochi istanti.
Per iniziare
Dokku supporta diversi metodi di installazione. Quando si esegue l'installazione su hardware bare-metal, utilizzare lo script bootstrap ufficiale per scaricare l'ultima versione.
wget https://raw.githubusercontent.com/dokku/dokku/v0.24.7/bootstrap.sh sudo DOKKU_TAG=v0.24.7 bash bootstrap.sh
Lo script bootstrap trasformerà una nuova installazione di Linux in un server Dokku funzionante. Le dipendenze del software, incluso Docker, verranno scaricate e installate automaticamente. Il processo potrebbe richiedere fino a 10 minuti, a seconda della tua connessione Internet.
Puoi eseguire Dokku come contenitore Docker. È l'ideale quando utilizzi un ambiente in cui Docker è già disponibile.
docker run --env DOKKU_HOSTNAME=example.com --name doku -p 3022:22 -p 8080:80 -p 8443:443 -v /var/lib/dokku:/mnt/dokku -v /var/run/docker.sock:/var/run/docker.sock dokku/dokku:0.24.7
Sostituisci example.com
con il nome host che utilizzerai per accedere al tuo server. Utilizzando questo esempio, le porte 80 e 443 saranno associate rispettivamente alle porte host 8080 e 8443. La porta 3022 sull'host verrà mappata sulla porta 22 all'interno del container. Questa porta viene utilizzata per le connessioni Git+SSH.
Viene creato un volume in /mnt/dokku
. I dati dell'applicazione Dokku verranno archiviati qui. Anche il socket Docker dell'host è montato nel container in modo che Dokku possa interagire con il daemon Docker per creare nuovi container.
Configurazione di Dokku
Al termine dell'installazione, visita l'indirizzo IP del tuo host nel tuo browser. Se hai assegnato a Dokku un nome host, puoi anche usarlo qui. Il programma di installazione web apparirà per guidarti attraverso il resto della configurazione.
Copia e incolla una chiave SSH nel campo "Chiave pubblica". Dokku accetterà qualsiasi connessione SSH effettuata con questa chiave. Puoi aggiungere altre chiavi in un secondo momento utilizzando l'interfaccia a riga di comando di Dokku.
Devi anche configurare il nome host della tua installazione di Dokku se non è stato impostato. Se hai un dominio mappato sulla tua macchina, inseriscilo qui. Altrimenti puoi usare localhost
o un indirizzo IP.
Quando è stato impostato un nome host, Dokku può servire automaticamente le tue app utilizzando i singoli sottodomini. Se non hai un dominio disponibile, deseleziona la casella di controllo "Usa denominazione host virtuale". Dokku servirà invece ciascuna delle tue app su una porta dedicata.
Se hai installato Dokku con Docker, la configurazione web non è supportata. Puoi aggiungere un nome host durante la creazione del contenitore impostando il DOKKU_HOSTNAME
variabile d'ambiente. Per aggiungere chiavi SSH, devi connetterti al container e utilizzare Dokku CLI:
docker exec -it dokku dokku ssh-keys add my-key < /path/to/key
Dopo aver impostato un nome host e aggiunto una chiave SSH, Dokku dovrebbe essere pronto per l'uso. Non è possibile alcuna ulteriore amministrazione utilizzando l'interfaccia utente web. Interagisci con Dokku tramite i comandi Git e la CLI.
Distribuzione di applicazioni
Ora sei pronto per lanciare la tua prima app! Le implementazioni di Dokku iniziano con un git push
. Dokku utilizza i buildpack (Cloud Native o Herokuish) per rilevare il linguaggio di programmazione della tua app e creare automaticamente una build.
Dokku supporta anche l'esecuzione di docker build
direttamente se il tuo progetto contiene un Dockerfile
. Questa funzionalità può essere utilizzata solo quando i builder basati su buildpack non sono disponibili per il tuo progetto. Puoi ottenere maggiori informazioni sulle build Docker dirette nella documentazione di Dokku.
L'uso dei buildpack significa che Dokku pone poche restrizioni su come viene creato il tuo progetto. Se stai utilizzando un linguaggio e un framework popolari, dovresti essere in grado di git push
per creare la tua distribuzione. Ecco un esempio per un'app React di base:
mkdir my-app cd my-app npx create-react-app . git remote add dokku [email protected]:my-app git push dokku master
Le ultime due righe sono le più importanti. Il tuo server Dokku viene aggiunto come telecomando Git in modo da potervi inviare il codice. Sostituisci example.com
con l'IP o il nome host dell'installazione. La parte dopo i due punti indica il progetto Dokku a cui spingere. Non è necessario crearlo manualmente.
Dopo aver impostato il telecomando, sei pronto per inserire il codice. Il comando di esempio spinge il master
diramarsi a Dokku. Dokku prenderà il tuo progetto, rileverà automaticamente un buildpack appropriato, creerà un'immagine Docker e distribuirà la tua app.
Collegamento di domini app
Dokku distribuisce la tua app a un sottodominio del tuo nome host. Puoi allegare un dominio personalizzato utilizzando l'interfaccia a riga di comando di Dokku. Assicurati di aver prima impostato i record DNS appropriati.
dokku domains:add my-app example.com
Visitando example.com
ora servirà la tua my-app
distribuzione.
Aggiunta SSL
Dokku semplifica l'abilitazione di SSL per le tue app. Puoi aggiungere un plugin che integri Dokku con Let's Encrypt. Una volta installato il plugin, puoi acquisire certificati SSL con un solo comando.
Innanzitutto, installa il plug-in:
dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git
Quindi, configura il plug-in Let's Encrypt con il tuo indirizzo e-mail. Let's Encrypt utilizzerà questo indirizzo per inviarti eventuali avvisi relativi ai tuoi certificati.
dokku config:set --global no-restart [email protected]
Dovresti aggiungere il processo cron Let's Encrypt per assicurarti che Dokku possa rinnovare automaticamente i tuoi certificati:
dokku letsencrypt:cron-job --add
Infine, abilita Let's Encrypt per la tua applicazione:
dokku letsencrypt my-app
Il plug-in Let's Encrypt acquisirà un certificato per coprire i domini collegati alla tua app. Il certificato verrà rinnovato automaticamente prima della scadenza.
Aggiornamento della tua app
Dokku si basa sul flusso di lavoro Git. Puoi aggiornare la tua app apportando modifiche alla codebase, creando commit Git e quindi inviando il tuo ramo a Dokku.
Quando Dokku riceve un nuovo push, usa i suoi buildpack per costruire un container Docker aggiornato. Il container attualmente in esecuzione verrà sostituito con quello nuovo al termine della compilazione. Gli aggiornamenti sono senza tempi di inattività e completamente automatizzati.
La durata del processo di compilazione varia in base alle dimensioni dell'app e alle tecnologie utilizzate. Dokku attende altri 10 secondi dopo il completamento della build prima che il traffico venga indirizzato ai nuovi container. Questo dà la possibilità di completare qualsiasi script bootstrap.
Dokku può essere facilmente integrato nei sistemi di integrazione continua (CI). La fase finale in una pipeline CI potrebbe essere un git push dokku
per aggiornare la tua distribuzione live.
Gestione delle filiali
Dokku di solito distribuisce le modifiche apportate al master
ramo. Puoi scegliere di utilizzare una filiale diversa utilizzando un'impostazione globale o per app:
dokku git:set --global deploy-branch dokku-deploy dokku git:set my-app deploy-branch production
Con questa configurazione, Dokku eseguirà automaticamente la distribuzione da dokku-deploy
ramo. Implementazioni per my-app
l'app sarà realizzata da production
invece.
Aggiunta di funzionalità extra
C'è molto di più in Dokku rispetto alla distribuzione di base su cui ci siamo concentrati qui. La distribuzione predefinita è volutamente semplificata. I plugin ufficiali e della community possono essere utilizzati per fornire servizi, come database e autenticazione. Ciò ti consente di utilizzare Dokku per i backend con stato così come per i tuoi frontend statici.
L'impostazione di un servizio è generalmente un processo in due fasi. Crei un'istanza del servizio e poi la colleghi alle tue app. È possibile collegare più app a ciascuna istanza del servizio.
Ecco come aggiungere un database MySQL a un'app:
dokku plugin:install https://github.com/dokku/dokku-mysql.git dokku mysql:create demo-db dokku mysql:link demo-db my-app
Dokku imposterà il DATABASE_URL
variabile di ambiente all'interno del contenitore dell'app. È possibile accedere a questa variabile per recuperare la stringa di connessione MySQL. L'utilizzo dei plug-in Dokku per i database elimina la necessità di gestire un altro server di database esterno.
Conclusione
Docker è una soluzione PaaS che ti consente di ospitare la tua piattaforma applicativa. Una volta che Dokku è attivo e funzionante, avviare una nuova app è semplice come un git push
.
Dokku si confronta favorevolmente con servizi come Heroku, Amazon Elastic Beanstalk e Google Firebase. Supporta un gran numero di tecnologie di sviluppo e significa che non sei legato a un particolare fornitore di servizi cloud. Puoi eseguire Dokku su una VM economica basata su cloud o mantenerla sul tuo hardware fisico.