Files
goldenChart/server-restart.sh
2026-06-08 15:25:44 +09:00

93 lines
2.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# GoldenChart — 소스 push 없이 서버 deploy.sh만 실행 (재배포)
#
# 사용:
# ./server-restart.sh
# ./server-restart.sh --frontend
# ./server-restart.sh --backend
# SERVICE_NAME=docker-only ./server-restart.sh
#
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$ROOT"
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m'
# shellcheck disable=SC1091
source "$ROOT/scripts/deploy-target.defaults"
if [[ -f "$ROOT/scripts/deploy-target.local.env" ]]; then
# shellcheck disable=SC1091
source "$ROOT/scripts/deploy-target.local.env"
fi
REMOTE_HOST="${REMOTE_HOST:-exdev.co.kr}"
REMOTE_USER="${REMOTE_USER:-aidev}"
REMOTE_PORT="${REMOTE_PORT:-22}"
REMOTE_DEPLOY_SCRIPT="${REMOTE_DEPLOY_SCRIPT:-/Volumes/ADATA/git/deploy.sh}"
SERVICE_NAME="${SERVICE_NAME:-all}"
SSH_TARGET="${REMOTE_USER}@${REMOTE_HOST}"
SSH_CMD=(ssh -o StrictHostKeyChecking=no -o IdentitiesOnly=yes -p "$REMOTE_PORT")
print_usage() {
cat <<EOF
사용법: $0 [옵션]
(기본) git push 없이 서버 deploy.sh 실행 (전체 재배포)
--frontend SERVICE_NAME=frontend
--backend SERVICE_NAME=backend
--docker-only SERVICE_NAME=docker-only (이미지 빌드 생략, compose up)
--service NAME SERVICE_NAME=NAME
--host HOST SSH 호스트 (기본: $REMOTE_HOST)
--user USER SSH 사용자 (기본: $REMOTE_USER)
--script PATH 서버 deploy.sh 경로 (기본: $REMOTE_DEPLOY_SCRIPT)
-h, --help 도움말
실행 명령 (내부):
ssh ${SSH_TARGET} 'SERVICE_NAME=... ${REMOTE_DEPLOY_SCRIPT}'
설정: scripts/deploy-target.defaults
scripts/deploy-target.local.env (선택)
EOF
}
while [[ $# -gt 0 ]]; do
case "$1" in
--frontend) SERVICE_NAME=frontend; shift ;;
--backend) SERVICE_NAME=backend; shift ;;
--docker-only) SERVICE_NAME=docker-only; shift ;;
--service) SERVICE_NAME="$2"; shift 2 ;;
--host) REMOTE_HOST="$2"; SSH_TARGET="${REMOTE_USER}@${REMOTE_HOST}"; shift 2 ;;
--user) REMOTE_USER="$2"; SSH_TARGET="${REMOTE_USER}@${REMOTE_HOST}"; shift 2 ;;
--script) REMOTE_DEPLOY_SCRIPT="$2"; shift 2 ;;
-h|--help) print_usage; exit 0 ;;
*)
echo -e "${RED}알 수 없는 옵션: $1${NC}" >&2
print_usage
exit 1
;;
esac
done
echo -e "${CYAN}▶ 서버 재배포 (push 없음)${NC}"
echo -e " 대상 : ${SSH_TARGET}"
echo -e " 스크립트: ${REMOTE_DEPLOY_SCRIPT}"
echo -e " 서비스 : ${SERVICE_NAME}"
echo ""
REMOTE_CMD="SERVICE_NAME=${SERVICE_NAME} ${REMOTE_DEPLOY_SCRIPT}"
if "${SSH_CMD[@]}" "$SSH_TARGET" "$REMOTE_CMD"; then
echo ""
echo -e "${GREEN}✓ deploy.sh 완료${NC}"
echo -e "${YELLOW}로그: ssh ${SSH_TARGET} 'tail -50 /Volumes/ADATA/logs/deploy/deploy.log'${NC}"
else
echo ""
echo -e "${RED}✗ deploy.sh 실패${NC}" >&2
exit 1
fi