Corp/ops/deploy/install-deploy-hardening
Игорь Надеин 96fe59d842
All checks were successful
Deploy production / deploy (push) Successful in 20m9s
Harden deployment cleanup, rollback and worker lifecycle
2026-09-10 13:55:51 +03:00

39 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# Update deployment tooling and clean up without building/deploying application code.
set -Eeuo pipefail
[[ ${EUID} -eq 0 ]] || { echo 'Run this installer with sudo.' >&2; exit 1; }
SOURCE_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
bash -n "${SOURCE_DIR}/eusrr-deploy"
# SCP can leave the source group-writable. Validate the exact protected copy
# that will be installed; logrotate may return zero even when it ignores a file.
validation_dir="$(mktemp -d /tmp/eusrr-logrotate-check.XXXXXXXX)"
cleanup_validation() {
rm -f -- "${validation_dir}/logrotate.conf" "${validation_dir}/validation.log"
rmdir -- "${validation_dir}"
}
trap cleanup_validation EXIT
install -o root -g root -m 0644 "${SOURCE_DIR}/logrotate.conf" "${validation_dir}/logrotate.conf"
if ! LC_ALL=C logrotate --debug --state /dev/null "${validation_dir}/logrotate.conf" \
>"${validation_dir}/validation.log" 2>&1 ||
grep -Eq '^error:|Ignoring .* because' "${validation_dir}/validation.log"; then
cat "${validation_dir}/validation.log" >&2
exit 1
fi
exec 9>/run/lock/eusrr-deploy.lock
flock -n 9 || { echo 'A deployment is running. Retry after it finishes.' >&2; exit 3; }
backup="/var/lib/eusrr-deploy/tooling-backup-$(date -u +%Y%m%dT%H%M%SZ)"
install -d -o root -g root -m 0700 "${backup}"
cp -a /usr/local/sbin/eusrr-deploy "${backup}/eusrr-deploy"
install -o root -g root -m 0755 "${SOURCE_DIR}/eusrr-deploy" /usr/local/sbin/eusrr-deploy.new
mv -Tf /usr/local/sbin/eusrr-deploy.new /usr/local/sbin/eusrr-deploy
install -o root -g root -m 0644 "${validation_dir}/logrotate.conf" /etc/logrotate.d/eusrr-deploy
/usr/local/sbin/eusrr-deploy --self-test
flock -u 9
exec 9>&-
/usr/local/sbin/eusrr-deploy --maintenance
systemctl is-active eusrr-backend@"$(cat /var/lib/eusrr-deploy/active-slot)".service \
eusrr-frontend@"$(cat /var/lib/eusrr-deploy/active-slot)".service \
eusrr-celery-worker@"$(cat /var/lib/eusrr-deploy/active-slot)".service \
eusrr-celery-beat@"$(cat /var/lib/eusrr-deploy/active-slot)".service
printf 'Deployment tooling updated. Application was not redeployed. Script backup: %s\n' "${backup}"