This commit is contained in:
Executable
+206
@@ -0,0 +1,206 @@
|
||||
#!/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 -a \
|
||||
"${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 -a \
|
||||
"${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}"
|
||||
Reference in New Issue
Block a user