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
Comentários do Hacker News
Recentemente tenho gostado de usar o Dokploy
Depois de avaliar várias soluções de "Heroku self-hosted", escolhi o Dokku
Ao usar software novo, é normal ter problemas, mas com o Dokku não foi assim
O Dokku facilita a configuração de HTTPS por meio do plugin Let's Encrypt
Usei Dokku e depois migrei para build de imagens Docker e deploy com Swarm
A popularidade do Coolify está crescendo, permitindo que organizações de qualquer porte operem facilmente software self-hosted de graça
Dokku é um produto incrível, e o fundador é muito humilde e prestativo
Fico curioso sobre o que usam como armazenamento de arquivos/objetos para esse tipo de infraestrutura
Minha experiência com o Dokku não foi boa
É possível usar integração com traefik + podman padrão + systemd