7 puntos por GN⁺ 2024-08-27 | 1 comentarios | Compartir por WhatsApp

¿Qué es Dokku?

  • Dokku es una Platform as a Service (PaaS) de código abierto que se ejecuta en un solo servidor
  • Es similar a Heroku, pero es propiedad del usuario
  • Se necesita una plataforma serverless rentable y fácil de usar
  • Se opera un servidor Dokku usando un VPS de $7 al mes en OVHcloud

Funciones principales de Dokku

  • Fácil de usar (similar a Heroku)
  • Gestión automática de certificados SSL mediante Let’s Encrypt
  • Soporte de Basic Auth para proteger sitios con contraseña
  • Escalado hacia arriba y hacia abajo con un solo comando
  • Flexibilidad para manejar diversas aplicaciones como Node, Python y más
  • Despliegue sencillo mediante comandos de git

Ejemplo mínimo de Dokku

Desplegar una aplicación con un contenedor Docker

  • Coloca el Dockerfile en la raíz del repositorio git
  • Usa el script entrypoint.sh para ejecutar la aplicación localmente o en un contenedor Docker
  • Crea la aplicación en el host de Dokku
  • Agrega el host de Dokku como remoto desde local y haz push
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

Desplegar un sitio estático

  • Con Dokku, es posible desplegar fácilmente un sitio estático desde un repositorio privado de GitHub y protegerlo con contraseña
  • Configura la variable de entorno NGINX_ROOT para que NGINX sirva el sitio estático
  • Instala y configura el plugin de autenticación básica
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

  • Es posible configurar HTTPS usando el plugin de Let’s Encrypt
  • Si usas Cloudflare, es más fácil configurarlo para que Cloudflare se encargue de ello

Despliegue con GitHub Actions

  • Es posible desplegar automáticamente aplicaciones de Dokku usando GitHub Actions
  • Ejemplo de flujo de trabajo de 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

Otros consejos

  • Es posible ejecutar comandos de forma remota
  • Invalidar la caché de Docker
  • Reconstruir sin hacer push
ssh dokku@rechat.co apps:list
ssh dokku@rechat.co repo:purge-cache llm-eval
ssh dokku@rehcat.co ps:rebuild llm-eval

¿Por qué escribí este artículo?

  • Lo escribí porque tenía que buscar los detalles cada vez que desplegaba una nueva aplicación
  • Espero que también sea útil para otras personas

Resumen de GN⁺

  • Dokku es una plataforma PaaS de código abierto rentable y fácil de usar
  • Ofrece funciones para desplegar y administrar fácilmente diversas aplicaciones
  • Permite despliegues automáticos usando herramientas como GitHub Actions
  • Es aún más conveniente cuando se usa junto con servicios como Cloudflare
  • Otros proyectos con funciones similares incluyen Heroku, Fly.io y más

1 comentarios

 
GN⁺ 2024-08-27
Comentarios de Hacker News
  • Últimamente he estado disfrutando usar Dokploy

    • Es similar a Dokku, pero ofrece una mejor interfaz web
    • Facilita el despliegue de soluciones Docker/Compose e incluye automatización de LetsEncrypt
    • Armé un flujo de trabajo de GitHub Actions para automatizar el despliegue de aplicaciones
    • También ofrece archivos Compose preconfigurados para varias aplicaciones
  • Después de revisar varias soluciones de "Heroku autoalojado", elegí Dokku

    • Requiere la menor cantidad de "magia" y es fácil de quitar incluso si dejas de usarlo
    • El desarrollador responde muy bien y recibí ayuda para crear un plugin personalizado
    • Documenté el tema en mi blog
  • Al usar software nuevo uno puede encontrarse con problemas, pero con Dokku no me pasó eso

    • Salvo algunos problemas con el orden de ciertos argumentos de la CLI, funciona bien
    • Si lo usara más, me gustaría configurar toda la arquitectura con archivos de configuración declarativos
  • Dokku facilita la configuración de HTTPS mediante el plugin de Let's Encrypt

    • Estoy usando TLS a través de Cloudflare
    • Hay que asegurarse de que los sitios personales no se transmitan en texto plano
  • Usé Dokku por un tiempo y luego cambié a construir imágenes Docker y desplegar con Swarm

    • Eso me motivó a desarrollar Lunni, un PaaS autoalojado
    • Me gusta la idea de ejecutar todo en servidores que poseo en lugar de usar Heroku o AWS
    • Tener una factura mensual predecible me da tranquilidad
  • Coolify está ganando popularidad y permite que organizaciones de cualquier tamaño operen software autoalojado fácilmente y gratis

    • Coolify es una alternativa de código abierto y autoalojable a Heroku/Netlify/Vercel
  • Dokku es un producto increíble y su fundador es muy humilde y servicial

    • Ojalá más gente lo apoyara económicamente
  • Me pregunto qué usan como almacenamiento de archivos/objetos para este tipo de infraestructura

    • Si usas AWS, los costos de egreso pueden anular cualquier ahorro
  • Mi experiencia usando Dokku no fue buena

    • El VPS fallaba y, al reiniciarse, las aplicaciones no volvían a arrancar
    • Al final cambié a una configuración de k8s de un solo nodo
  • Se puede usar traefik + podman estándar + integración con systemd

    • Se proporcionan documentación y enlaces relacionados