|
| 1 | +#!/usr/bin/env bash |
| 2 | + |
| 3 | +set -o errexit |
| 4 | +set -o pipefail |
| 5 | +set -o nounset |
| 6 | + |
| 7 | +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" |
| 8 | +COMPOSE_FILE="${COMPOSE_FILE:-${ROOT_DIR}/local.yml}" |
| 9 | +COMPOSE_SERVICE="${COMPOSE_SERVICE:-postgres}" |
| 10 | +ARCHIVE_ROOT="${ARCHIVE_ROOT:-${ROOT_DIR}/../scms_data/markapi/postgres_backups_pre_upgrade}" |
| 11 | +TIMESTAMP="$(date +'%Y_%m_%dT%H_%M_%S')" |
| 12 | +ARCHIVE_DIR="${ARCHIVE_ROOT}/${TIMESTAMP}" |
| 13 | + |
| 14 | +cd "${ROOT_DIR}" |
| 15 | + |
| 16 | +if ! docker compose -f "${COMPOSE_FILE}" ps --status running "${COMPOSE_SERVICE}" 2>/dev/null | grep -q "${COMPOSE_SERVICE}"; then |
| 17 | + echo "Serviço ${COMPOSE_SERVICE} não está em execução. Suba o stack: docker compose -f ${COMPOSE_FILE} up -d ${COMPOSE_SERVICE}" |
| 18 | + exit 1 |
| 19 | +fi |
| 20 | + |
| 21 | +echo "A criar backup lógico (pg_dump) no contentor ${COMPOSE_SERVICE}..." |
| 22 | +docker compose -f "${COMPOSE_FILE}" exec -T "${COMPOSE_SERVICE}" backup |
| 23 | + |
| 24 | +mkdir -p "${ARCHIVE_DIR}" |
| 25 | +BACKUP_VOLUME="${BACKUP_VOLUME:-../scms_data/markapi/data_dev_backup}" |
| 26 | + |
| 27 | +if [[ -d "${ROOT_DIR}/${BACKUP_VOLUME}" ]]; then |
| 28 | + shopt -s nullglob |
| 29 | + backups=("${ROOT_DIR}/${BACKUP_VOLUME}"/backup_*.sql.gz) |
| 30 | + shopt -u nullglob |
| 31 | + if [[ ${#backups[@]} -eq 0 ]]; then |
| 32 | + echo "Nenhum ficheiro backup_*.sql.gz em ${ROOT_DIR}/${BACKUP_VOLUME}" |
| 33 | + exit 1 |
| 34 | + fi |
| 35 | + latest_backup="$(ls -t "${backups[@]}" | head -1)" |
| 36 | + cp -a "${latest_backup}" "${ARCHIVE_DIR}/" |
| 37 | + cp -a "${latest_backup}" "${ARCHIVE_ROOT}/latest_pre_upgrade.sql.gz" |
| 38 | + echo "Cópia de segurança: ${ARCHIVE_DIR}/$(basename "${latest_backup}")" |
| 39 | + echo "Atalho: ${ARCHIVE_ROOT}/latest_pre_upgrade.sql.gz" |
| 40 | +else |
| 41 | + echo "Volume de backups não encontrado (${ROOT_DIR}/${BACKUP_VOLUME}). O dump foi criado no contentor em /backups." |
| 42 | +fi |
| 43 | + |
| 44 | +echo "Concluído. Antes de subir Postgres 18, pare django/celery e siga docs/ops/postgres-upgrade-backup.md" |
0 commit comments