GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Comment héberger votre propre plate-forme 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.

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.


Docker
  1. Comment installer et héberger un serveur OpenVPN avec Docker

  2. Comment installer Jenkins avec Docker

  3. Comment déployer des microservices avec Docker

  4. Comment déployer des applications avec Rancher

  5. Comment déployer un conteneur nginx avec Docker sur Linode

Comment remplacer Docker par Podman sur un Mac

Comment héberger votre propre plate-forme en tant que service (PaaS) avec Dokku

Comment se connecter à Localhost dans un conteneur Docker

Comment indexer les dépendances de votre image Docker avec Syft

Comment copier des fichiers avec Docker cp dans votre conteneur Docker

Comment exécuter votre propre serveur Git avec GitlabHQ sur Ubuntu 14.04