Ir al contenido

Scripts

Estos scripts facilitan algunas tareas de instalación y mantenimiento, y se ejecutan desde la carpeta del repositorio portal-andino-v2 en el servidor. Los atajos para la instalación de prueba, como bin/compose o bin/ckan, forman parte del propio repositorio y se describen en su documentación.

Revisa que los contenedores estén levantados, que las páginas principales respondan con código 200 y, si el harvesting está activo, que sus dos procesos estén en marcha. Termina con un código distinto de cero si algo falla, de modo que también sirve como control para un sistema de monitoreo.

Ventana de terminal
./verificar-stack.sh https://datos.miorganismo.gob.ar
Descargar verificar-stack.sh
Ver el script completo
verificar-stack.sh
#!/usr/bin/env bash
# Comprueba que el stack de producción esté sano.
# Uso: ./verificar-stack.sh [URL] (default https://localhost:8443)
# Correr desde la raíz de portal-andino-v2.
set -u
URL="${1:-https://localhost:8443}"
falla=0
ok() { printf ' \033[32mOK\033[0m %s\n' "$1"; }
mal() { printf ' \033[31mFALLA\033[0m %s\n' "$1"; falla=1; }
echo "Contenedores"
for s in nginx ckan ckan-worker db solr redis datapusher; do
estado=$(docker compose ps --format '{{.Health}}{{.State}}' "$s" 2>/dev/null)
case "$estado" in
healthy*|running) ok "$s ($estado)" ;;
*) mal "$s (${estado:-no existe})" ;;
esac
done
echo "Endpoints"
for ruta in / /dataset /organization /api/action/status_show; do
code=$(curl -ks -o /dev/null -w '%{http_code}' "$URL$ruta")
[ "$code" = 200 ] && ok "$ruta" || mal "$ruta ($code)"
done
if docker compose exec -T ckan sh -c 'echo "$CKAN__PLUGINS"' | grep -qw harvest; then
echo "Harvester"
[ "$(curl -ks -o /dev/null -w '%{http_code}' "$URL/harvest")" = 200 ] && ok "/harvest" || mal "/harvest"
for c in gather fetch; do
docker compose exec -T ckan-worker supervisorctl status "ckan_${c}_consumer:*" | grep -q RUNNING \
&& ok "${c}-consumer" || mal "${c}-consumer"
done
fi
exit $falla

Da de alta una fuente de harvesting mediante la API. Necesita curl, jq y un token de una cuenta con permisos de administración del portal.

Ventana de terminal
export CKAN_URL=https://datos.miorganismo.gob.ar
export CKAN_TOKEN=...
./crear-fuente-harvest.sh salud https://datos.salud.gob.ar/catalog.xlsx xlsx_harvester salud DAILY '{"skip_rows": 0}'
Descargar crear-fuente-harvest.sh
Ver el script completo
crear-fuente-harvest.sh
#!/usr/bin/env bash
# Da de alta una fuente de harvest por API.
# Uso:
# CKAN_URL=https://datos.ejemplo.gob.ar CKAN_TOKEN=xxx \
# ./crear-fuente-harvest.sh <name> <url> <source_type> <owner_org> [frequency] [config_json]
# El token se genera en /user/<usuario>/api-tokens con un usuario sysadmin.
set -euo pipefail
: "${CKAN_URL:?Falta CKAN_URL}" "${CKAN_TOKEN:?Falta CKAN_TOKEN}"
[ $# -ge 4 ] || { sed -n 3,6p "$0"; exit 1; }
name=$1 url=$2 tipo=$3 org=$4 freq=${5:-MANUAL} config=${6:-}
# jq arma el JSON para no tener que escapar comillas a mano.
payload=$(jq -n --arg name "$name" --arg url "$url" --arg tipo "$tipo" \
--arg org "$org" --arg freq "$freq" --arg config "$config" \
'{name: $name, title: $name, url: $url, source_type: $tipo,
owner_org: $org, frequency: $freq, config: $config}')
curl -fsS -X POST "$CKAN_URL/api/action/harvest_source_create" \
-H "Authorization: $CKAN_TOKEN" -H 'Content-Type: application/json' \
-d "$payload" | jq '.result | {id, name, url, source_type}'

Hace una copia de la base de CKAN y de la del datastore en la carpeta backups/, dentro de una subcarpeta con la fecha. No copia los archivos subidos al portal, que se resguardan por separado como se explica en Operación.

Ventana de terminal
./backup-db.sh
Descargar backup-db.sh
Ver el script completo
backup-db.sh
#!/usr/bin/env bash
# Vuelca las bases de CKAN y del datastore a ./backups/<fecha>/.
# Correr desde la raíz de portal-andino-v2.
set -euo pipefail
destino="backups/$(date +%Y%m%d-%H%M)"
mkdir -p "$destino"
# Los nombres se leen del entorno del contenedor db, no del .env:
# el .env tiene líneas con espacios que bash no puede cargar con source.
for var in CKAN_DB DATASTORE_DB; do
base=$(docker compose exec -T db printenv "$var")
docker compose exec -T db sh -c "pg_dump -U \"\$POSTGRES_USER\" -Fc $base" > "$destino/$base.dump"
echo "$destino/$base.dump"
done
# No incluye el volumen ckan_storage (archivos subidos), que se resguarda aparte.