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.
verificar-stack.sh
Sección titulada «verificar-stack.sh»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.
./verificar-stack.sh https://datos.miorganismo.gob.arVer el script completo
#!/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 -uURL="${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})" ;; esacdone
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" donefi
exit $fallacrear-fuente-harvest.sh
Sección titulada «crear-fuente-harvest.sh»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.
export CKAN_URL=https://datos.miorganismo.gob.arexport CKAN_TOKEN=..../crear-fuente-harvest.sh salud https://datos.salud.gob.ar/catalog.xlsx xlsx_harvester salud DAILY '{"skip_rows": 0}'Ver el script completo
#!/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}'backup-db.sh
Sección titulada «backup-db.sh»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.
./backup-db.shVer el script completo
#!/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.