#!/usr/bin/env bash set -Eeuo pipefail # Target server runtime installer. It only loads packaged Docker images and # starts docker compose; it does not build source code. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" DEPLOY_ENV="${DEPLOY_ENV:-emp-test}" PROJECT_NAME="${PROJECT_NAME:-$DEPLOY_ENV}" ENV_FILE="${ENV_FILE:-.env}" COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.yml}" IMAGE_TAR="${IMAGE_TAR:-images.tar}" log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" } die() { echo "ERROR: $*" >&2 exit 1 } need_cmd() { command -v "$1" >/dev/null 2>&1 || die "Missing command: $1" } need_cmd docker if docker compose version >/dev/null 2>&1; then DC=(docker compose) elif command -v docker-compose >/dev/null 2>&1; then DC=(docker-compose) else die "Missing docker compose" fi if [[ ! -f "$ENV_FILE" ]]; then cp .env.example "$ENV_FILE" die "Generated $ENV_FILE. Update passwords, PUBLIC_HOST and ports, then rerun: bash install.sh" fi if [[ ! -f "$COMPOSE_FILE" ]]; then die "Missing compose file: $COMPOSE_FILE" fi if [[ -f "$IMAGE_TAR" ]]; then log "Load images: $IMAGE_TAR" docker load -i "$IMAGE_TAR" else log "Image tar not found: $IMAGE_TAR. Compose will use local or remote images." fi log "Start deploy env: $DEPLOY_ENV, project: $PROJECT_NAME" "${DC[@]}" \ --env-file "$ENV_FILE" \ -f "$COMPOSE_FILE" \ -p "$PROJECT_NAME" \ up -d log "Current service status" "${DC[@]}" \ --env-file "$ENV_FILE" \ -f "$COMPOSE_FILE" \ -p "$PROJECT_NAME" \ ps log "Done. Visit http://PUBLIC_HOST:ADMIN_HOST_PORT from the configured .env values."