92 lines
2.6 KiB
Bash
Executable File
92 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -Eeuo pipefail
|
|
|
|
dhv2_project="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
dhv2_label="${1:-manual}"
|
|
dhv2_stamp="$(date +%Y%m%d_%H%M%S)"
|
|
|
|
if [[ ! "$dhv2_label" =~ ^[a-zA-Z0-9_-]{1,40}$ ]]; then
|
|
echo "Etiqueta de backup inválida" >&2
|
|
exit 1
|
|
fi
|
|
|
|
dhv2_backup="/var/www/dh-backup/dhv2-${dhv2_label}-${dhv2_stamp}"
|
|
install -d -m 700 "$dhv2_backup"
|
|
cd "$dhv2_project"
|
|
|
|
test -f .env || { echo "No se encontró $dhv2_project/.env" >&2; exit 1; }
|
|
docker compose ps --status running >/dev/null
|
|
|
|
tar \
|
|
--exclude='*.zip' \
|
|
--exclude='.env' \
|
|
--exclude='*/node_modules' \
|
|
--exclude='*/dist' \
|
|
--exclude='*.tsbuildinfo' \
|
|
-czf "$dhv2_backup/source.tar.gz" .
|
|
|
|
install -m 600 .env "$dhv2_backup/.env"
|
|
|
|
docker compose exec -T db sh -lc \
|
|
'pg_dump -U "$POSTGRES_USER" -d "$POSTGRES_DB" -Fc' \
|
|
> "$dhv2_backup/database.dump"
|
|
|
|
dhv2_media_file=""
|
|
if docker volume inspect dhv2_asset_media >/dev/null 2>&1; then
|
|
dhv2_media_file="asset-media.tar.gz"
|
|
docker compose exec -T api sh -lc \
|
|
'test -d "$ASSET_MEDIA_ROOT" && tar -czf - -C "$ASSET_MEDIA_ROOT" .' \
|
|
> "$dhv2_backup/$dhv2_media_file"
|
|
chmod 600 "$dhv2_backup/$dhv2_media_file"
|
|
fi
|
|
|
|
dhv2_nginx_file=""
|
|
for dhv2_candidate in \
|
|
/etc/nginx/sites-available/dhv2.korexlabs.com \
|
|
/etc/nginx/sites-available/dhv2.korexlabs.com.conf \
|
|
/etc/nginx/sites-enabled/dhv2.korexlabs.com \
|
|
/etc/nginx/sites-enabled/dhv2.korexlabs.com.conf; do
|
|
if [ -f "$dhv2_candidate" ]; then
|
|
dhv2_nginx_file="nginx-site.conf"
|
|
install -m 600 "$dhv2_candidate" "$dhv2_backup/$dhv2_nginx_file"
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [ -z "$dhv2_nginx_file" ]; then
|
|
dhv2_nginx_file="NGINX_CONFIG_NOT_FOUND.txt"
|
|
printf '%s\n' 'No se encontró una configuración Nginx en las rutas conocidas.' > "$dhv2_backup/$dhv2_nginx_file"
|
|
chmod 600 "$dhv2_backup/$dhv2_nginx_file"
|
|
fi
|
|
|
|
{
|
|
echo "Proyecto: DH Inspección V2"
|
|
echo "Fase: D5.2"
|
|
echo "Versión: 0.19.2"
|
|
echo "Fecha UTC: $(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
echo "Origen: $dhv2_project"
|
|
echo "Base: dump PostgreSQL custom format"
|
|
if [ -n "$dhv2_media_file" ]; then
|
|
echo "Archivos protegidos de activos e inspecciones: $dhv2_media_file"
|
|
else
|
|
echo "Archivos protegidos: volumen todavía inexistente"
|
|
fi
|
|
echo
|
|
echo "Contenedores al generar el backup:"
|
|
docker compose ps
|
|
} > "$dhv2_backup/MANIFEST.txt"
|
|
chmod 600 "$dhv2_backup/MANIFEST.txt"
|
|
|
|
(
|
|
cd "$dhv2_backup"
|
|
dhv2_checksum_files=(source.tar.gz database.dump .env "$dhv2_nginx_file" MANIFEST.txt)
|
|
if [ -n "$dhv2_media_file" ]; then
|
|
dhv2_checksum_files+=("$dhv2_media_file")
|
|
fi
|
|
sha256sum "${dhv2_checksum_files[@]}" > SHA256SUMS
|
|
)
|
|
chmod 600 "$dhv2_backup/SHA256SUMS"
|
|
|
|
echo "$dhv2_backup"
|