From 85c7c97dc36673aae98dc2ad9d02db9bf5ae2d46 Mon Sep 17 00:00:00 2001 From: r-dev Date: Sat, 4 Apr 2026 11:22:34 +0200 Subject: [PATCH] feat(infra) : add pull-prod-db script and make target Co-Authored-By: Claude Opus 4.6 (1M context) --- makefile | 4 ++++ scripts/pull-prod-db.sh | 51 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100755 scripts/pull-prod-db.sh diff --git a/makefile b/makefile index 75e669b..9a1b57c 100644 --- a/makefile +++ b/makefile @@ -157,6 +157,10 @@ fixtures-load: $(DOCKER_COMPOSE) exec -T db psql -U $(POSTGRES_USER) -d $(POSTGRES_DB) -c "SET session_replication_role = DEFAULT;" @echo "Fixtures loaded!" +pull-prod-db: + @echo "Pulling production database..." + ./scripts/pull-prod-db.sh + fixtures-reset: @echo "Resetting database and loading fixtures..." $(DOCKER_COMPOSE) exec -T db psql -U $(POSTGRES_USER) -d $(POSTGRES_DB) -c "DO \$$\$$ DECLARE r RECORD; BEGIN FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = 'public' AND tablename != 'doctrine_migration_versions') LOOP EXECUTE 'TRUNCATE TABLE ' || quote_ident(r.tablename) || ' CASCADE'; END LOOP; END \$$\$$;" diff --git a/scripts/pull-prod-db.sh b/scripts/pull-prod-db.sh new file mode 100755 index 0000000..9a91050 --- /dev/null +++ b/scripts/pull-prod-db.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env bash +set -euo pipefail + +# ============================================================ +# pull-prod-db.sh — Importe la BDD inventory_prod de prod en local +# ============================================================ +# +# Usage : ./scripts/pull-prod-db.sh [SSH_HOST] +# +# SSH_HOST : alias ou adresse du serveur prod (default: prod) +# +# Prérequis : +# - Accès SSH au serveur de prod +# - Docker en cours sur la prod (conteneur "postgres", user "admin") +# - Docker compose Inventory en cours en local (make start) + +SSH_HOST="${1:-matt@prod.malio-dev.fr}" +PROD_CONTAINER="postgres" +PROD_DB="inventory_prod" +PROD_USER="admin" + +LOCAL_COMPOSE="docker compose --env-file infra/dev/.env.docker" +LOCAL_DB_SERVICE="db" +LOCAL_DB="inventory" +LOCAL_USER="root" + +DUMP_FILE="/tmp/inventory_prod_dump.sql" + +echo "==> Dump de ${PROD_DB} depuis ${SSH_HOST}..." +ssh "${SSH_HOST}" "docker exec ${PROD_CONTAINER} pg_dump -U ${PROD_USER} -d ${PROD_DB} \ + --no-owner --no-privileges --clean --if-exists" > "${DUMP_FILE}" + +DUMP_SIZE=$(du -h "${DUMP_FILE}" | cut -f1) +echo "==> Dump recu : ${DUMP_FILE} (${DUMP_SIZE})" + +echo "==> Reset de la BDD locale (${LOCAL_DB})..." +${LOCAL_COMPOSE} exec -T ${LOCAL_DB_SERVICE} psql -U ${LOCAL_USER} -d postgres -c \ + "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='${LOCAL_DB}' AND pid <> pg_backend_pid();" > /dev/null 2>&1 || true +${LOCAL_COMPOSE} exec -T ${LOCAL_DB_SERVICE} psql -U ${LOCAL_USER} -d postgres -c \ + "DROP DATABASE IF EXISTS ${LOCAL_DB};" +${LOCAL_COMPOSE} exec -T ${LOCAL_DB_SERVICE} psql -U ${LOCAL_USER} -d postgres -c \ + "CREATE DATABASE ${LOCAL_DB};" + +echo "==> Import du dump dans la BDD locale..." +${LOCAL_COMPOSE} exec -T ${LOCAL_DB_SERVICE} psql -U ${LOCAL_USER} -d ${LOCAL_DB} < "${DUMP_FILE}" + +echo "==> Nettoyage..." +rm -f "${DUMP_FILE}" + +echo "" +echo "Done! BDD locale '${LOCAL_DB}' synchronisee avec '${PROD_DB}' de prod."