7 points par GN⁺ 2024-08-27 | 1 commentaires | Partager sur WhatsApp

Qu’est-ce que Dokku ?

  • Dokku est une Platform as a Service (PaaS) open source qui s’exécute sur un seul serveur
  • Similaire à Heroku, mais détenue par l’utilisateur
  • Besoin d’une plateforme serverless économique et facile à utiliser
  • Exploitation d’un serveur Dokku sur un VPS à 7 $/mois chez OVHcloud

Principales fonctionnalités de Dokku

  • Facile à utiliser (similaire à Heroku)
  • Gestion automatique des certificats SSL via Let’s Encrypt
  • Prise en charge de l’authentification basique pour protéger un site par mot de passe
  • Possibilité d’augmenter ou réduire l’échelle avec une seule commande
  • Flexibilité permettant de gérer diverses applications comme Node, Python, etc.
  • Déploiement facile avec des commandes git

Exemple minimal avec Dokku

Déployer une application avec un conteneur Docker

  • Placer le Dockerfile à la racine du dépôt git
  • Utiliser le script entrypoint.sh pour exécuter l’application en local ou dans un conteneur Docker
  • Créer l’application sur l’hôte Dokku
  • Ajouter l’hôte Dokku comme remote en local, puis pousser
FROM python:3.10
COPY . /app
WORKDIR /app
RUN pip install .
WORKDIR /app/
ENTRYPOINT ["./entrypoint.sh"]
#!/bin/bash
exec uvicorn main:app --port "$PORT" --host 0.0.0.0
dokku apps:create myapp
git remote add dokku dokku@dokku:myapp
git push dokku main

Déployer un site statique

  • Avec Dokku, il est possible de déployer facilement un site statique depuis un dépôt GitHub privé et de le protéger par mot de passe
  • Définir la variable d’environnement NGINX_ROOT pour que NGINX serve le site statique
  • Installer et configurer le plugin d’authentification basique
dokku apps:create mysite
dokku config:set static-site NGINX_ROOT=_site
sudo dokku plugin:install https://github.com/dokku/dokku-http-auth.git
sudo chmod +x /home/dokku
touch .static
echo BUILDPACK_URL=https://github.com/dokku/buildpack-nginx > .env
git remote add dokku dokku@dokku:mysite
git push dokku main
dokku http-auth:enable mysite <username> <password>

SSL / HTTPS

  • Il est possible de configurer HTTPS avec le plugin Let’s Encrypt
  • Si vous utilisez Cloudflare, il est plus simple de le laisser gérer cela

Déploiement avec GitHub Actions

  • Il est possible de déployer automatiquement des applications Dokku avec GitHub Actions
  • Exemple de workflow GitHub Action
name: CI
on:
  workflow_dispatch:
  push:
    branches: [main]
jobs:
  deploy-dokku:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - name: Install SSH key
        run: |
          echo "${{ secrets.DOKKU_SSH_PRIVATE_KEY }}" > private_key.pem
          chmod 600 private_key.pem
      - name: Add remote and push
        run: |
          git remote add dokku dokku@rechat.co:llm-eval
          GIT_SSH_COMMAND="ssh -i private_key.pem -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git push dokku main -f

Autres conseils

  • Exécuter des commandes à distance
  • Invalider le cache Docker
  • Rebuild sans push
ssh dokku@rechat.co apps:list
ssh dokku@rechat.co repo:purge-cache llm-eval
ssh dokku@rehcat.co ps:rebuild llm-eval

Pourquoi ai-je écrit cet article ?

  • Je l’ai écrit parce que je devais retrouver les détails à chaque déploiement d’une nouvelle application
  • J’espère que cela sera utile à d’autres

Résumé GN⁺

  • Dokku est une plateforme PaaS open source économique et facile à utiliser
  • Elle fournit des fonctionnalités permettant de déployer et gérer facilement diverses applications
  • Le déploiement automatique est possible avec des outils comme GitHub Actions
  • C’est encore plus pratique avec des services comme Cloudflare
  • Parmi les autres projets offrant des fonctionnalités similaires figurent Heroku, Fly.io, etc.

1 commentaires

 
GN⁺ 2024-08-27
Avis Hacker News
  • Prend récemment beaucoup de plaisir à utiliser Dokploy

    • Similaire à Dokku, mais avec une meilleure interface web
    • Facilite le déploiement de solutions Docker/Compose et intègre automatiquement LetsEncrypt
    • A mis en place un workflow GitHub Actions pour automatiser le déploiement des applications
    • Fournit aussi des fichiers Compose préconfigurés pour diverses applications
  • Après avoir étudié plusieurs solutions de type « Heroku auto-hébergé », a choisi Dokku

    • Nécessite le moins de « magie » et reste facile à retirer si on cesse de l’utiliser
    • Le développeur est très réactif et a aidé à créer un plugin personnalisé
    • A documenté cela sur son blog
  • Il peut y avoir des problèmes en utilisant un nouveau logiciel, mais ce n’est pas le cas avec Dokku

    • Hormis quelques problèmes d’ordre des arguments CLI, cela fonctionne bien
    • En cas d’usage plus intensif, aimerait configurer toute l’architecture avec des fichiers de configuration déclaratifs
  • Dokku rend la configuration HTTPS facile via le plugin Let's Encrypt

    • Utilise TLS via Cloudflare
    • Il faut veiller à ce que les sites personnels ne soient pas transmis en clair
  • A utilisé Dokku avant de passer à la construction d’images Docker et au déploiement avec Swarm

    • Cela a motivé le développement de Lunni, une PaaS auto-hébergée
    • Aime l’idée d’exécuter tout sur des serveurs lui appartenant plutôt que sur Heroku ou AWS
    • Une facture mensuelle prévisible apporte une tranquillité d’esprit
  • La popularité de Coolify est en hausse et permet aux organisations de toute taille d’exécuter facilement des logiciels auto-hébergés gratuitement

    • Coolify est une alternative open source et auto-hébergeable à Heroku/Netlify/Vercel
  • Dokku est un produit remarquable et son fondateur est très humble et serviable

    • Aimerait que davantage de personnes le soutiennent financièrement
  • Se demande ce qui est utilisé comme stockage de fichiers/objets pour ce type d’infrastructure

    • Avec AWS, les coûts d’egress peuvent annuler toutes les économies réalisées
  • N’a pas eu une bonne expérience avec Dokku

    • Le VPS plantait et, au redémarrage, les applications ne redémarraient pas
    • A finalement migré vers une configuration k8s à nœud unique
  • Il est possible d’utiliser traefik + podman standard + l’intégration systemd

    • Documentation et liens associés fournis