Comment héberger votre propre plateforme en tant que service (PaaS) avec Dokku –
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.
Sommaire
Commencer
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 dans lequel 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
Remplacer example.com
avec le nom d’hôte que vous utiliserez pour accéder à votre serveur. En utilisant cet exemple, les ports 80 et 443 seront liés à vos ports hôtes 8080 et 8443, respectivement. Le port 3022 de 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 à travers le reste de la configuration.
Copiez et collez une clé SSH dans le champ «Clé publique». Dokku acceptera toutes les connexions SSH effectuées 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 ordinateur, saisissez-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 la dénomination de l’hôte virtuel ». Dokku servira à la place chacune de vos applications sur un port dédié.
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
variable 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 à être utilisé. 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éployer des 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 build.
Dokku prend également en charge l’exécution 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 versions directes de Docker dans la documentation de 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 d’application React de base:
mkdir my-app cd my-app npx create-react-app . git remote add dokku dokku@example.com: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 y envoyer du code. Remplacer 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 à y 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.
Joindre 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 que vous avez d’abord configuré les enregistrements DNS appropriés.
dokku domains:add my-app example.com
Visite 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 les alertes relatives à vos certificats.
dokku config:set --global no-restart DOKKU_LETSENCRYPT_EMAIL=me@example.com
Vous devez ajouter le travail 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 va acquérir un certificat pour couvrir les domaines connectés à votre application. Le certificat sera automatiquement renouvelé avant son expiration.
Mettre à jour votre application
Dokku s’appuie sur le workflow Git. Vous pouvez mettre à jour votre application en apportant des modifications à la base de code, en créant des commits Git, puis en poussant 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.
Gérer les succursales
Dokku déploie généralement les modifications apportées au master
branche. Vous pouvez choisir d’utiliser une autre branche à 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 effectuera par défaut le déploiement à partir du dokku-deploy
branche. Déploiements pour le my-app
l’application sera créée à partir de production
plutôt.
Il y a beaucoup plus à 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 à l’intérieur de votre conteneur d’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 supprime 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 plate-forme d’application. Une fois que Dokku est opérationnel, lancer une nouvelle application est aussi simple qu’un git push
.
Dokku se compare avantageusement à 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.