#!/usr/bin/env bash set -euo pipefail branch="${1:-main}" target_dir="${2:-~/egbim}" env_file="${3:-}" db_dump_path="${4:-egbim_DB.sql}" db_import_marker=".db_import_done" case "$target_dir" in '~') target_dir="$HOME" ;; '~/'*) target_dir="$HOME/${target_dir#\~/}" ;; esac mkdir -p "$target_dir" cd "$target_dir" if [[ ! -d .git ]]; then git clone --branch "$branch" https://gitea.hmac.kr/b24014/egbim_homepage.git . else git fetch origin git checkout "$branch" git reset --hard "origin/$branch" fi if [[ -n "$env_file" ]]; then cp "$env_file" .env fi load_env_file() { local env_path="$1" local line="" local key="" local value="" while IFS= read -r line || [[ -n "$line" ]]; do line="${line%$'\r'}" if [[ -z "$line" || "$line" =~ ^[[:space:]]*# ]]; then continue fi key="${line%%=*}" value="${line#*=}" key="$(printf '%s' "$key" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')" if [[ -z "$key" ]]; then continue fi if [[ "$value" =~ ^\'.*\'$ || "$value" =~ ^\".*\"$ ]]; then value="${value:1:${#value}-2}" fi export "$key=$value" done < "$env_path" } if [[ -f .env ]]; then load_env_file .env fi mkdir -p \ egbim/data/cache \ egbim/data/session \ egbim/data/log \ eng/data/cache \ eng/data/session \ eng/data/log mkdir -p docker/mysql/init docker_compose_up_with_retry() { local max_attempts=3 local attempt=1 while (( attempt <= max_attempts )); do echo "[deploy] docker compose up attempt ${attempt}/${max_attempts}" if docker compose up -d --build; then return 0 fi if (( attempt == max_attempts )); then echo "[deploy] docker compose up failed after ${max_attempts} attempts" >&2 echo "[deploy] check server docker/systemd state: systemctl status docker, systemctl status dbus, journalctl -u docker -n 200" >&2 return 1 fi echo "[deploy] docker compose up failed, retrying shortly..." >&2 sleep 10 attempt=$((attempt + 1)) done } docker_compose_up_with_retry if [[ -f "$db_dump_path" && ! -f "$db_import_marker" ]]; then for _ in $(seq 1 30); do if docker compose exec -T db mariadb-admin ping -h localhost -uroot "-p${MARIADB_ROOT_PASSWORD}" >/dev/null 2>&1; then break fi sleep 2 done docker compose exec -T db mariadb-admin ping -h localhost -uroot "-p${MARIADB_ROOT_PASSWORD}" >/dev/null 2>&1 docker compose exec -T db mariadb -u"${G5_MYSQL_USER}" "-p${G5_MYSQL_PASSWORD}" "${G5_MYSQL_DB}" < "$db_dump_path" touch "$db_import_marker" fi