#!/usr/bin/env bash # Deploy VPD Backoffice to an SSH-accessible VM. set -Eeuo pipefail ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$ROOT" # shellcheck disable=SC1091 . "$ROOT/scripts/lib/common.sh" HOST="hermes" REMOTE_DIR='$HOME/apps/vpd-backoffice' REMOTE_PORT="${BACKOFFICE_PORT:-8082}" IDENTITY_FILE="" KNOWN_HOSTS_FILE="" ACCEPT_HOST_KEY="N" DRY_RUN="N" SKIP_BUILD="N" START_APP="Y" usage() { cat <> "$TMP_DIR/.env" < "$TMP_DIR/start.sh" <<'START' #!/usr/bin/env bash set -Eeuo pipefail APP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$APP_DIR" set -a . "$APP_DIR/.env" set +a PID_FILE="$APP_DIR/app.pid" LOG_FILE="$APP_DIR/app.log" if [[ -f "$PID_FILE" ]] && kill -0 "$(cat "$PID_FILE")" >/dev/null 2>&1; then echo "already running pid=$(cat "$PID_FILE")" exit 0 fi setsid nohup java -jar "$APP_DIR/app.jar" > "$LOG_FILE" 2>&1 < /dev/null & echo $! > "$PID_FILE" echo "started pid=$(cat "$PID_FILE") log=$LOG_FILE" START cat > "$TMP_DIR/stop.sh" <<'STOP' #!/usr/bin/env bash set -Eeuo pipefail APP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PID_FILE="$APP_DIR/app.pid" if [[ ! -f "$PID_FILE" ]]; then echo "not running: pid file not found" exit 0 fi PID="$(cat "$PID_FILE")" if kill -0 "$PID" >/dev/null 2>&1; then kill "$PID" for _ in {1..20}; do if ! kill -0 "$PID" >/dev/null 2>&1; then break fi sleep 1 done fi rm -f "$PID_FILE" echo "stopped" STOP cat > "$TMP_DIR/status.sh" <<'STATUS' #!/usr/bin/env bash set -Eeuo pipefail APP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PID_FILE="$APP_DIR/app.pid" if [[ -f "$PID_FILE" ]] && kill -0 "$(cat "$PID_FILE")" >/dev/null 2>&1; then echo "running pid=$(cat "$PID_FILE")" else echo "stopped" fi STATUS chmod +x "$TMP_DIR/start.sh" "$TMP_DIR/stop.sh" "$TMP_DIR/status.sh" log "원격 디렉토리 생성" ssh "${SSH_ARGS[@]}" "$HOST" "mkdir -p \"$REMOTE_DIR\"" log "패키지 업로드" tar -C "$TMP_DIR" -czf - app.jar .env wallet start.sh stop.sh status.sh \ | ssh "${SSH_ARGS[@]}" "$HOST" "tar -C \"$REMOTE_DIR\" -xzf - && chmod 600 \"$REMOTE_ENV_FILE\" && chmod +x \"$REMOTE_DIR\"/start.sh \"$REMOTE_DIR\"/stop.sh \"$REMOTE_DIR\"/status.sh" log "원격 Java 확인" ssh "${SSH_ARGS[@]}" "$HOST" "java -version >/tmp/vpd-backoffice-java-version.out 2>&1 && cat /tmp/vpd-backoffice-java-version.out | head -n 1" if [[ "$START_APP" == "Y" ]]; then log "원격 앱 재기동" ssh "${SSH_ARGS[@]}" "$HOST" "\"$REMOTE_DIR\"/stop.sh || true; \"$REMOTE_DIR\"/start.sh; sleep 8; \"$REMOTE_DIR\"/status.sh" log "원격 헬스체크" ssh "${SSH_ARGS[@]}" "$HOST" "curl -sS -H 'X-Forwarded-Proto: https' -H 'X-Forwarded-Host: localhost' -o /tmp/vpd-backoffice-login.html -w '%{http_code}\n' http://127.0.0.1:${REMOTE_PORT}/login" fi ok "배포 완료: $HOST:$REMOTE_DIR"