93 lines
2.8 KiB
Bash
Executable File
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
|