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) ekeyid_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:
- Set up SSH for Git
- Working with Git on Windows
- How do I tell Git for Windows where to find my private RSA key?
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.