O que o Kamal 2 automatiza
Uma gem, e não uma plataforma de hospedagem
Abra o Gemfile deste app e uma linha, com um comentário acima dela, diz do que trata este curso:
# Deploy this application anywhere as a Docker container [https://kamal-deploy.org]
gem "kamal", require: false
O Gemfile.lock fixa a versão instalada, kamal (2.12.0). É o Kamal 2, a reescrita que trocou o proxy baseado em Traefik do Kamal 1 pelo próprio kamal-proxy e refez o funcionamento de acessórios e segredos. O require: false importa: o Kamal não é uma biblioteca que este app carrega em execução. É uma ferramenta de linha de comando que você roda da sua máquina, comandando servidores com que este app nunca fala diretamente.
O problema que o Kamal resolve
Colocar um app Rails num servidor à mão exige vários passos, no mínimo. Você monta uma imagem de container, enviá-la para algum lugar acessível, entrar na máquina por SSH, baixar a imagem, parar o processo antigo, subir o novo e torcer para nada quebrar no meio. Faça isso mais de uma vez e você vai escrever um script. O Kamal é esse script, escrito uma vez por gente que faz deploy de apps Rails profissionalmente, e guiado por um arquivo YAML.
O deploy.yml deste app, em resumo
# Kamal deployment — single VPS, app + Postgres accessory, kamal-proxy with Let's Encrypt.
# Fill .kamal/secrets (see .kamal/secrets.example) and export NOR_SERVER_IP before deploying.
service: newbieonrails
image: gxolivei/nor
Essas duas linhas de comentário, escritas na config pelo mantenedor deste app, resumem a configuração numa frase. É um servidor, este app Rails mais um container acessório de Postgres, e o kamal-proxy cuidando do HTTPS. service: newbieonrails dá nome a este deploy na contabilidade do Kamal, e todo container, rede e volume que o Kamal cria leva esse prefixo. image: gxolivei/nor é o nome da imagem Docker que o Kamal monta e envia; a aula 2 mostra para onde ela vai.
O que o Kamal não é
O Kamal não provisiona um servidor para você: o NOR_SERVER_IP desse comentário precisa apontar para uma máquina Linux rodando, com Docker instalado. Ele não cuida de DNS, não escolhe um provedor de nuvem e não substitui o Git nem um serviço de CI. Ele assume depois de tudo isso. Com um servidor funcionando e uma imagem de container, ele põe o app para rodar lá e o mantém rodando a cada deploy seguinte. Ele só remove a versão antiga depois que a nova prova que está saudável.
Como este curso se organiza
Cada aula pega uma parte do config/deploy.yml, citada do arquivo atual (com comentários longos cortados onde indicado), e explica o que ela faz no servidor.
O que este curso cobre
servers,ssheregistry: onde o app roda e onde mora a imagem deleenv: clear versus secret, e jobs em background rodando dentro do processo do servidor webproxy, SSL e o healthcheck que controla cada deploy- Os volumes e o acessório
db: o Postgres gerenciado pelo próprio app aliasese os comandos do Kamal que eles encurtam- Juntando tudo: um
kamal deploy, seguido do seu notebook até um servidor no ar
Continue com a aula 2
servers, ssh e o registro
Como os blocos servers, ssh e registry leem variáveis de ambiente e resolvem nomes de segredos pelo .kamal/secrets.
Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.