Files
laufschrift/deploy_citysensor.sh
2026-03-11 11:58:49 +01:00

61 lines
2.0 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# Deploys laufschrift to docker.citysensor.de by:
# 1) building and pushing a multi-platform image
# 2) syncing compose/env files to the remote host
# 3) pulling and restarting the service remotely
REMOTE_HOST="${REMOTE_HOST:-docker.citysensor.de}"
REMOTE_USER="${REMOTE_USER:-rxf}"
REMOTE_PORT="${REMOTE_PORT:-22022}"
REMOTE_DIR="${REMOTE_DIR:-/opt/laufschrift}"
IMAGE_REPO="${IMAGE_REPO:-gitea.fuerst-stuttgart.de/admin/laufschrift}"
IMAGE_TAG="${IMAGE_TAG:-$(date +%Y%m%d%H%M)}"
PLATFORMS="${PLATFORMS:-linux/amd64,linux/arm64}"
DEPLOY_ENV_FILE="${DEPLOY_ENV_FILE:-.env}"
BUILD_PUSH="${BUILD_PUSH:-1}"
FULL_IMAGE="${IMAGE_REPO}:${IMAGE_TAG}"
REMOTE="${REMOTE_USER}@${REMOTE_HOST}"
if [[ ! -f "docker-compose.yml" ]]; then
echo "ERROR: docker-compose.yml not found in current directory."
exit 1
fi
if [[ ! -f "${DEPLOY_ENV_FILE}" ]]; then
echo "ERROR: ${DEPLOY_ENV_FILE} not found."
echo " Create it first, e.g. from .env.example"
exit 1
fi
if [[ "${BUILD_PUSH}" == "1" ]]; then
echo "==> Building and pushing multi-platform image: ${FULL_IMAGE}"
docker buildx build \
--platform "${PLATFORMS}" \
-f Dockerfile_laufschrift \
-t "${FULL_IMAGE}" \
--push \
.
# Keep :latest in sync for simple rollbacks and manual usage.
docker buildx imagetools create \
-t "${IMAGE_REPO}:latest" \
"${FULL_IMAGE}"
fi
echo "==> Syncing compose and env to ${REMOTE}:${REMOTE_DIR}"
ssh -p "${REMOTE_PORT}" "${REMOTE}" "mkdir -p '${REMOTE_DIR}'"
scp -P "${REMOTE_PORT}" docker-compose.yml "${REMOTE}:${REMOTE_DIR}/docker-compose.yml"
scp -P "${REMOTE_PORT}" "${DEPLOY_ENV_FILE}" "${REMOTE}:${REMOTE_DIR}/.env"
echo "==> Deploying ${FULL_IMAGE} on ${REMOTE_HOST}"
ssh -p "${REMOTE_PORT}" "${REMOTE}" "cd '${REMOTE_DIR}' && IMAGE='${FULL_IMAGE}' docker compose pull app && IMAGE='${FULL_IMAGE}' docker compose up -d --no-build --remove-orphans"
echo "==> Deployment finished"
echo " Host: ${REMOTE_HOST}"
echo " Image: ${FULL_IMAGE}"