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.
50 lines
2.0 KiB
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"
|