Files
ems/deploy/deploy.sh
Dusan Vojacek 5d3bc5b394
Some checks failed
deploy / deploy (push) Failing after 0s
test / smoke-test (push) Has been cancelled
next fix of deploy
2026-04-05 01:41:12 +02:00

70 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# EMS single-server deploy: aktualizace git checkoutu, sync compose, docker compose build + up.
#
# Jednorázový bootstrap na serveru (po prvním merge tohoto skriptu do main):
# sudo mkdir -p /opt/ems-deploy/app
# sudo chown -R "$USER:$USER" /opt/ems-deploy
# git clone ssh://git@git.vojacek.eu:2222/vojacekd/ems.git /opt/ems-deploy/app
# cp /opt/ems-deploy/app/.env.example /opt/ems-deploy/.env
# # upravit /opt/ems-deploy/.env (chmod 600)
# install -m 755 /opt/ems-deploy/app/deploy/deploy.sh /opt/ems-deploy/deploy.sh
# /opt/ems-deploy/deploy.sh
set -euo pipefail
ROOT="${EMS_DEPLOY_ROOT:-/opt/ems-deploy}"
APP="${ROOT}/app"
COMPOSE_SRC="${APP}/deploy/docker-compose.yml"
COMPOSE_DST="${ROOT}/docker-compose.yml"
ENV_FILE="${ROOT}/.env"
LOCK_FILE="${ROOT}/.deploy.lock"
log() {
echo "[$(date -Iseconds)] $*"
}
if [[ ! -d "$APP/.git" ]]; then
log "ERROR: missing git checkout at $APP (see bootstrap header in this script)."
exit 1
fi
if [[ ! -f "$ENV_FILE" ]]; then
log "ERROR: missing $ENV_FILE"
exit 1
fi
if [[ ! -f "$COMPOSE_SRC" ]]; then
log "ERROR: missing $COMPOSE_SRC (is deploy/docker-compose.yml in the repo?)"
exit 1
fi
exec 9>"$LOCK_FILE"
flock 9
log "Starting deploy (ROOT=$ROOT)"
log "Git: fetch origin"
git -c safe.directory="$APP_DIR" -C "$APP_DIR" fetch origin || true
log "Git: checkout main && reset --hard origin/main"
git -C "$APP" checkout main
git -C "$APP" reset --hard "origin/main"
log "Sync compose -> $COMPOSE_DST"
install -m 0644 "$COMPOSE_SRC" "$COMPOSE_DST"
export COMPOSE_FILE="$COMPOSE_DST"
log "docker compose config (validate)"
docker compose -f "$COMPOSE_DST" --env-file "$ENV_FILE" config >/dev/null
log "docker compose build"
docker compose -f "$COMPOSE_DST" --env-file "$ENV_FILE" build
log "docker compose up -d"
docker compose -f "$COMPOSE_DST" --env-file "$ENV_FILE" up -d
log "docker image prune (dangling only)"
docker image prune -f
log "Deploy finished OK"