78 lines
2.7 KiB
Bash
Executable File
78 lines
2.7 KiB
Bash
Executable File
#!/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)."
|