Dokku: Simplificando o deploy de aplicações

Dokku é um framework PaaS de código aberto que simplifica o deploy e gerenciamento de aplicações na nuvem. Baseado em Docker e Git, oferece uma solução flexível para deploy de aplicações web. Este artigo aborda as principais características e vantagens do Dokku, destacando como ele pode agilizar o processo de deploy para desenvolvedores.

Dokku é um framework de plataforma como serviço (PaaS) de código aberto que permite a implantação e gerenciamento de aplicações na nuvem de forma simples e eficiente. Inspirado pelo Heroku, o Dokku utiliza tecnologias como Docker e Git para oferecer uma solução leve e flexível para o deploy de aplicações. Neste artigo, exploraremos as características, vantagens e o funcionamento do Dokku, demonstrando como essa ferramenta pode facilitar o processo de deploy de aplicações, tornando-o mais ágil e acessível para desenvolvedores de todos os níveis.


Motivos para utilizar o Dokku

  • Portabilidade: Com o Dokku, as aplicações são empacotadas em contêineres Docker, o que garante portabilidade entre diferentes ambientes de hospedagem e facilita a migração de aplicações.
  • Automação de Deploy: O Dokku automatiza vários aspectos do processo de deploy, incluindo a construção de imagens Docker, o gerenciamento de contêineres e a configuração de redes e volumes.
  • Controle de Versão Integrado: O Dokku utiliza o Git como método de deploy, o que permite um controle de versão eficiente e a possibilidade de reverter para versões anteriores da aplicação de forma simples.
  • Isolamento de Aplicações: Cada aplicação é executada em seu próprio contêiner Docker, garantindo isolamento e reduzindo a possibilidade de conflitos entre aplicações.
  • Comunidade e Suporte: O Dokku possui uma comunidade ativa e uma ampla documentação, facilitando o acesso a suporte e recursos para solucionar problemas e implementar novas funcionalidades.
  • Simplicidade de Manutenção: A arquitetura simples e o uso de contêineres Docker tornam a manutenção e o gerenciamento do ambiente de deploy mais fáceis e menos propensos a erros.

Plugins do Dokku

O ecossistema de plugins do Dokku é uma das características mais poderosas e versáteis dessa ferramenta de implantação de aplicações. Os plugins permitem estender a funcionalidade do Dokku para atender a uma ampla variedade de necessidades de deploy, tornando-o altamente personalizável e adaptável a diferentes cenários.

Características

  • Variedade: Há uma ampla gama de plugins disponíveis para o Dokku, abrangendo diversas funcionalidades como gerenciamento de banco de dados, integração contínua, monitoramento e muito mais.
  • Comunidade Ativa: O ecossistema de plugins do Dokku é suportado por uma comunidade ativa de desenvolvedores que contribuem com novos plugins e mantêm os existentes atualizadoshttps://dokku.com/docs/community/plugins/.
  • Facilidade de Instalação: Os plugins podem ser facilmente instalados com um único comando, simplificando o processo de adicionar novas funcionalidades ao seu ambiente Dokku.
  • Personalização: Os plugins permitem personalizar o ambiente de deploy para atender às necessidades específicas de cada aplicação, como configurar conexões de banco de dados, definir variáveis de ambiente e ajustar configurações de armazenamento.
  • Eficiência: Ao fornecer funcionalidades pré-construídas, os plugins reduzem o tempo e o esforço necessários para configurar e gerenciar serviços essenciais.

Exemplos de Plugins Populares

Em resumo, o ecossistema de plugins do Dokku desempenha um papel fundamental na ampliação das capacidades da ferramenta, permitindo que os desenvolvedores criem e gerenciem aplicações de maneira eficaz e eficiente, adaptando-se facilmente a uma variedade de requisitos de deploy.


Acesso a um servidor para configuração do Dokku

Para avançar nas etapas de configuração e executar o deploy, é essencial ter acesso a um servidor, caso ainda não disponha de um. Para implementar o Dokku, você pode provisionar um servidor em um dos seguintes provedores de serviços em nuvem reconhecidos ou optar por aquele de sua preferência. Lembrando que cada um desses provedores possuem suas próprias características e preços, então é importante escolher aquele que melhor se adapta às suas necessidades e orçamento.

Amazon Web Services (AWS): AWS oferece uma ampla variedade de serviços de computação em nuvem, incluindo EC2, que pode ser usado para provisionar servidores onde você pode instalar e executar o Dokku.

Microsoft Azure: Azure é a plataforma de nuvem da Microsoft, que oferece serviços de computação em nuvem semelhantes aos da AWS, incluindo máquinas virtuais que podem ser usadas para hospedar o Dokku.

Google Cloud Platform (GCP): GCP é a plataforma de nuvem do Google, que também oferece serviços de computação em nuvem, incluindo máquinas virtuais (Google Compute Engine) adequadas para executar o Dokku.

Linode: Linode é um provedor de serviços em nuvem que oferece servidores virtuais a preços acessíveis, que podem ser usados para instalar e executar o Dokku.

Vultr: Vultr é outro provedor de infraestrutura em nuvem que oferece servidores em nuvem a preços competitivos, que são adequados para hospedar aplicações usando o Dokku.

Digital Ocean: Plataforma de computação em nuvem projetada para simplificar o desenvolvimento de aplicações web. Ela é conhecida por sua simplicidade, facilidade de uso e preços acessíveis, tornando-a uma escolha popular entre desenvolvedores individuais, startups e pequenas empresas.


Instalação e Deploy de aplicação com o Dokku

Este documento leva em consideração a versão v0.34.0 do Dokku, logo, versões futuras podem não ser compatíveis com as instruções aqui presentes. É recomendável checar a documentação oficial em https://dokku.com/

Consideramos, para essa exemplo, a instalação de uma aplicação Ruby on Rails, em um servidor de IP 123.45.67.890, de DNS exemplo.com.br

Conecte-se ao servidor remoto por SSH. Utilizaremos o usuário "hackthetask" como exemplo.

ssh -t [email protected]

Baixe e execute o instalador do Dokku

wget -NP . https://dokku.com/bootstrap.sh

sudo DOKKU_TAG=v0.34.0 bash bootstrap.sh

Crie a sua aplicação

dokku apps:create exemplo

Instale o plugin do Dokku para o PostgreSQL

sudo dokku plugin:install https://github.com/dokku/dokku-postgres.git postgres

Crie a instância do banco de dados

dokku postgres:create exemplo_production_database

Associe a instância do banco de dados à sua aplicação

dokku postgres:link exemplo_production_database exemplo

Criar um backup da base de dados para um bucket da AWS S3 - (Opcional)

dokku postgres:backup-auth exemplo_production_database AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_REGION

Caso faça sentido, podemos configurar um agendamento para o backup ser executado via cron

dokku postgres:backup-schedule exemplo_production_database "0 3 * * *" my-s3-bucket

Você pode definir variáveis de ambiente através do comando abaixo, nessa configuração, estamos definindo a master key do Rails

dokku config:set exemplo RAILS_MASTER_KEY=xxx

O Dokku utiliza os mesmos buildpacks do Heroku. Nesse exemplo, adicionaremos os buildpacks de Ruby e de node.js

dokku buildpacks:add exemplo https://github.com/heroku/heroku-buildpack-nodejs.git
dokku buildpacks:add exemplo https://github.com/heroku/heroku-buildpack-ruby.git

Adicione o DNS à aplicação

dokku domains:add exemplo exemplo.com.br

Para adicionar sua chave SSH pública ao servidor Dokku, localize-a em sua máquina, geralmente encontrada no diretório ~/.ssh com a extensão .pub. Você pode exibi-la no terminal utilizando o comando, por exemplo: cat ~/.ssh/id_ed25519.pub

ssh -t [email protected]

echo "sua-chave-ssh-aqui-com-aspas-mesmo" | sudo dokku ssh-keys:add nome_usuario

No seu projeto, é necessário existir um arquivo chamado Procfile

web: bundle exec puma -C config/puma.rb
release: rails db:migrate

Também é necessário um arquivo app.json na raiz do projeto

{
  "formation": {
    "web": {
      "quantity": 1
    },
    "worker": {
      "quantity": 1
    }
  },
  "healthchecks": {
    "web": [
      {
        "type":        "startup",
        "name":        "web check",
        "description": "Checking if the app responds to the /healthcheck endpoint",
        "path":        "/healthcheck",
        "attempts": 3
      }
    ]
  }
}

Para que o healthcheck funcione, também é necessário adicionar a devida rota em config/routes.rb, vale lembrar que isso é para aplicações com Ruby on Rails

get "/healthcheck", to: proc { [200, {}, ["simple_check"]] }

Na branch main de seu localhost, adicione o repositório remoto do Dokku

git remote add dokku [email protected]:exemplo

Por fim, realize o deploy!

git push dokku main

Espero que este artigo tenha sido útil e que possa auxiliar no seu processo de deploy de aplicações com o Dokku. Se tiver alguma dúvida ou quiser compartilhar suas experiências, não hesite em entrar em contato.

0 Comentário