#!/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 "$APP" fetch origin 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"