Saltar para o conteúdo principal

Atualizações e cópias de segurança

Atualizar​

Obtenha as imagens novas e recrie os contentores. As migrações correm no arranque.

docker compose pull && docker compose up -d

Se usar o perfil de IA local, reconstrua a imagem do Laya depois de uma atualização:

docker compose --profile ai build laya

Tarefas em segundo plano e o worker​

O trabalho em segundo plano (manutenção hoje, e sincronização de correio e passagem de IA à medida que chegarem) corre dentro do mesmo contentor. A imagem executa campbooks-server all, que é a API mais o worker de tarefas. As tarefas vivem no Postgres, por isso nada se perde num reinício.

Para executar o worker em separado, acrescente um segundo serviço com a mesma imagem e o mesmo ambiente, e estas duas definições:

  • command: ["worker"]
  • healthcheck: { disable: true }, porque a verificação de saúde testa a API, que um worker não serve.

Depois dê ao primeiro serviço command: ["api"]. As definições do worker são o bloco CAMPBOOKS_JOBS__* em Configuração.

O que copiar​

Faça cópia destes elementos em conjunto, aproximadamente à mesma hora:

O quêOndeContém
Postgresvolume postgres-data (use pg_dump)Tudo exceto os ficheiros e a chave secreta da instância: contas, chaves de início de sessão, autorizações
Ficheirosvolume blobs-data, ou o seu bucketMensagens em bruto, anexos, documentos
Chave secreta da instânciavolume server-secretsA chave que abre as chaves de início de sessão e as credenciais guardadas no Postgres

Guarde também uma cópia do seu .env e dos ficheiros de segredo de cliente em deploy/secrets/. Não estão em nenhum volume.

:::warning Guarde uma cópia da chave secreta da instância O server-init gera a chave uma só vez, no primeiro arranque. Ela protege as chaves de início de sessão e as credenciais das contas ligadas. A chave não pode ser recuperada se a perder, por isso guarde uma cópia num sítio seguro, separada das suas cópias de segurança.

Sem a chave certa, o servidor recusa-se a arrancar. Se a chave estiver mesmo perdida, pode recomeçar com uma nova:

  1. Apague as linhas de identity.signing_keys no Postgres.
  2. Remova a chave: docker compose run --rm server-init rm /secrets/secret-key.
  3. Execute docker compose up -d && docker compose restart server.

Todas as pessoas voltam a iniciar sessão, e as caixas de correio ligadas mostram «precisa de nova autorização» até o seu dono as ligar de novo. O correio e os documentos já guardados não se perdem. :::

Restaure o Postgres e os ficheiros para o mesmo momento no tempo. Um ficheiro que falta no armazenamento enquanto o Postgres ainda o lista não pode ser lido. Por isso faça primeiro o dump da base de dados e depois copie os ficheiros: os ficheiros enviados entretanto são apenas extras inofensivos. Para um bucket, ative o versionamento (e mantenha as versões antigas alguns dias) em vez de copiar.

Faça cópia dos volumes locais com um contentor descartável. Para os ficheiros:

docker run --rm -v campbooks_blobs-data:/data -v "$PWD":/backup busybox:1.37.0-musl \
tar czf /backup/blobs-data.tgz -C /data .

E para a chave secreta da instância:

docker run --rm -v campbooks_server-secrets:/data -v "$PWD":/backup busybox:1.37.0-musl \
tar czf /backup/server-secrets.tgz -C /data .

O arquivo contém a própria chave, por isso guarde-o num sítio que só você possa ler.

Atualizar a partir do início de sessão com Rauthy​

As versões anteriores traziam o Rauthy como fornecedor de identidade: os serviços idp, idp-init e idp-provision e o volume idp-data. O Campbooks passou a iniciar a sessão das pessoas por si, e o novo compose.yaml não tem nenhum deles.

  1. Copie o novo compose.yaml por cima do seu e remova os três contentores antigos:

    docker compose up -d --remove-orphans

    Nada se estraga se deixar os serviços antigos a correr. Apenas deixam de ser usados.

  2. As contas que existiam no Rauthy não são transferidas. Essas pessoas voltam a iniciar sessão com Google, Microsoft, Zoho ou uma chave de acesso, e ficam com uma conta nova no Campbooks.

  3. Passe as antigas definições de fornecedor CAMPBOOKS_IDP_* para CAMPBOOKS_GOOGLE__*, CAMPBOOKS_MICROSOFT__* e CAMPBOOKS_ZOHO__*. Mantenha cada segredo de cliente em deploy/secrets/<provider>-client-secret. Veja Início de sessão.

  4. Adicione ${CAMPBOOKS_PUBLIC_URL}/auth/callback/<provider> como URI de redirecionamento em cada aplicação OAuth do fornecedor.

  5. O volume idp-data fica no sítio. Quando tiver a certeza de que não precisa dele, apague-o:

    docker volume rm <project>_idp-data

Monitorização (opcional)​

O Campbooks escreve registos JSON no stdout e, por omissão, não exporta nada.

docker compose logs server

As definições CAMPBOOKS_TELEMETRY__* ativam uma página Prometheus ou a exportação OTLP. Veja o .env.example.