Dokku est une implémentation de plate-forme en tant que service (PaaS), que vous pouvez auto-héberger sur votre propre matériel. Dokku utilise Docker pour déployer automatiquement votre code lorsque vous git push
depuis votre terminal.
La configuration d'un serveur Dokku vous permet de déployer rapidement de nouvelles applications à l'aide du flux de travail Git familier. Les coûts d'hébergement peuvent être bien inférieurs à ceux des solutions PaaS commerciales et des offres Kubernetes gérées. Une fois votre serveur Dokku opérationnel, le lancement d'une nouvelle application ne devrait prendre que quelques instants.
Mise en route
Dokku prend en charge plusieurs méthodes d'installation. Lors de l'installation sur du matériel nu, utilisez le script d'amorçage officiel pour télécharger la dernière version.
wget https://raw.githubusercontent.com/dokku/dokku/v0.24.7/bootstrap.sh sudo DOKKU_TAG=v0.24.7 bash bootstrap.sh
Le script d'amorçage transformera une nouvelle installation Linux en un serveur Dokku fonctionnel. Les dépendances logicielles, y compris Docker, seront téléchargées et installées automatiquement. Le processus peut prendre jusqu'à 10 minutes, selon votre connexion Internet.
Vous pouvez exécuter Dokku en tant que conteneur Docker. C'est idéal lorsque vous utilisez un environnement où Docker est déjà disponible.
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
Remplacez example.com
avec le nom d'hôte que vous utiliserez pour accéder à votre serveur. Dans cet exemple, les ports 80 et 443 seront liés à vos ports hôtes 8080 et 8443, respectivement. Le port 3022 sur votre hôte sera mappé au port 22 dans le conteneur. Ce port est utilisé pour les connexions Git+SSH.
Un volume est créé à /mnt/dokku
. Les données de l'application Dokku seront stockées ici. Le socket Docker de l'hôte est également monté dans le conteneur afin que Dokku puisse interagir avec le démon Docker pour créer de nouveaux conteneurs.
Configurer Dokku
Une fois l'installation terminée, visitez l'adresse IP de votre hôte dans votre navigateur. Si vous avez attribué un nom d'hôte à Dokku, vous pouvez également l'utiliser ici. Le programme d'installation Web apparaîtra pour vous guider tout au long de la configuration.
Copiez et collez une clé SSH dans le champ "Clé publique". Dokku acceptera toutes les connexions SSH établies avec cette clé. Vous pouvez ajouter d'autres clés ultérieurement à l'aide de la CLI Dokku.
Vous devez également configurer le nom d'hôte de votre installation Dokku s'il n'a pas été configuré. Si vous avez un domaine mappé sur votre machine, entrez-le ici. Sinon, vous pouvez utiliser localhost
ou une adresse IP.
Lorsqu'un nom d'hôte a été configuré, Dokku peut automatiquement servir vos applications en utilisant des sous-domaines individuels. Si vous n'avez pas de domaine disponible, décochez la case "Utiliser le nommage de l'hôte virtuel". Dokku servira chacune de vos applications sur un port dédié à la place.
Si vous avez installé Dokku avec Docker, la configuration Web n'est pas prise en charge. Vous pouvez ajouter un nom d'hôte lors de la création du conteneur en définissant le DOKKU_HOSTNAME
variables d'environnement. Pour ajouter des clés SSH, vous devrez vous connecter au conteneur et utiliser la CLI Dokku :
docker exec -it dokku dokku ssh-keys add my-key < /path/to/key
Une fois que vous avez défini un nom d'hôte et ajouté une clé SSH, Dokku devrait être prêt à l'emploi. Aucune autre administration n'est possible à l'aide de l'interface utilisateur Web. Vous interagissez avec Dokku via les commandes Git et la CLI.
Déploiement d'applications
Vous êtes maintenant prêt à lancer votre première application ! Les déploiements Dokku commencent par un git push
. Dokku utilise des buildpacks (Cloud Native ou Herokuish) pour détecter le langage de programmation de votre application et créer automatiquement une version.
Dokku prend également en charge l'exécution de docker build
directement si votre projet contient un Dockerfile
. Cette fonctionnalité ne peut être utilisée que lorsque les générateurs basés sur le buildpack ne sont pas disponibles pour votre projet. Vous pouvez obtenir plus d'informations sur les builds Docker directs dans la documentation Dokku.
L'utilisation de buildpacks signifie que Dokku impose peu de restrictions sur la façon dont votre projet est créé. Si vous utilisez un langage et un framework populaires, vous devriez pouvoir git push
pour créer votre déploiement. Voici un exemple pour une application React de base :
mkdir my-app cd my-app npx create-react-app . git remote add dokku [email protected]:my-app git push dokku master
Les deux dernières lignes sont les plus importantes. Votre serveur Dokku est ajouté en tant que télécommande Git afin que vous puissiez lui envoyer du code. Remplacez example.com
avec l'adresse IP ou le nom d'hôte de votre installation. La partie après les deux-points indique le projet Dokku vers lequel pousser. Vous n'avez pas besoin de le créer manuellement.
Une fois la télécommande configurée, vous êtes prêt à lui envoyer du code. L'exemple de commande pousse le master
branche jusqu'à Dokku. Dokku prendra votre projet, détectera automatiquement un buildpack approprié, créera une image Docker et déploiera votre application.
Associer des domaines d'application
Dokku déploie votre application sur un sous-domaine de votre nom d'hôte. Vous pouvez attacher un domaine personnalisé à l'aide de la CLI Dokku. Assurez-vous d'abord d'avoir configuré les enregistrements DNS appropriés.
dokku domains:add my-app example.com
Visiter example.com
va maintenant servir votre my-app
déploiement.
Ajout de SSL
Dokku facilite l'activation de SSL pour vos applications. Vous pouvez ajouter un plugin qui intègre Dokku avec Let's Encrypt. Une fois le plugin installé, vous pouvez acquérir des certificats SSL avec une seule commande.
Tout d'abord, installez le plugin :
dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git
Ensuite, configurez le plugin Let's Encrypt avec votre adresse e-mail. Let's Encrypt utilisera cette adresse pour vous envoyer toute alerte relative à vos certificats.
dokku config:set --global no-restart [email protected]
Vous devez ajouter la tâche cron Let's Encrypt pour vous assurer que Dokku peut renouveler vos certificats automatiquement :
dokku letsencrypt:cron-job --add
Enfin, activez Let's Encrypt pour votre application :
dokku letsencrypt my-app
Le plugin Let’s Encrypt acquerra un certificat pour couvrir les domaines connectés à votre application. Le certificat sera automatiquement renouvelé avant son expiration.
Mise à jour de votre application
Dokku s'appuie sur le workflow Git. Vous pouvez mettre à jour votre application en modifiant la base de code, en créant des commits Git, puis en transférant votre branche vers Dokku.
Lorsque Dokku reçoit un nouveau push, il utilise ses buildpacks pour construire un conteneur Docker mis à jour. Le conteneur en cours d'exécution sera remplacé par le nouveau une fois la construction terminée. Les mises à jour sont sans temps d'arrêt et entièrement automatisées.
La durée du processus de génération varie en fonction de la taille de votre application et des technologies qu'elle utilise. Dokku attend encore 10 secondes après la fin de la construction avant que le trafic ne soit dirigé vers de nouveaux conteneurs. Cela donne à tous les scripts d'amorçage une chance de se terminer.
Dokku peut facilement être intégré dans des systèmes d'intégration continue (CI). La dernière étape d'un pipeline CI pourrait être un git push dokku
pour mettre à jour votre déploiement en direct.
Gestion des succursales
Dokku déploie généralement les modifications apportées au master
une succursale. Vous pouvez choisir d'utiliser une branche différente à l'aide d'un paramètre global ou par application :
dokku git:set --global deploy-branch dokku-deploy dokku git:set my-app deploy-branch production
Avec cette configuration, Dokku se déploiera par défaut à partir de dokku-deploy
une succursale. Déploiements pour my-app
l'application sera créée à partir de la production
à la place.
Ajout de fonctionnalités supplémentaires
Il y a bien plus dans Dokku que le déploiement de base sur lequel nous nous sommes concentrés ici. La distribution par défaut est intentionnellement rationalisée. Les plugins officiels et communautaires peuvent être utilisés pour fournir des services, tels que des bases de données et l'authentification. Cela vous permet d'utiliser Dokku pour les backends avec état ainsi que pour vos frontends statiques.
La mise en place d'un service est généralement un processus en deux étapes. Vous créez une instance du service, puis vous la liez à vos applications. Plusieurs applications peuvent être connectées à chaque instance de service.
Voici comment ajouter une base de données MySQL à une application :
dokku plugin:install https://github.com/dokku/dokku-mysql.git dokku mysql:create demo-db dokku mysql:link demo-db my-app
Dokku définira le DATABASE_URL
variable d'environnement dans le conteneur de votre application. Vous pouvez accéder à cette variable pour récupérer la chaîne de connexion MySQL. L'utilisation des plugins Dokku pour les bases de données élimine le besoin de gérer un autre serveur de base de données externe.
Conclusion
Docker est une solution PaaS qui vous permet d'héberger votre propre plateforme d'applications. Une fois que Dokku est opérationnel, lancer une nouvelle application est aussi simple qu'un git push
.
Dokku se compare favorablement à des services tels que Heroku, Amazon Elastic Beanstalk et Google Firebase. Il prend en charge un grand nombre de technologies de développement et signifie que vous n'êtes pas lié à un fournisseur de cloud particulier. Vous pouvez exécuter Dokku sur une machine virtuelle cloud bon marché ou le conserver sur votre propre matériel physique.