You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
senzapaura_es/despliegue/activar.sh

50 lines
2.0 KiB

#!/usr/bin/env bash
# Se ejecuta en el destino. Conserva releases anteriores y revierte código si falla.
set -euo pipefail
RUTA="${1:?}"; VERSION="${2:?}"
[[ "$RUTA" =~ ^/[A-Za-z0-9_/-]+$ && "$RUTA" != / && "$RUTA" != *..* ]]
[[ "$VERSION" =~ ^[A-Za-z0-9_-]+$ ]]
exec 9>"$RUTA/.despliegue.lock"
flock -n 9 || { echo 'Ya hay un despliegue en curso' >&2; exit 1; }
NUEVA="$RUTA/releases/$VERSION"
[[ -f "$NUEVA/build/index.js" && -f "$NUEVA/build-panel/index.js" && -f "$RUTA/.env" && -f "$RUTA/.env.panel" ]]
command -v ffmpeg >/dev/null
command -v ffprobe >/dev/null
ANTERIOR="$(readlink "$RUTA/current" || true)"
cd "$NUEVA"
node despliegue/comprobar-entornos.mjs "$RUTA"
node --env-file="$RUTA/.env" scripts/db/migrar.mjs
if [[ ! -e "$RUTA/current" ]]; then
ln -s "$NUEVA" "$RUTA/current"
echo 'Primera versión preparada. Instala las unidades con sudo bash current/despliegue/instalar.sh.'
exit 0
fi
[[ -L "$RUTA/current" ]] || { echo 'current debe ser un enlace simbólico' >&2; exit 1; }
SERVICIOS=(senzapaura senzapaura-panel)
if systemctl is-enabled --quiet senzapaura-estudio 2>/dev/null; then SERVICIOS+=(senzapaura-estudio); fi
ACTIVADA=0
revertir() {
if [[ "$ACTIVADA" == 1 && -n "$ANTERIOR" ]]; then
ln -s "$ANTERIOR" "$RUTA/.rollback-$VERSION"
mv -Tf "$RUTA/.rollback-$VERSION" "$RUTA/current"
sudo systemctl restart "${SERVICIOS[@]}"
echo 'Se ha restaurado el código anterior. Las migraciones no se deshacen automáticamente.' >&2
fi
}
trap revertir ERR
ln -s "$NUEVA" "$RUTA/.current-$VERSION"
mv -Tf "$RUTA/.current-$VERSION" "$RUTA/current"
ACTIVADA=1
sudo systemctl restart "${SERVICIOS[@]}"
COMPROBADO=0
for INTENTO in {1..15}; do
if curl -fsS -o /dev/null http://127.0.0.1:3000/ && curl -fsS -o /dev/null http://127.0.0.1:3001/entrar; then COMPROBADO=1; break; fi
sleep 1
done
[[ "$COMPROBADO" == 1 ]]
systemctl is-active --quiet "${SERVICIOS[@]}"
if [[ ${#SERVICIOS[@]} == 3 ]]; then curl -fsS -o /dev/null http://127.0.0.1:3002/entrar; fi
ACTIVADA=0
trap - ERR
echo "Publicadas web y administración: $VERSION"

Powered by TurnKey Linux.