Ctrl K
ComunidadGuías…

prod-up.sh

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/usr/bin/env bash
set -Eeuo pipefail

ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CONFIG_PATH="${KAGEOS_CONFIG:-.kageos/prod/kage.yaml}"
LOG_FILE="${KAGEOS_UP_LOG:-.kageos/prod/kagectl-up.log}"
PID_FILE="${KAGEOS_UP_PID_FILE:-.kageos/prod/kagectl-up.pid}"

resolve_path() {
  local path="$1"
  if [[ "$path" = /* ]]; then
    printf '%s\n' "$path"
  else
    printf '%s/%s\n' "$ROOT_DIR" "$path"
  fi
}

CONFIG_ABS="$(resolve_path "$CONFIG_PATH")"
LOG_ABS="$(resolve_path "$LOG_FILE")"
PID_ABS="$(resolve_path "$PID_FILE")"

cd "$ROOT_DIR"

warn_rootless_podman_linger() {
  if [[ "${KAGEOS_SKIP_LINGER_CHECK:-0}" == "1" ]]; then
    return
  fi
  if [[ "${EUID:-$(id -u)}" -eq 0 ]]; then
    return
  fi
  if ! command -v podman >/dev/null 2>&1 || ! podman compose version >/dev/null 2>&1; then
    return
  fi
  if ! command -v loginctl >/dev/null 2>&1; then
    return
  fi

  local user_name linger
  user_name="$(id -un)"
  linger="$(loginctl show-user "$user_name" -p Linger --value 2>/dev/null || true)"
  if [[ "$linger" != "yes" ]]; then
    echo "WARNING: rootless podman compose is available, but systemd linger is not enabled for $user_name."
    echo "If services stop after SSH/session logout, run: sudo loginctl enable-linger $user_name"
    echo "Skip this check with: KAGEOS_SKIP_LINGER_CHECK=1 ./prod-up.sh"
  fi
}

if [[ ! -f "$CONFIG_ABS" ]]; then
  echo "ERROR: prod config not found: $CONFIG_PATH"
  echo "Run first: go run ./cmd/kagectl init --base-url http://your-ip-or-domain"
  exit 1
fi

mkdir -p "$(dirname "$LOG_ABS")" "$(dirname "$PID_ABS")"
warn_rootless_podman_linger

if [[ -f "$PID_ABS" ]]; then
  old_pid="$(tr -d '[:space:]' < "$PID_ABS" || true)"
  if [[ "$old_pid" =~ ^[0-9]+$ ]] && kill -0 "$old_pid" 2>/dev/null; then
    echo "prod deploy is already running in background: PID $old_pid"
    echo "log: $LOG_ABS"
    echo "stop it with: ./prod-stop.sh"
    exit 0
  fi
  rm -f "$PID_ABS"
fi

{
  printf '\n===== %s prod up start =====\n' "$(date '+%Y-%m-%d %H:%M:%S %z')"
  printf 'root: %s\n' "$ROOT_DIR"
  printf 'config: %s\n' "$CONFIG_PATH"
  printf 'args:'
  printf ' %q' "$@"
  printf '\n\n'
} >> "$LOG_ABS"

launcher='
set -Eeuo pipefail
trap "" HUP
root_dir="$1"
config_path="$2"
shift 2
cd "$root_dir"
exec </dev/null
exec go run ./cmd/kagectl up --config "$config_path" "$@"
'

if command -v setsid >/dev/null 2>&1; then
  nohup setsid bash -c "$launcher" _ "$ROOT_DIR" "$CONFIG_PATH" "$@" </dev/null >> "$LOG_ABS" 2>&1 &
else
  nohup bash -c "$launcher" _ "$ROOT_DIR" "$CONFIG_PATH" "$@" </dev/null >> "$LOG_ABS" 2>&1 &
fi

pid="$!"
printf '%s\n' "$pid" > "$PID_ABS"
disown "$pid" 2>/dev/null || true

echo "prod deploy started in background: PID $pid"
echo "log: $LOG_ABS"
echo "tail log: tail -f $LOG_FILE"
echo "stop: ./prod-stop.sh"