Files
ems/scripts/import_ems_db.sh
Dusan Vojacek b46388ac0b
Some checks failed
test / smoke-test (push) Successful in 5s
deploy / deploy (push) Has been cancelled
import DB z druhe instance
2026-04-04 23:21:33 +02:00

78 lines
2.7 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# Import zálohy EMS (pg_dump -Fc) do Postgresu v Dockeru na serveru.
#
# Předpoklad: čerstvý volume nebo vědomá obnova přes existující data.
# Spouštěj na serveru z /opt/ems-deploy (nebo nastav EMS_DEPLOY_ROOT).
#
# Postup (nová instance, ještě bez plného stacku):
# 1) /opt/ems-deploy/.env vyplněné (DB_USER, DB_PASSWORD stejné jako v cílové DB po initu db)
# 2) docker compose -f /opt/ems-deploy/docker-compose.yml --env-file /opt/ems-deploy/.env up -d db
# 3) Počkej na healthy: docker compose ... ps
# 4) bash app/scripts/import_ems_db.sh /tmp/ems.dump
# 5) Celý stack: /opt/ems-deploy/deploy.sh (nebo docker compose up -d)
#
# Volby prostředí:
# EMS_DEPLOY_ROOT=/opt/ems-deploy (výchozí)
# COMPOSE_FILE, ENV_FILE přepíšou cesty k souborům
#
# Poznámky:
# - Záloha musí být z podobného stacku (Postgres 16 + Timescale). Jiná major verze může selhat.
# - Dump by měl obsahovat i Flyway metadata (tabulku historie), jinak při dalším startu Flyway znovu spustí migrace a může spadnout.
set -euo pipefail
ROOT="${EMS_DEPLOY_ROOT:-/opt/ems-deploy}"
COMPOSE_FILE="${COMPOSE_FILE:-$ROOT/docker-compose.yml}"
ENV_FILE="${ENV_FILE:-$ROOT/.env}"
if [[ $# -lt 1 ]]; then
echo "Usage: $0 /cesta/k/ems.dump" >&2
exit 1
fi
DUMP="$(readlink -f "$1")"
if [[ ! -f "$DUMP" ]]; then
echo "ERROR: soubor neexistuje: $DUMP" >&2
exit 1
fi
if [[ ! -f "$COMPOSE_FILE" ]]; then
echo "ERROR: compose not found: $COMPOSE_FILE" >&2
exit 1
fi
if [[ ! -f "$ENV_FILE" ]]; then
echo "ERROR: .env not found: $ENV_FILE" >&2
exit 1
fi
set -a
# shellcheck disable=SC1090
source "$ENV_FILE"
set +a
: "${DB_USER:?DB_USER missing in $ENV_FILE}"
: "${DB_PASSWORD:?DB_PASSWORD missing in $ENV_FILE}"
cd "$ROOT"
if ! docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" ps --status running -q db | grep -q .; then
echo "ERROR: db neběží. Spusť jen databázi, např.:" >&2
echo " docker compose -f \"$COMPOSE_FILE\" --env-file \"$ENV_FILE\" up -d db" >&2
exit 1
fi
CID="$(docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" ps -q db)"
echo "Kopíruji dump do kontejneru..."
docker cp "$DUMP" "${CID}:/tmp/ems_import.dump"
echo "Obnovuji databázi ems (--clean smaže existující objekty ve schématech ze zálohy)..."
docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" exec -T \
-e "PGPASSWORD=${DB_PASSWORD}" \
db \
pg_restore -U "$DB_USER" -d ems --clean --if-exists --no-owner --no-acl --verbose /tmp/ems_import.dump
docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" exec -T db rm -f /tmp/ems_import.dump
echo "Import dokončen. Spusť zbytek stacku (deploy.sh nebo docker compose up -d)."