#!/bin/bash # ============================================================ # GUARDiA Docker 폐쇄망 로드 스크립트 # ============================================================ # docker_package.sh 로 생성된 패키지를 폐쇄망 서버에서 로드합니다. # # 사용법: # tar -xzf guardia-docker-YYYYMMDD.tar.gz # cd guardia-docker-YYYYMMDD # bash docker_load.sh # bash docker_load.sh --start # 로드 후 즉시 서비스 시작 # ============================================================ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" START_AFTER="${1:-}" RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m' ok() { echo -e "${GREEN}[OK]${NC} $*"; } warn() { echo -e "${YELLOW}[WARN]${NC} $*"; } fail() { echo -e "${RED}[FAIL]${NC} $*"; exit 1; } info() { echo -e " $*"; } echo "==================================================" echo " GUARDiA Docker 폐쇄망 로드" echo " 디렉토리: $SCRIPT_DIR" echo "==================================================" # Docker 설치 확인 command -v docker &>/dev/null || fail "Docker가 설치되지 않았습니다. Docker Engine을 먼저 설치하세요." docker compose version &>/dev/null || fail "Docker Compose가 필요합니다. (docker compose 플러그인)" # ── 1. 버전 정보 확인 ─────────────────────────────────── if [[ -f "$SCRIPT_DIR/VERSION" ]]; then source "$SCRIPT_DIR/VERSION" echo " 패키지 버전: ${GUARDIA_VERSION:-unknown}" echo " 빌드 일자: ${BUILD_DATE:-unknown}" fi # ── 2. 이미지 로드 ────────────────────────────────────── echo "" echo "[1/4] Docker 이미지 로드..." # 메인 이미지 if [[ -f "$SCRIPT_DIR/images.tar.gz" ]]; then echo " 로드 중: images.tar.gz" docker load < "$SCRIPT_DIR/images.tar.gz" ok "메인 이미지 로드 완료" else fail "images.tar.gz 파일을 찾을 수 없습니다." fi # Ollama 이미지 if [[ -f "$SCRIPT_DIR/ollama.tar.gz" ]]; then echo " 로드 중: ollama.tar.gz (시간이 걸릴 수 있습니다...)" docker load < "$SCRIPT_DIR/ollama.tar.gz" ok "Ollama 이미지 로드 완료" else warn "ollama.tar.gz 없음 — Ollama 이미지 로드 건너뜀" fi # 로드된 이미지 목록 출력 echo "" echo " 로드된 이미지:" docker images | grep -E "guardia|postgres|redis|nginx|ollama|tomcat" | awk '{printf " %-40s %-15s %s\n", $1, $2, $7}' # ── 3. Ollama 모델 복사 ───────────────────────────────── echo "" echo "[2/4] Ollama 모델 설정..." MODELS_TAR="$SCRIPT_DIR/ollama-models/models.tar.gz" if [[ -f "$MODELS_TAR" ]]; then OLLAMA_DATA="${OLLAMA_DATA_DIR:-/var/lib/guardia/ollama}" mkdir -p "$OLLAMA_DATA" echo " 모델 압축 해제: $OLLAMA_DATA" tar -xzf "$MODELS_TAR" -C "$OLLAMA_DATA" ok "Ollama 모델 복사 완료: $OLLAMA_DATA" export OLLAMA_MODELS_PATH="$OLLAMA_DATA" else warn "Ollama 모델 파일 없음" warn " 방법 1: docker compose up -d ollama && docker exec guardia-ollama ollama pull llama3.1:8b" warn " 방법 2: 모델 파일을 수동으로 /var/lib/guardia/ollama/models 에 복사" fi # ── 4. 환경 파일 설정 ──────────────────────────────────── echo "" echo "[3/4] 환경 파일 설정..." ENV_FILE="$SCRIPT_DIR/.env" if [[ ! -f "$ENV_FILE" ]]; then cat > "$ENV_FILE" << 'ENVEOF' # GUARDiA Docker 환경 설정 # 운영 배포 전 반드시 아래 값을 변경하세요! SECRET_KEY=CHANGE_THIS_TO_RANDOM_32CHARS_MIN POSTGRES_PASSWORD=guardia_secure_pw GUARDIA_VERSION=latest GUARDIA_LLM_MODEL=llama3.1:8b # Ollama 모델 경로 (폐쇄망 복사 경로) OLLAMA_MODELS_PATH=/var/lib/guardia/ollama ENVEOF warn ".env 파일 생성됨 — SECRET_KEY를 반드시 변경하세요: $ENV_FILE" else info ".env 파일 이미 존재" fi # ── 5. 서비스 시작 ────────────────────────────────────── echo "" echo "[4/4] 서비스 준비 완료" if [[ "$START_AFTER" == "--start" ]]; then echo " 서비스 시작 중..." cd "$SCRIPT_DIR" docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d # 헬스체크 대기 echo " 서비스 기동 대기 (최대 60초)..." for i in $(seq 1 12); do sleep 5 if curl -sf http://localhost/ &>/dev/null; then ok "GUARDiA ITSM 서비스 정상 기동!" break fi echo " 대기 중... (${i}/12)" done echo "" echo " 서비스 상태:" docker compose ps else echo "" info "서비스 시작 명령어:" info " cd $SCRIPT_DIR" info " # .env 파일 편집 후:" info " docker compose up -d" info " # 또는 운영 모드:" info " docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d" info "" info " # 즉시 시작:" info " bash docker_load.sh --start" fi echo "" echo "==================================================" ok "Docker 로드 완료!" info "접속 URL: http://$(hostname -I | awk '{print $1}')" info "GUARDiA 로그: docker compose logs -f guardia" echo "=================================================="