#!/usr/bin/env bash # 고객사 -12 배포 — git pull 뒤 이 폴더에서: bash deploy.sh # .env 새 키 채움 → migrate → 시드 import(seed/snippets.db 있을 때) → OpenCode 설정 렌더 → 재시작 → 확인 set -euo pipefail cd "$(dirname "$0")" export PYTHONUTF8=1 # 필수 키 비어 있으면 여기서 멈춤 — 비어 있는 채로 띄우면 채팅 때 "누락" 에러가 나서 원인 찾기 어려움 for k in AAF_FABRIX_BASE_URL AAF_FABRIX_CLIENT_KEY AAF_FABRIX_OPENAPI_TOKEN DB_HOST; do grep -qE "^$k=.+" .env || { echo "!! .env 에 $k 가 비어 있음 — 채우고 다시"; exit 1; } done # .env 에 새 키 없으면 추가(있으면 그대로) grep -q '^AAF_FABRIX_VISION_MODEL_ID=' .env || echo 'AAF_FABRIX_VISION_MODEL_ID=605' >> .env grep -q '^DB_SSLMODE=' .env || echo 'DB_SSLMODE=disable' >> .env grep -q '^STREAM_FIRST_EVENT_TIMEOUT_S=' .env || echo 'STREAM_FIRST_EVENT_TIMEOUT_S=300' >> .env grep -q '^AAF_FABRIX_READ_TIMEOUT_S=' .env || echo 'AAF_FABRIX_READ_TIMEOUT_S=300' >> .env grep -q '^ABAP_INDEX_URL=' .env || echo 'ABAP_INDEX_URL=http://127.0.0.1:8100' >> .env grep -q '^BACKEND_PORT=' .env || echo 'BACKEND_PORT=8080' >> .env # OpenCode 가 붙을 Django 포트. 없으면 8001 로 렌더돼 'Unable to connect' sed -i 's/^AAF_FABRIX_MODEL_ID=.*/AAF_FABRIX_MODEL_ID=339/; s/^AAF_FABRIX_MODELS=.*/AAF_FABRIX_MODELS=339:GaussO Flash,581:GaussO Think,605:Gemma4/' .env .venv/bin/python manage.py migrate --noinput [ -f seed/snippets.db ] && .venv/bin/python manage.py import_snippets seed/snippets.db .venv/bin/python opencode/render_opencode.py pkill -f "opencode-bin serve" || true; pkill -f "uvicorn config.asgi" || true; sleep 1 mkdir -p logs (cd opencode && nohup /www/opencode-bin serve --hostname 127.0.0.1 --port 4096 > ../logs/opencode.log 2>&1 &) nohup .venv/bin/uvicorn config.asgi:application --host 0.0.0.0 --port 8080 > logs/django.log 2>&1 & sleep 4 echo "--- health"; curl -s http://127.0.0.1:8080/api/v1/health | head -c 80; echo echo "--- models"; curl -s http://127.0.0.1:8080/api/ito/models | head -c 120; echo echo "--- tools (abap_index 3개면 OK)"; curl -s "http://127.0.0.1:4096/experimental/tool/ids?directory=$(pwd)/opencode" | tr ',' '\n' | grep -c abap_index || true