Instalar o Dokku no DigitalOcean

Criem a vossa própria PaaS instalando o Dokku no DigitalOcean.

O Dokku corre em cima do Docker e é descrito como um mini-Heroku. É uma "Platform as a Service" que ajuda a correr e gerir aplicações web, reduzindo a complexidade necessária para construir e manter a infraestructura que as suporta.

O Dokku corre apenas numa máquina (não distribui para um cluster) por isso é vocacionado para projectos pequenos.

Neste artigo vamos usar o Dokku v0.4.5 e as instruções de instalação são para o DigitalOcean. Se se registarem no DigitalOcean usando o link anterior vão ter $10 em crédito e eu também vou beneficiar como referral.

Eis os assuntos que vamos abordar neste tutorial:

  • Criar chaves SSH para ligar ao servidor que vamos criar
  • Criar um novo servidor no DigitalOcean com o Dokku instalado
  • Configurar um repositório Git para instalação remota
  • Instalar uma nova aplicação no Dokku a partir do repositório

Criar chave SSH

A primeira coisa a fazer é criar uma chave SSH que vamos usar para nos ligarmos ao servidor sem termos de usar uma password. Devem fazer isto antes de criarem o servidor.

Vou especificar as instruções que usei para fazer isto no Windows, visto que é um bocado mais complicado e não há tanta informação.

Gerar os ficheiros da chave SSH

  • Instalar o PuTTY.
  • Correr o PuTTYgen.
  • Carreguem em "Generate". As opções por omissão devem servir.
  • Movam o cursor na área livre para adicionar aleatoriedade à chave enquanto o ficheiro é gerado.
  • Escolham uma palavra-chave para segurança adicional (sem uma palavra-chave qualquer pessoa que tenha estes ficheiros consegue ligar-se ao vosso servidor).
  • Guardem a chave pública e privada.
  • Convertam para OpenSSH no menu de topo Conversions > Export OpenSSH key.

Adicionar a chave SSH no DigitalOcean

Vão às definições da vossa conta no DigitalOcean. Adicionem uma nova chave em Security > SSH Keys.

Escolham um nome e coloquem o conteúdo da chave pública.

Mais tarde vão seleccionar esta chave ao criar o servidor e instalar o Dokku.

Qualquer aplicação que precise de aceder ao vosso servidor vai precisar da chave privada para lhe aceder. Por exemplo se se quiserem ligar ao servidor usando SFTP vão ter de fornecer a chave privada.

Instalar o Dokku

Não quero entrar em muito detalhe nestes passos para instalar o Dokku no DigitalOcean visto que são bastante directos:

  • Criem um novo droplet.
  • Escolham um hostname (ajuda usar um FQDN mas não é necessário).
  • Escolham um tamanho (comecem pelo mais pequeno).
  • Escolham uma região.
  • Escolham uma imagem: seleccionem Dokku em "One-click Apps".
  • Seleccionem opções adicionais que queiram (nota: parecem haver alguns problemas com IPv6; não escolham ou sigam este guia).
  • Certifiquem-se que seleccionaram a chave SSH que criaram anteriormente.

No próximo ecrã vão ver a página de instalação do Dokku. Mostra a vossa chave pública, o vosso hostname e se introduziram um FQDN como hostname vão poder usar a opção de virtualhost naming para as vossas aplicações.

Não é um grande problema se não tiverem um FQDN ainda. Podem mudar o hostname mais tarde.

Aumentar o ficheiro de swap

Para servidores com menos de 1GB, o Dokku recomenda aumentar o tamanho do ficheiro de swap. O DigitalOcean também tem um guia de como configurar o ficheiro de swap num VPS.

Mudar o hostname mais tarde

Se não especificaram um FQDN quando criaram o droplet podem mudá-lo mais tarde.

  • Vão à página do droplet no site do DigitalOcean.
  • Vão a Settings > Rename.
  • Escrevam o novo hostname.

Agora actualizem o ficheiro /etc/hostname no vosso servidor. O conteúdo desse ficheiro deverá ser o vosso hostname.

Também precisam de actualizar o ficheiro /etc/hosts. Eis um exemplo:

127.0.1.1 subdomain.domain.tld subdomain
127.0.0.1 localhost
111.1.1.1 subdomain.domain.tld subdomain

Se tiverem um aviso no topo do vosso ficheiro /etc/hosts a dizer que as mudanças não vão persistir, ignorem-no.

Agora reiniciem o serviço hostname:

service hostname restart

Configurar o Git para instalações remotas

Esta foi a parte em que tive mais dificuldade no meu ambiente Windows local. Certificar-me que o Git estava a usar as minhas chaves ao fazer o push para o servidor remoto.

  • Instalem o Git for Windows ou similar.
  • Procurem pela pasta .ssh na directoria do vosso utilizador do sistema operativo. Criem a pasta se esta não existir.
  • Coloquem as vossas chaves SSH na pasta .ssh com a seguinte nomenclatura: keyid_rsa (chave privada) e keyid_rsa.pub (chave pública).
  • Criem ou actualizem o ficheiro config que se encontra na mesma pasta com o seguinte formato:
Host host_ip_or_domain
 IdentityFile ~/.ssh/keyid_rsa
  • Para evitarem ter de iniciar o agente SSH sempre que abrem o Git Bash, criem um ficheiro .bashrc na directoria do vosso utilizador (script obtido de Set up SSH for Git):
SSH_ENV=$HOME/.ssh/environment
  
# start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."
    # spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}
  
if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
  ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
     start_agent;
 }
else
    start_agent;
fi
  • Abram o Git Bash.
  • Testem a ligação com o seguinte comando:
ssh root@host_ip_or_domain

Devem estar ligados ao vosso servidor.

Para instruções adicionais vejam:

Como instalar aplicações

Para fazer a instalação de uma nova aplicação no Dokku podem fazer um push remoto a partir de um repositório Git local.

Dependendo dos conteúdos do vosso repositório, o Dokku vai instalar a infraestructura necessária (Apache, PHP, etc.) usando buildpacks. Mais sobre isto no próximo artigo.

No vosso ambiente local, no repositório que querem fazer push, definam a localização remota do Dokku:

git remote add dokku dokku@host_ip_or_fqdn:app_name

Se usarem um FQDN como nome da aplicação (e.g. my-domain.tld) o Dokku vai configurar o domínio automaticamente.

Agora façam o push para o Dokku:

git push dokku master

Vão ver o Dokku a correr um buildpack ou a não ser capaz de encontrar um. Os buildpacks vão ser explicados em mais detalhe no próximo artigo.

Instalação encravada

Tive algumas situações em que a build ficou presa ao instalar uma dependência. Não conseguia cancelar a instalação e quando tentava fazer a instalação novamente recebia uma mensagem a dizer que já havia uma a decorrer.

Depois de tentar fazer restart/rebuild da aplicação algumas vezes, a solução que encontrei foi apagar o ficheiro .build.lock que se encontra na pasta da aplicação em /home/dokku/app_name/.

Depois consegui instalar novamente.

Conclusão

Tivemos a ver como instalar o Dokku, configurar SSH e Git e instalar aplicações.

No próximo artigo vamos explicar o que são buildpacks em mais detalhe, instalar um site HTML e ver como configurar os domínios da aplicação.

Artigos relacionados