Files
home-infra/scripts/deploy-vaultwarden.sh
T
a.zubarev 2e9e9b5d3b
Vaultwarden CI/CD / Validate and deploy Vaultwarden (push) Successful in 27s
Обновить scripts/deploy-vaultwarden.sh
2026-09-28 21:00:16 +03:00

207 lines
3.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -Eeuo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
SRC="${ROOT}/stacks/vaultwarden"
LIVE="/srv/nfs/infra/vaultwarden"
ENV_FILE="${LIVE}/.env"
BACKUP_ROOT="/srv/nfs/infra/.deploy-backups/vaultwarden"
STAMP="$(date '+%Y%m%d-%H%M%S')"
BACKUP="${BACKUP_ROOT}/${STAMP}"
echo "================================="
echo " Vaultwarden deployment"
echo "================================="
echo "Source: ${SRC}"
echo "Target: ${LIVE}"
#
# Проверки исходных файлов
#
if [[ ! -f "${SRC}/docker-compose.yml" ]]; then
echo "ERROR: ${SRC}/docker-compose.yml not found"
exit 1
fi
if [[ ! -f "${ENV_FILE}" ]]; then
echo "ERROR: ${ENV_FILE} not found"
exit 1
fi
#
# Проверка docker-compose
#
echo
echo "--- Validate Docker Compose ---"
docker compose \
--env-file "${ENV_FILE}" \
-f "${SRC}/docker-compose.yml" \
config >/dev/null
echo "Docker Compose configuration is valid."
#
# Определяем образ
#
echo
echo "--- Detect Vaultwarden image ---"
VAULTWARDEN_IMAGE="$(
docker compose \
--env-file "${ENV_FILE}" \
-f "${SRC}/docker-compose.yml" \
config --images |
grep -m1 'vaultwarden/server'
)"
if [[ -z "${VAULTWARDEN_IMAGE}" ]]; then
echo "ERROR: Vaultwarden image not found"
exit 1
fi
echo "Vaultwarden image: ${VAULTWARDEN_IMAGE}"
#
# Backup текущего compose
#
echo
echo "--- Backup current configuration ---"
mkdir -p "${BACKUP}"
if [[ -f "${LIVE}/docker-compose.yml" ]]; then
cp \
"${LIVE}/docker-compose.yml" \
"${BACKUP}/docker-compose.yml"
fi
echo "Backup: ${BACKUP}"
#
# Rollback
#
rollback()
{
rc=$?
echo
echo "!!! Deployment failed"
if [[ -f "${BACKUP}/docker-compose.yml" ]]; then
echo "Restoring previous docker-compose.yml"
cp \
"${BACKUP}/docker-compose.yml" \
"${LIVE}/docker-compose.yml"
(
cd "${LIVE}"
docker compose \
--env-file "${ENV_FILE}" \
up -d --remove-orphans || true
)
fi
exit "${rc}"
}
trap rollback ERR
#
# Deployment compose-файла
#
echo
echo "--- Deploy docker-compose.yml ---"
cp \
"${SRC}/docker-compose.yml" \
"${LIVE}/docker-compose.yml"
#
# Pull образов
#
echo
echo "--- Pull images ---"
cd "${LIVE}"
docker compose \
--env-file "${ENV_FILE}" \
pull
#
# Apply
#
echo
echo "--- Apply Docker Compose ---"
docker compose \
--env-file "${ENV_FILE}" \
up -d --remove-orphans
#
# Post-check
#
echo
echo "--- Check Vaultwarden container ---"
sleep 3
RUNNING="$(
docker inspect \
-f '{{.State.Running}}' \
vaultwarden
)"
if [[ "${RUNNING}" != "true" ]]; then
echo "ERROR: Vaultwarden container is not running"
exit 1
fi
#
# Показываем фактически запущенный image
#
RUNNING_IMAGE="$(
docker inspect \
-f '{{.Config.Image}}' \
vaultwarden
)"
echo "Running image: ${RUNNING_IMAGE}"
trap - ERR
echo
echo "================================="
echo " Vaultwarden deployment successful"
echo "================================="
echo "Backup: ${BACKUP}"