Header Ads

Como hospedar sua própria plataforma como serviço (PaaS) com Dokku

Dokku é uma implementação de plataforma como serviço (PaaS), que você pode hospedar em seu próprio hardware. O Dokku usa o Docker para implantar automaticamente seu código quando você faz o git push do seu terminal.

Configurar um servidor Dokku permite que você implante rapidamente novos aplicativos usando o conhecido fluxo de trabalho Git. Os custos de hospedagem podem ser muito mais baixos do que as soluções comerciais de PaaS e ofertas gerenciadas do Kubernetes. Depois que seu servidor Dokku estiver instalado e funcionando, o lançamento de um novo aplicativo deve levar apenas alguns minutos.

Primeiros passos

Dokku suporta vários métodos de instalação. Ao instalar em hardware bare-metal, use o script oficial de bootstrap para baixar a versão mais recente.

 wget https://raw. githubusercontent. com/dokku/dokku/v0.24.7/bootstrap. sh sudo DOKKU_TAG = v0.24.7 bash bootstrap. sh 

O script de bootstrap transformará uma nova instalação do Linux em um servidor Dokku funcional. Dependências de software, incluindo Docker, serão baixadas e instaladas automaticamente. O processo pode levar até 10 minutos, dependendo da sua conexão com a Internet.

Você pode executar o Dokku como um contêiner do Docker. Isso é ideal quando você está usando um ambiente onde o Docker já está disponível.

 docker run \ --env DOKKU_HOSTNAME = example. com \ --name doku -p 3022: 22 \ -p 8080: 80 \ -p 8443: 443 \ -v / var / lib / dokku: / mnt / dokku \ -v /var/run/docker. sock:/var/run/docker. sock \ dokku / dokku: 0.24.7 

Substitua example. com pelo nome do host que você &’ usará para acessar o seu servidor. Usando este exemplo, as portas 80 e 443 serão associadas às portas do host 8080 e 8443, respectivamente. A porta 3022 em seu host será mapeada para a porta 22 dentro do contêiner. Esta porta é usada para conexões Git + SSH.

Um volume é criado em / mnt / dokku. Os dados do aplicativo Dokku serão armazenados aqui. O soquete Docker do host também é montado no contêiner para que o Dokku possa interagir com o daemon do Docker para criar novos contêineres.

Configurando o Dokku

Após a conclusão da instalação, visite o endereço IP do seu host em seu navegador. Se você atribuiu a Dokku um nome de host, também pode usá-lo aqui. O instalador da web aparecerá para guiá-lo pelo resto da configuração.

Copie e cole uma chave SSH na “ Chave pública ” campo. O Dokku aceitará qualquer conexão SSH feita com esta chave. Você pode adicionar outras chaves posteriormente usando a CLI do Dokku.

Você também precisa configurar o nome do host da instalação do Dokku, caso ainda não tenha sido configurado. Se você tiver um domínio mapeado para sua máquina, insira-o aqui. Caso contrário, você pode usar localhost ou um endereço IP.

Quando um nome de host é configurado, o Dokku pode servir automaticamente seus aplicativos usando subdomínios individuais. Se você não tiver um domínio disponível, desmarque a caixa de seleção “ Usar nomenclatura de host virtual ” caixa de seleção. Em vez disso, o Dokku servirá cada um de seus aplicativos em uma porta dedicada.

Se você instalou o Dokku com Docker, a configuração da web não é suportada. Você pode adicionar um nome de host ao criar o contêiner, definindo a variável de ambiente DOKKU_HOSTNAME. Para adicionar chaves SSH, você precisará se conectar ao contêiner e usar a CLI do Dokku:

 docker exec -it dokku dokku ssh-keys add my-key < / caminho / para / chave 

Depois de definir um nome de host e adicionar uma chave SSH, o Dokku estará pronto para ser usado. Nenhuma administração adicional é possível usando a IU da web. Você interage com o Dokku por meio de comandos Git e da CLI.

Implementando aplicativos

Agora você está pronto para lançar seu primeiro aplicativo! As implantações do Dokku começam com um git push. O Dokku usa buildpacks (Cloud Native ou Herokuish) para detectar a linguagem de programação do seu aplicativo e criar automaticamente uma compilação.

O Dokku também suporta a execução de docker build diretamente se o seu projeto contiver um Dockerfile. Essa funcionalidade só pode ser usada quando os construtores baseados em buildpack não estão disponíveis para seu projeto. Você pode obter mais informações sobre compilações diretas do Docker na documentação do Dokku.

O uso de buildpacks significa que o Dokku coloca algumas restrições em como seu projeto é criado. Se você estiver usando uma linguagem e estrutura populares, deverá ser capaz de usar o push push para criar sua implantação. Aqui está um exemplo de um aplicativo React básico:

 mkdir my-app cd my-app npx create-react-app. git remote add dokku dokku@example. com: my-app git push dokku master 

As duas últimas linhas são as mais importantes. Seu servidor Dokku é adicionado como um controle remoto Git para que você possa enviar o código para ele. Substitua example. com pelo IP ou nome do host de sua instalação. A parte após os dois pontos indica o projeto Dokku para o qual empurrar. Você não precisa criá-lo manualmente.

Depois que o controle remoto for configurado, você estará pronto para enviar o código a ele. O comando de exemplo empurra o branch master para Dokku. O Dokku pegará seu projeto, detectará automaticamente um buildpack apropriado, criará uma imagem Docker e implantará seu aplicativo.

Anexando domínios de aplicativos

Dokku implanta seu aplicativo em um subdomínio de seu nome de host. Você pode anexar um domínio personalizado usando o Dokku CLI. Certifique-se de configurar os registros DNS apropriados primeiro.

 domínios dokku: adicione my-app example. com 

A visita a example. com agora atenderá à implantação do meu aplicativo.

Adicionando SSL

O Dokku torna mais fácil habilitar SSL para seus aplicativos. Você pode adicionar um plugin que integre o Dokku com o Let &’ s Encrypt. Depois de instalar o plug-in, você pode adquirir certificados SSL com um único comando.

Primeiro, instale o plug-in:

 plugin dokku: instale https://github. com/dokku/dokku-letsencrypt. git

Em seguida, configure o plug-in Let &’ s Encrypt com o seu endereço de e-mail. O Let &’ s Encrypt usará esse endereço para enviar a você quaisquer alertas relacionados aos seus certificados.

 dokku config: set --global no-restart DOKKU_LETSENCRYPT_EMAIL=me@example. com 

Você deve adicionar o cron job Let &’ s Encrypt para garantir que o Dokku possa renovar seus certificados automaticamente:

 dokku letsencrypt: cron-job --add 

Por fim, ative Let &’ s Encrypt para o seu aplicativo:

 dokku permite criptografar meu aplicativo 

O plug-in Let &’ s Encrypt irá adquirir um certificado para cobrir os domínios conectados ao seu aplicativo. O certificado será renovado automaticamente antes da data de expiração.

Atualizando seu aplicativo

Dokku se baseia no fluxo de trabalho do Git. Você pode atualizar seu aplicativo fazendo alterações na base de código, criando commits do Git e enviando seu branch para o Dokku.

Quando o Dokku recebe um novo push, ele usa seus buildpacks para construir um contêiner atualizado do Docker. O contêiner em execução no momento será substituído pelo novo após a conclusão da compilação. As atualizações reduzem o tempo de inatividade e são totalmente automatizadas.

A duração do processo de compilação varia de acordo com o tamanho do seu aplicativo e as tecnologias que ele usa. O Dokku espera mais 10 segundos após a conclusão da construção antes que o tráfego seja direcionado para novos contêineres. Isso dá a qualquer script de bootstrap a chance de ser concluído.

O Dokku pode ser facilmente integrado em sistemas de integração contínua (CI). O estágio final em um pipeline de CI pode ser um git push dokku para atualizar sua implantação ao vivo.

Gerenciando ramos

O Dokku geralmente implementa as mudanças feitas no branch master. Você pode escolher usar um branch diferente usando uma configuração global ou por aplicativo:

 dokku git: set --global deploy-branch dokku-deploy dokku git: set my-app deploy-branch production 

Com esta configuração, o Dokku assumirá como padrão a implantação a partir do branch dokku-deploy. As implantações para o app my-app serão feitas na produção.

Adicionando funcionalidade extra

Há muito mais no Dokku do que a implantação básica em que nos concentramos aqui. A distribuição padrão é intencionalmente simplificada. Plug-ins oficiais e da comunidade podem ser usados ​​para fornecer serviços, como bancos de dados e autenticação. Isso permite que você use Dokku para back-ends com estado, bem como para seus front-ends estáticos.

A configuração de um serviço geralmente é um processo de duas etapas. Você cria uma instância do serviço e a vincula aos seus aplicativos. Vários aplicativos podem ser conectados a cada instância de serviço.

Veja como você pode adicionar um banco de dados MySQL a um aplicativo:

 plugin dokku: instale https://github. com/dokku/dokku-mysql. git dokku mysql: crie demo-db dokku mysql: link demo-db my-app 

Dokku irá definir a variável de ambiente DATABASE_URL dentro do seu contêiner de aplicativo. Você pode acessar esta variável para recuperar a string de conexão MySQL. O uso de plug-ins Dokku para bancos de dados elimina a necessidade de gerenciar outro servidor de banco de dados externo.

Conclusão

Docker é uma solução PaaS que permite hospedar sua própria plataforma de aplicativo. Depois que o Dokku estiver instalado e funcionando, iniciar um novo aplicativo é tão simples quanto um git push.

O Dokku se compara favoravelmente a serviços como Heroku, Amazon Elastic Beanstalk e Google Firebase. Ele suporta um grande número de tecnologias de desenvolvimento e significa que você não está vinculado a um provedor de nuvem específico. Você pode executar o Dokku em uma VM barata baseada na nuvem ou mantê-lo em seu próprio hardware físico.

Nenhum comentário