Initial commit: import from sinmb79/Gov-chat-bot
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+180
@@ -0,0 +1,180 @@
|
||||
#!/usr/bin/env bash
|
||||
# =============================================================================
|
||||
# GovBot KR — 자동 설치 스크립트 v1.0
|
||||
# 지원 OS: Ubuntu 20.04+, Debian 11+, macOS 13+
|
||||
# 필요 권한: sudo (Docker 설치 시)
|
||||
# 사용법: curl -fsSL https://raw.githubusercontent.com/22blabs/govbot-kr/main/install.sh | bash
|
||||
# 또는: chmod +x install.sh && ./install.sh
|
||||
# =============================================================================
|
||||
set -euo pipefail
|
||||
|
||||
BOLD='\033[1m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
RED='\033[0;31m'
|
||||
NC='\033[0m'
|
||||
|
||||
info() { echo -e "${GREEN}[INFO]${NC} $*"; }
|
||||
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
|
||||
error() { echo -e "${RED}[ERROR]${NC} $*" >&2; exit 1; }
|
||||
step() { echo -e "\n${BOLD}==> $*${NC}"; }
|
||||
|
||||
GOVBOT_DIR="${GOVBOT_DIR:-$HOME/govbot-kr}"
|
||||
GOVBOT_VERSION="${GOVBOT_VERSION:-latest}"
|
||||
|
||||
# ─── 환경 확인 ───────────────────────────────────────────────────────────────
|
||||
step "환경 확인"
|
||||
|
||||
OS=$(uname -s)
|
||||
ARCH=$(uname -m)
|
||||
info "OS: $OS / ARCH: $ARCH"
|
||||
|
||||
if [[ "$OS" != "Linux" && "$OS" != "Darwin" ]]; then
|
||||
error "지원하지 않는 OS입니다. Linux 또는 macOS가 필요합니다.\nWindows는 WSL2를 사용하세요: docs/WSL2_가이드.md"
|
||||
fi
|
||||
|
||||
# ─── Docker 확인 / 설치 ───────────────────────────────────────────────────────
|
||||
step "Docker 확인"
|
||||
|
||||
if command -v docker &>/dev/null; then
|
||||
DOCKER_VER=$(docker --version | grep -oE '[0-9]+\.[0-9]+' | head -1)
|
||||
info "Docker $DOCKER_VER 감지됨"
|
||||
else
|
||||
warn "Docker가 설치되어 있지 않습니다. 설치를 시작합니다..."
|
||||
if [[ "$OS" == "Linux" ]]; then
|
||||
curl -fsSL https://get.docker.com | sudo sh
|
||||
sudo usermod -aG docker "$USER"
|
||||
info "Docker 설치 완료. 이 터미널을 닫고 다시 열어주세요 (docker 그룹 적용)."
|
||||
else
|
||||
error "macOS에서는 Docker Desktop을 수동으로 설치해주세요: https://www.docker.com/products/docker-desktop/"
|
||||
fi
|
||||
fi
|
||||
|
||||
if ! command -v docker compose &>/dev/null && ! command -v docker-compose &>/dev/null; then
|
||||
warn "Docker Compose가 없습니다. Docker Desktop 또는 최신 Docker Engine을 설치하세요."
|
||||
fi
|
||||
|
||||
# ─── 프로젝트 디렉터리 ────────────────────────────────────────────────────────
|
||||
step "프로젝트 디렉터리: $GOVBOT_DIR"
|
||||
|
||||
if [[ -d "$GOVBOT_DIR" ]]; then
|
||||
warn "디렉터리가 이미 존재합니다: $GOVBOT_DIR"
|
||||
read -rp "계속 진행하시겠습니까? 기존 설정은 유지됩니다. [y/N] " answer
|
||||
[[ "$answer" =~ ^[Yy]$ ]] || error "설치를 취소했습니다."
|
||||
else
|
||||
mkdir -p "$GOVBOT_DIR"
|
||||
info "디렉터리 생성: $GOVBOT_DIR"
|
||||
fi
|
||||
|
||||
cd "$GOVBOT_DIR"
|
||||
|
||||
# ─── .env 파일 생성 ───────────────────────────────────────────────────────────
|
||||
step ".env 설정 파일 생성"
|
||||
|
||||
if [[ -f ".env" ]]; then
|
||||
warn ".env 파일이 이미 존재합니다. 덮어쓰지 않습니다."
|
||||
else
|
||||
SECRET_KEY=$(python3 -c "import secrets; print(secrets.token_hex(32))" 2>/dev/null \
|
||||
|| openssl rand -hex 32 2>/dev/null \
|
||||
|| echo "change-this-secret-key-before-production")
|
||||
|
||||
cat > .env << EOF
|
||||
# GovBot KR 환경 설정
|
||||
# 생성일: $(date +%Y-%m-%d)
|
||||
|
||||
# ── 데이터베이스 ──────────────────────────────────────
|
||||
DATABASE_URL=postgresql+asyncpg://govbot:govbot@db:5432/govbot
|
||||
|
||||
# ── Redis ────────────────────────────────────────────
|
||||
REDIS_URL=redis://redis:6379/0
|
||||
|
||||
# ── ChromaDB ─────────────────────────────────────────
|
||||
CHROMA_HOST=chromadb
|
||||
CHROMA_PORT=8001
|
||||
|
||||
# ── 보안 ─────────────────────────────────────────────
|
||||
SECRET_KEY=${SECRET_KEY}
|
||||
|
||||
# ── LLM (선택) ───────────────────────────────────────
|
||||
# LLM_PROVIDER=none # 기본값: LLM 없이 FAQ+RAG만 사용
|
||||
# LLM_PROVIDER=anthropic
|
||||
# ANTHROPIC_API_KEY=sk-ant-...
|
||||
# LLM_PROVIDER=openai
|
||||
# OPENAI_API_KEY=sk-...
|
||||
|
||||
# ── 로그 ─────────────────────────────────────────────
|
||||
LOG_LEVEL=INFO
|
||||
EOF
|
||||
|
||||
info ".env 파일 생성 완료"
|
||||
warn "⚠️ SECRET_KEY가 자동 생성되었습니다. 안전하게 보관하세요."
|
||||
fi
|
||||
|
||||
# ─── docker-compose.yml 다운로드 ─────────────────────────────────────────────
|
||||
step "docker-compose.yml 확인"
|
||||
|
||||
if [[ ! -f "docker-compose.yml" ]]; then
|
||||
# 소스에서 직접 실행 시: 현재 디렉터리의 파일 사용
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
if [[ -f "$SCRIPT_DIR/docker-compose.yml" ]]; then
|
||||
cp "$SCRIPT_DIR/docker-compose.yml" .
|
||||
cp -r "$SCRIPT_DIR/backend" . 2>/dev/null || true
|
||||
info "소스 파일 복사 완료"
|
||||
else
|
||||
error "docker-compose.yml을 찾을 수 없습니다.\nGovBot KR 소스 디렉터리에서 install.sh를 실행해주세요."
|
||||
fi
|
||||
fi
|
||||
|
||||
# ─── 서비스 시작 ──────────────────────────────────────────────────────────────
|
||||
step "Docker 서비스 시작"
|
||||
|
||||
COMPOSE_CMD="docker compose"
|
||||
command -v "docker compose" &>/dev/null || COMPOSE_CMD="docker-compose"
|
||||
|
||||
info "이미지 빌드 중... (첫 실행 시 5~10분 소요)"
|
||||
$COMPOSE_CMD build --quiet
|
||||
|
||||
info "서비스 시작 중..."
|
||||
$COMPOSE_CMD up -d
|
||||
|
||||
# ─── DB 마이그레이션 ──────────────────────────────────────────────────────────
|
||||
step "데이터베이스 마이그레이션"
|
||||
|
||||
info "DB 초기화 대기 중..."
|
||||
sleep 5
|
||||
|
||||
$COMPOSE_CMD exec -T backend alembic upgrade head && \
|
||||
info "마이그레이션 완료" || \
|
||||
warn "마이그레이션 실패. 수동으로 실행하세요: docker compose exec backend alembic upgrade head"
|
||||
|
||||
# ─── 헬스 체크 ────────────────────────────────────────────────────────────────
|
||||
step "서비스 상태 확인"
|
||||
|
||||
sleep 3
|
||||
HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8000/health 2>/dev/null || echo "000")
|
||||
|
||||
if [[ "$HTTP_STATUS" == "200" ]]; then
|
||||
info "✅ 서비스 정상 동작 확인"
|
||||
else
|
||||
warn "헬스 체크 응답: $HTTP_STATUS (서비스 시작 중일 수 있습니다)"
|
||||
fi
|
||||
|
||||
# ─── 완료 메시지 ──────────────────────────────────────────────────────────────
|
||||
echo ""
|
||||
echo -e "${BOLD}${GREEN}================================================"
|
||||
echo -e " GovBot KR 설치 완료!"
|
||||
echo -e "================================================${NC}"
|
||||
echo ""
|
||||
echo -e " API 서버: http://localhost:8000"
|
||||
echo -e " API 문서: http://localhost:8000/docs"
|
||||
echo -e " 헬스 체크: http://localhost:8000/health"
|
||||
echo ""
|
||||
echo -e " 다음 단계:"
|
||||
echo -e " 1. 관리자 계정 생성:"
|
||||
echo -e " ${BOLD}docker compose exec backend python -m app.scripts.create_admin${NC}"
|
||||
echo -e ""
|
||||
echo -e " 2. 대시보드 접속 (프론트엔드 빌드 후):"
|
||||
echo -e " http://localhost:3000"
|
||||
echo ""
|
||||
echo -e " 운영 가이드: docs/운영가이드.md"
|
||||
echo ""
|
||||
Reference in New Issue
Block a user