Pular para o conteúdo principal

Salvaguarda

Visão geral​

DadoMecanismoFrequênciaRetençãoLocalização
Base de produção (pch_sig)replicação PostgreSQL contínua para o servidor de recuperaçãocontínua—axone-dr
Base de produçãoinstantâneos cifrados restic no servidor de recuperaçãodiáriaconforme a política resticaxone-dr
Registos de produção (volume loki_data)rsync incremental + resticdiáriao Loki guarda um anoaxone-dr
Base de pré-produçãopg_dump comprimido (~/scripts/backup-database.sh)02:0030 dias~/backups no 220
GitLab de pré-produçãogitlab-backup create + arquivo de /etc/gitlab (~/scripts/backup-gitlab.sh)02:3014 dias~/backups/gitlab no 220
Código-fonterepositórios Gita cada push—gitlab.com e gitlab.ucp-pch.org

O servidor de recuperação (axone-dr) é administrado pela Axone; liga-se à produção através do contentor pch_pg_dr_proxy.

Pontos em aberto
  • Os ficheiros carregados (volume backend_uploads: fotos, anexos, documentos): a sua cópia fora do local está por confirmar com a equipa que gere o servidor de recuperação.
  • As salvaguardas do servidor 220 (pré-produção, GitLab) ficam nesse servidor: ainda não são copiadas para fora do local.

Salvaguarda manual da base​

Antes de uma operação arriscada (migração pesada, importação em massa):

# Produção
docker exec pch_postgres sh -c 'pg_dump -U "$POSTGRES_USER" -d "$POSTGRES_DB"' | gzip > ~/backups/pch_sig_$(date +%Y%m%d_%H%M%S).sql.gz

# Pré-produção (nome de contentor com prefixo)
PG=$(docker ps --filter name=pch_postgres --format '{{.Names}}' | grep -v exporter | head -1)
docker exec "$PG" sh -c 'pg_dump -U "$POSTGRES_USER" -d "$POSTGRES_DB"' | gzip > ~/backups/pch_sig_$(date +%Y%m%d_%H%M%S).sql.gz

Verificar que o ficheiro não está vazio (ls -lh ~/backups | tail -3).

Salvaguarda dos ficheiros carregados​

docker run --rm -v pch-sig_backend_uploads:/data:ro -v ~/backups:/out alpine \
tar -czf /out/uploads_$(date +%Y%m%d).tar.gz -C /data .

(O nome exato do volume é dado por docker volume ls | grep uploads.)

Salvaguardas da pré-produção​

0 2 * * * /home/ubuntu/scripts/backup-database.sh >> /home/ubuntu/backups/cron.log 2>&1
30 2 * * * /home/ubuntu/scripts/backup-gitlab.sh >> /home/ubuntu/backups/cron.log 2>&1

A salvaguarda do GitLab inclui dois ficheiros por dia, ambos necessários a um restauro: o arquivo da aplicação (*_gitlab_backup.tar) e a configuração (gitlab-config_*.tar.gz, que contém gitlab-secrets.json). Detalhes em docs/GITLAB_SERVEUR.md.

Verificar​

ls -lh ~/backups | tail -5 # dumps recentes e não vazios
tail -20 ~/backups/backup.log # registo do script da pré-produção
tail -20 ~/backups/gitlab-backup.log

Uma salvaguarda só é fiável se o seu restauro tiver sido testado: ver Restauro.

O que nunca se deve perder​

  • ~/pch-sig/.env.prod e ~/pch-sig/backend/.env (segredos), backend/config/jwt/ (chaves JWT): o seu conteúdo está no gestor de segredos.
  • ~/smtp-relay/.env (relé SMTP), ~/kobo-install/ (configuração Kobo), ~/gitlab (configuração GitLab).