#!/usr/bin/env bash # # ITN-HUB 기동 스크립트 (nohup 방식). # # application.yml의 ${DB_URL} 같은 자리는 Spring이 "같은 이름의 환경변수"에서 찾아 채운다. # 그래서 java를 띄우기 전에 env 파일을 읽어 export 해두기만 하면 된다. # 비밀값을 java 명령 인자로 넘기면 `ps` 에 그대로 보이므로 반드시 환경변수로 준다. set -euo pipefail # ── 경로 (환경에 맞게 수정) ────────────────────────────────────────── JAVA_HOME_BIN=/home/hubAdmin/jdk-21.0.11/bin DEPLOY_PATH=/home/hubAdmin/deploy FILE_NM=itnhub-0.1.0.jar LOG_FILE_PATH=/home/hubAdmin/logs LOG_FILE_NM=itnhub.log PID_FILE=/home/hubAdmin/itnhub.pid # 값이 든 파일. 소유자만 읽게 두고(chmod 600) 저장소에는 올리지 않는다. ENV_FILE=/home/hubAdmin/itnhub.env # ── 환경변수 주입 ──────────────────────────────────────────────────── if [ ! -f "$ENV_FILE" ]; then echo "환경변수 파일이 없습니다: $ENV_FILE" >&2 echo "deploy/itnhub.env.example 을 복사해 값을 채우세요." >&2 exit 1 fi # set -a 를 켜면 이후 대입되는 변수가 모두 export 된다(파일에 export를 안 써도 된다). set -a # shellcheck disable=SC1090 . "$ENV_FILE" set +a # 필수 8개가 비어 있으면 기동 도중에 죽으므로 여기서 먼저 걸러낸다. for v in DB_URL DB_USERNAME DB_PASSWORD MATTERMOST_URL MATTERMOST_TOKEN \ MATTERMOST_TEAM_ID APP_ADMIN_USERNAME APP_ADMIN_PASSWORD; do if [ -z "${!v:-}" ]; then echo "필수 환경변수가 비어 있습니다: $v ($ENV_FILE 확인)" >&2 exit 1 fi done # 서버 시간대가 UTC면 업무단계 도달 일시, 칸반의 D+n, 연락 이력 날짜가 9시간 어긋난다. export TZ="${TZ:-Asia/Seoul}" # 앱 기본 포트는 application.yml에 8877로 고정되어 있다. 필요하면 env 파일에서 바꾼다. export SERVER_PORT="${SERVER_PORT:-8877}" JAVA_OPTS="${JAVA_OPTS:--Xms512m -Xmx1g -Duser.timezone=Asia/Seoul -Dfile.encoding=UTF-8}" # ── 중복 기동 방지 ─────────────────────────────────────────────────── if [ -f "$PID_FILE" ] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then echo "이미 실행 중입니다 (PID $(cat "$PID_FILE")). 먼저 stop.sh 를 실행하세요." >&2 exit 1 fi mkdir -p "$LOG_FILE_PATH" # ── 기동 ───────────────────────────────────────────────────────────── nohup "$JAVA_HOME_BIN/java" $JAVA_OPTS -jar "$DEPLOY_PATH/$FILE_NM" \ >> "$LOG_FILE_PATH/$LOG_FILE_NM" 2>&1 & echo $! > "$PID_FILE" echo "기동 요청 완료 (PID $(cat "$PID_FILE"), 포트 $SERVER_PORT)" # ── 기동 확인 ──────────────────────────────────────────────────────── # actuator를 넣지 않아서 로그인 화면 200으로 확인한다. for _ in $(seq 1 60); do if curl -fs -o /dev/null "http://127.0.0.1:${SERVER_PORT}/login"; then echo "정상 기동 확인: http://127.0.0.1:${SERVER_PORT}/login" exit 0 fi sleep 1 done echo "60초 안에 응답이 없습니다. 로그를 확인하세요: $LOG_FILE_PATH/$LOG_FILE_NM" >&2 exit 1