7 pontos por GN⁺ 2024-08-27 | 1 comentários | Compartilhar no WhatsApp

O que é o Dokku?

  • Dokku é um Platform as a Service (PaaS) de código aberto que roda em um único servidor
  • É parecido com o Heroku, mas pertence ao próprio usuário
  • É necessário ter uma plataforma serverless econômica e fácil de usar
  • O servidor Dokku é operado em uma VPS de US$ 7 por mês na OVHcloud

Principais recursos do Dokku

  • Fácil de usar (semelhante ao Heroku)
  • Gerenciamento automático de certificados SSL via Let’s Encrypt
  • Suporte a Basic Auth para proteger sites com senha
  • Escala para cima e para baixo com um único comando
  • Flexibilidade para lidar com vários tipos de aplicação, como Node e Python
  • Implantação fácil com comandos git

Exemplo mínimo de Dokku

Implantando uma aplicação com container Docker

  • Coloque o Dockerfile na raiz do repositório git
  • Use o script entrypoint.sh para executar a aplicação localmente ou dentro do container Docker
  • Crie a aplicação no host do Dokku
  • Adicione o host do Dokku como remoto localmente e faça o 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

Implantando um site estático

  • Com o Dokku, é possível implantar facilmente um site estático a partir de um repositório privado do GitHub e protegê-lo com senha
  • Defina a variável de ambiente NGINX_ROOT para configurar o NGINX para servir o site estático
  • Instale e configure o plugin de autenticação 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

  • É possível configurar HTTPS usando o plugin do Let’s Encrypt
  • Se estiver usando Cloudflare, é mais fácil configurar para que o próprio Cloudflare cuide disso

Implantação com GitHub Actions

  • É possível implantar automaticamente apps Dokku usando GitHub Actions
  • Exemplo de workflow do 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

Outras dicas

  • É possível executar comandos remotamente
  • Invalidar o cache do Docker
  • Recompilar sem fazer 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 que escrevi este texto?

  • Escrevi isto porque precisava procurar os detalhes toda vez que implantava uma nova aplicação
  • Espero que também seja útil para outras pessoas

Resumo do GN⁺

  • Dokku é uma plataforma PaaS de código aberto, econômica e fácil de usar
  • Oferece recursos para implantar e gerenciar facilmente vários tipos de aplicação
  • Permite implantação automática com ferramentas como GitHub Actions
  • Fica ainda mais conveniente quando usado com serviços como Cloudflare
  • Outros projetos com funcionalidades semelhantes incluem Heroku, Fly.io etc.

1 comentários

 
GN⁺ 2024-08-27
Comentários do Hacker News
  • Recentemente tenho gostado de usar o Dokploy

    • É parecido com o Dokku, mas oferece uma UI web melhor
    • Facilita o deploy de soluções Docker/Compose e já vem com LetsEncrypt automático embutido
    • Montei um workflow do GitHub Actions para automatizar o deploy de apps
    • Também oferece arquivos Compose pré-configurados para vários apps
  • Depois de avaliar várias soluções de "Heroku self-hosted", escolhi o Dokku

    • É o que exige menos "mágica" e é fácil de remover mesmo se eu deixar de usá-lo
    • O desenvolvedor é muito responsivo e me ajudou a criar um plugin customizado
    • Documentei isso no meu blog
  • Ao usar software novo, é normal ter problemas, mas com o Dokku não foi assim

    • Tirando alguns problemas com a ordem de certos argumentos de CLI, funciona bem
    • Se eu o usasse mais, gostaria de configurar toda a arquitetura com arquivos de configuração declarativos
  • O Dokku facilita a configuração de HTTPS por meio do plugin Let's Encrypt

    • Estou usando TLS via Cloudflare
    • É preciso tomar cuidado para que sites pessoais não sejam transmitidos em texto puro
  • Usei Dokku e depois migrei para build de imagens Docker e deploy com Swarm

    • Isso acabou me motivando a desenvolver o Lunni, um PaaS self-hosted
    • Gosto da ideia de rodar tudo em servidores que eu possuo, em vez de Heroku ou AWS
    • Uma fatura mensal previsível traz tranquilidade
  • A popularidade do Coolify está crescendo, permitindo que organizações de qualquer porte operem facilmente software self-hosted de graça

    • Coolify é uma alternativa open source e self-hostable ao Heroku/Netlify/Vercel
  • Dokku é um produto incrível, e o fundador é muito humilde e prestativo

    • Gostaria que mais pessoas o apoiassem financeiramente
  • Fico curioso sobre o que usam como armazenamento de arquivos/objetos para esse tipo de infraestrutura

    • Se usar AWS, os custos de egress podem anular toda a economia
  • Minha experiência com o Dokku não foi boa

    • O VPS travava e, ao reiniciar, os apps não voltavam a subir
    • No fim, migrei para uma configuração k8s de nó único
  • É possível usar integração com traefik + podman padrão + systemd

    • Documentação e links relacionados são fornecidos