Atualizando do Kamal 1 para o Kamal 2
Aqui estão alguns passos e notas para a atualização de uma configuração de servidor único do Kamal para o novo Kamal 2.
1. Atualizar para o Kamal 1.9.x
Primeiro, atualize para o Kamal 1.9 e confirme se ainda consegue realizar o deploy:
$ gem install kamal --version 1.9.0
$ kamal config
$ kamal deploy
2. Atualizar para o Kamal 2
Atualize novamente a versão do Kamal para um lançamento 2.x:
$ gem install kamal --version 2.1.0
Não realize o deploy ainda.
3. Remover referências ao Traefik
Remova a seção Traefik de config/deploy.yml
:
traefik:
options:
publish:
- "443:443"
volume:
- "/letsencrypt/acme.json:/letsencrypt/acme.json"
network: "private"
...
E remova qualquer outra referência ao proxy, como rótulos traefik.*
em qualquer lugar.
4. Remover a seção de verificação de saúde (healthcheck)
Remova as configurações antigas de healthcheck de config/deploy.yml
:
healthcheck:
# path: /up
# port: 3000
interval: 5s
5. Atualizar a configuração do builder
Remova a opção multiarch
e especifique uma ou mais arquiteturas com arch
(as opções são amd64
e arm64
):
builder:
arch:
- amd64
- arm64
Você provavelmente usará amd64
. Pode manter as configurações de cache.
Consulte o guia oficial para builders remotos.
6. Adicionar as novas configurações de proxy
Adicione configurações semelhantes de Kamal Proxy de acordo com suas necessidades:
proxy:
ssl: true
host: tubeandchill.com
app_port: 3000
healthcheck:
path: /up
interval: 3
timeout: 30
Se você estava emitindo certificados TLS com o Traefik, agora pode substituí-lo definindo ssl
como true
e especificando seu host. Caso contrário, pode pular esta etapa.
O caminho de healthcheck permaneceu o mesmo em /up
, mas você pode precisar removê-lo das verificações de SSL ou hostname:
# Ignora redirecionamento de http para https para o endpoint padrão de healthcheck.
config.ssl_options = { redirect: { exclude: ->(request) { request.path == "/up" } } }
# Ignora proteção de reatribuição de DNS para o endpoint padrão de healthcheck.
config.host_authorization = { exclude: ->(request) { request.path == "/up" } }
A porta da aplicação agora está definida para 80 (era 3000). Altere-a de volta para 3000 ou atualize seu Dockerfile para usar a porta 80.
7. Criar novo arquivo de secrets
O Kamal mudou a forma como os secrets funcionam. Antes de explorar as novas opções de secrets, você pode simplesmente mover os antigos:
$ cp .env .kamal/secrets
Isso significa que .kamal/secrets
também não pode ser incluído no controle de versão, então adicione-o ao .gitignore
.
Você pode explorar os novos secrets em mais detalhes na documentação.
Observe que não há mais conversão de .env.erb
ou kamal push env
. Todos foram removidos.
8. Verificar novamente sua configuração
Verifique sua nova configuração executando o comando kamal config
:
$ kamal config
Se você estava usando redes Docker personalizadas para comunicação de acessórios, não as remova ainda. Somente se você as nomeou como kamal
, remova-as da configuração para evitar conflitos.
9. Executar a atualização in-place
Faça o primeiro deploy do Kamal 2 executando uma atualização:
$ kamal upgrade
Isso fará várias coisas, como remover o Traefik, criar a rede Docker do Kamal, alternar para o Kamal Proxy, reiniciar a aplicação e, finalmente, reiniciar os acessórios.
10. Remover redes Docker personalizadas
Agora você pode remover sua rede Docker personalizada, pois tudo pode ser executado com a nova rede do Kamal.
Você pode reiniciar sua aplicação e acessórios para aplicar essa última mudança:
$ kamal deploy
$ kamal accessory reboot [ACCESSORY]
11. Corrigir falhas na atualização
Lembre-se de que, se a atualização substituir o proxy, mas falhar posteriormente, você pode corrigir o problema subjacente e continuar fazendo o redeploy da aplicação ou reiniciando os acessórios.