Docker Compose

Atualize uma instalação feita com o projeto docker-compose

  1. Antes de atualizar
  2. Da 7.2 para a 7.3
  3. 1. Obtenha as novas imagens
  4. 2. Recrie os contentores
  5. 3. Verifique a atualização
  6. Reverter

O projeto docker-compose executa três contentores: MySQL (mysqldb), AnsibleForms (app) e o RTE que executa os playbooks (rte). O AnsibleForms e o RTE usam a tag de imagem 7, que aponta sempre para a versão 7.x mais recente. Uma atualização volta a obter as imagens e recria os contentores cuja imagem mudou. Tudo o que tem de persistir é guardado na pasta data e é preservado.


Antes de atualizar

Prepare a atualização para poder voltar atrás se algo correr mal:

  • Faça uma cópia de segurança em Definições → Cópias de segurança. A nova versão atualiza o esquema da base de dados no primeiro arranque.
  • Leia o registo de alterações das versões entre a sua e a nova.
  • Vai passar para uma nova versão principal? Siga primeiro Atualizar para a v7.
  • Vem da 6.5? O projeto 6.x, no seu ramo v6, não tem contentor rte. Atualize a sua cópia do projeto para o ramo main, mantendo as suas definições do .env e a sua pasta data, para que o docker-compose.yml tenha o serviço rte. Esse ficheiro de compose define CONFIG_SEED_PATH, e uma pasta data da 6.x não tem seed.yaml: copie data/seed.yaml do repositório e adicione RTE_TOKEN (com pelo menos 16 caracteres) ao seu .env, como o .env do repositório o tem. Sem eles a aplicação recusa-se a arrancar. As imagens da 7 correm com o uid 1000 em vez de root: dê a esse utilizador a pasta data uma vez, deixando os ficheiros do MySQL ao MySQL, com sudo find data -path data/mysql -prune -o -exec chown 1000:1000 {} +. A pasta data/ssh passa a ser montada em /home/node/.ssh em vez de /root/.ssh.
  • Vem da 7.2? Atualize docker-compose.yml e data/seed.yaml em conjunto: consulte primeiro Da 7.2 para a 7.3.

Da 7.2 para a 7.3

Até à 7.2.0 o serviço rte recebia as definições da base de dados e o seu runner, declarado em data/seed.yaml, corria em modo base de dados, descontinuado na 7.3.0 e removido na 8.0.0. Desde a 7.3.0 a aplicação liga-se ao RTE em http://rte:8000 e mantém um WebSocket aberto (RTE_MODE=inbound, consulte Modos), e o RTE não guarda definições da base de dados. Obtenha os dois ficheiros do ramo main do repositório, mantendo o seu .env:

Ficheiro O que muda
docker-compose.yml O serviço rte deixa de ler o .env: recebe RTE_MODE=inbound, RTE_TOKEN e RTE_FILES=local, e nenhum DB_*
data/seed.yaml Uma credencial de RTE rte, com url: http://rte:8000 e password: ${RTE_TOKEN}, e o runner rte com rte_mode: inbound e credential: rte

Altere os dois. Só com o novo ficheiro de compose, o seed mantém o runner rte em modo base de dados: a aplicação chama o RTE como se fosse um da 7.2, ao que o novo RTE não responde, e nenhum playbook é executado. Um seed que alterou por si precisa da mesma credencial e do mesmo rte_mode.

Um runner que o seed criou continua gerido, só de leitura em Ligações → Runners, mesmo depois de remover CONFIG_SEED_PATH: só um seed aplicado liberta um runner que já não declara. Por isso mantenha o seed e defina aí o rte_mode, em vez de remover CONFIG_SEED_PATH para alterar o runner à mão.

O instalador faz isto sozinho: a sua atualização substitui docker-compose.yml, e data/seed.yaml quando é um fornecido pelo repositório, sem alterações. Um alterado à mão é mantido, e o novo é guardado ao lado.


1. Obtenha as novas imagens

Descarregue as imagens mais recentes das tags em docker-compose.yml:

cd /srv/apps/ansibleforms-docker
sudo docker compose pull

2. Recrie os contentores

Inicie novamente o projeto; os contentores cuja imagem mudou são recriados:

sudo docker compose up -d

3. Verifique a atualização

Acompanhe o registo do AnsibleForms enquanto arranca. O primeiro arranque de uma nova versão atualiza o esquema da base de dados, e o RTE arranca assim que o AnsibleForms estiver saudável:

sudo docker compose logs -f app

No AnsibleForms, Ajuda → Acerca de mostra a versão em execução, e Definições → Estado mostra a saúde da base de dados, do esquema e dos outros sistemas de que o AnsibleForms depende.


Reverter

Para voltar à versão que executava antes, a que Ajuda → Acerca de mostrava antes da atualização, fixe a sua tag exata em docker-compose.yml na imagem do AnsibleForms e na do RTE, em vez de 7, e execute novamente o passo 2. Se essa versão não arrancar na base de dados atualizada, restaure a cópia de segurança que fez em Definições → Cópias de segurança. Volte a colocar as tags em 7 para voltar a receber atualizações.

VÍDEO: Como atualizar o AnsibleForms