o2o-site-AEO/deploy.sh
Mina Choi f409c11624 feat(solution): 발행 워커·버전 관리와 예약·미리보기 정리
상시 프리렌더와 중복 예약 안내를 없애고, 검수된 발행 버전을 보존한다. 미리보기는 실제 렌더 완료까지 스피너를 표시한다.

사이트 81건, 발행·롤백·서치콘솔 45건, 프로세스 수명 3건 통과. 빌더·사이트 빌드 및 compose 설정 검증 통과.
2026-09-15 16:10:12 +09:00

41 lines
1.5 KiB
Bash
Executable File

#!/usr/bin/env bash
# 서버 변경과 꺼진 admin을 보존한다. 렌더러 배포도 기존 사이트를 재굽지 않는다.
set -euo pipefail
cd "$(dirname "$0")"
PULL=1
ONLY=0
TARGETS=()
for arg in "$@"; do
case "$arg" in
--no-pull) PULL=0 ;;
--only) ONLY=1 ;;
-h|--help) echo "사용법: ./deploy.sh [--no-pull] [--only] [서비스...]"; exit 0 ;;
-*) echo "모르는 옵션: $arg" >&2; exit 2 ;;
*) TARGETS+=("${arg#o2o-web4ai-}") ;;
esac
done
if [ "$PULL" = 1 ]; then
git diff --quiet && git diff --cached --quiet || { echo "서버 변경을 먼저 정리하세요" >&2; exit 1; }
git pull --ff-only origin "${DEPLOY_BRANCH:-main}"
fi
[ ${#TARGETS[@]} -gt 0 ] || TARGETS=(solution-backend solution-worker solution-site)
RUNNING=$(docker compose ps --services --status running)
if [ "$ONLY" = 0 ]; then
case " ${TARGETS[*]} " in
*" solution-backend "*|*" solution-worker "*)
TARGETS+=(solution-backend solution-worker)
if grep -qx admin-backend <<<"$RUNNING"; then TARGETS+=(admin-backend); fi ;;
esac
fi
SERVICES=()
for target in "${TARGETS[@]}"; do
case " ${SERVICES[*]-} " in *" $target "*) ;; *) SERVICES+=("$target");; esac
done
# site의 렌더러도 worker 이미지에 들어간다.
case " ${SERVICES[*]} " in
*" solution-site "*) case " ${SERVICES[*]} " in *" solution-worker "*) ;; *) SERVICES+=(solution-worker);; esac ;;
esac
docker compose build "${SERVICES[@]}"
docker compose up -d --no-deps --force-recreate "${SERVICES[@]}"
docker compose ps