¿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
Comentarios de Hacker News
Últimamente he estado disfrutando usar Dokploy
Después de revisar varias soluciones de "Heroku autoalojado", elegí Dokku
Al usar software nuevo uno puede encontrarse con problemas, pero con Dokku no me pasó eso
Dokku facilita la configuración de HTTPS mediante el plugin de Let's Encrypt
Usé Dokku por un tiempo y luego cambié a construir imágenes Docker y desplegar con Swarm
Coolify está ganando popularidad y permite que organizaciones de cualquier tamaño operen software autoalojado fácilmente y gratis
Dokku es un producto increíble y su fundador es muy humilde y servicial
Me pregunto qué usan como almacenamiento de archivos/objetos para este tipo de infraestructura
Mi experiencia usando Dokku no fue buena
Se puede usar traefik + podman estándar + integración con systemd