Files

40 lines
2.0 KiB
Bash

#!/usr/bin/env bash
# CodeAssist 도커 배포 — 우리 환경용. 이거 하나면 됨. (ABAP_OPENCODE web/deploy/deploy.sh 와 같은 명령 모양)
#
# ./deploy.sh 빌드 + 기동 (떠 있으면 갱신)
# ./deploy.sh update git pull 까지 하고 갱신
# ./deploy.sh stop 종료 (데이터 볼륨은 남음)
# ./deploy.sh logs 로그
# ./deploy.sh status 상태
#
# 전제: 이 폴더에 .env (cp .env.example .env 후 채움)
set -euo pipefail
HERE="$(cd "$(dirname "$0")" && pwd)"; cd "$HERE"
CMD="${1:-up}"
command -v docker >/dev/null || { echo "docker 없음"; exit 1; }
docker compose version >/dev/null 2>&1 || { echo "docker compose v2 없음"; exit 1; }
[ -f .env ] || { echo ".env 없음 — cp .env.example .env 후 채워"; exit 1; }
set -a; . ./.env; set +a
PORT="${BE_PORT:-8080}"; BASE="http://localhost:${PORT}/api/v1"
case "$CMD" in
stop) docker compose down; echo "종료(볼륨 유지)"; exit 0 ;;
logs) docker compose logs -f --tail=100; exit 0 ;;
status) docker compose ps; curl -fsS -m 5 "$BASE/health" && echo || echo "헬스 응답 없음"; exit 0 ;;
update) git -C "$HERE/../../.." pull --ff-only || { echo "git pull 실패 — 로컬 변경 확인"; exit 1; } ;;
up) ;;
*) echo "모르는 명령: $CMD (up|update|stop|logs|status)"; exit 1 ;;
esac
[ -n "${OPENROUTER_API_KEY:-}${AAF_FABRIX_BASE_URL:-}" ] || { echo ".env 에 OPENROUTER_API_KEY(또는 AAF_FABRIX_*) 가 비어 있음"; exit 1; }
echo "-- 이미지 빌드 + 기동"
docker compose up -d --build
echo "-- 기동 확인(최대 2분)"
for _ in $(seq 1 60); do curl -fsS -m 3 "$BASE/health" >/dev/null 2>&1 && break; sleep 2; done
curl -fsS -m 5 "$BASE/health" || { echo "안 떴음 → ./deploy.sh logs"; docker compose ps; exit 1; }
echo
echo "-- OpenCode 설정(렌더 결과) 모델:"; grep -oE '"model": *"[^"]+"' ../../opencode/opencode.json || true
echo "-- 앱 주소: http://$(hostname -I 2>/dev/null | awk '{print $1}'):${PORT}/api/v1"