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
- dokku-postgres: Gerenciar instâncias do PostgreSQL.
- dokku-redis: Gerenciar instâncias do Redis.
- dokku-letsencrypt: Automatizar a obtenção e renovação de certificados SSL/TLS através do Let’s Encrypt.
- dokku-mariadb: Gerenciar instâncias do MariaDB.
- dokku-elasticsearch: Gerenciar instâncias do Elasticsearch.
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
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.
- E-mail: [email protected]
- LinkedIn: https://www.linkedin.com/in/rafael-gioia/
- Github: https://github.com/rgioia