#!/usr/bin/env bash # LPS Docker 실행(대화형) — lps-api/lps-worker/lps-admin 을 관리한다. # 환경 구분 없음(도메인 backend·negodata·agent 와 동일): 항상 config.local.toml. # 어느 서버든 그 서버의 config.local.toml 값으로 뜬다 — prod 서버엔 prod 값을 채워두면 그만. # 호스트(비도커) 실행은 run_local_server.sh / run_local_worker.sh 를 사용. set -euo pipefail cd "$(dirname "$0")/.." # 리포 루트(docker-compose.yml 위치) echo "── LPS Docker 실행 ──" CFG="lps/config/config.local.toml" if [[ ! -f "$CFG" ]]; then echo "[warn] $CFG 가 없습니다 (시크릿 포함, 미커밋 — 서버마다 직접 준비)." read -rp "example 을 복사해 생성할까요? [Y/n] " yn if [[ "${yn:-Y}" =~ ^[Yy] ]]; then cp "lps/config/config.local.toml.example" "$CFG" echo "[ok] $CFG 생성 — DB 접속·API 키 등 값을 채운 뒤 다시 실행하세요." fi exit 0 fi # prod 서버 안전 점검: guard 키가 비어 있으면 API 가 개방 모드로 뜬다 — 명시적 확인. if grep -qE '^\s*api_keys\s*=\s*\[\s*\]' "$CFG"; then echo "[warn] [WebServerConfig].api_keys 가 비어 있습니다 → API 개방 모드(무인증). prod 라면 키를 채우세요." read -rp "그래도 계속할까요? [y/N] " go [[ "${go:-N}" =~ ^[Yy] ]] || { echo "중단합니다."; exit 1; } fi # 운영(리버스프록시 뒤)에서 API 를 외부에 열지 않으려면 실행 전에: export LPS_API_BIND=127.0.0.1 echo "" echo "설정: $CFG · API 바인드: ${LPS_API_BIND:-0.0.0.0}" read -rp "동작 선택 [1] 시작/재빌드(기본) [2] 재시작 [3] 중지 [4] 로그 : " act case "${act:-1}" in 1) docker compose up -d --build lps-api lps-worker lps-admin autoheal echo "[ok] 기동 — admin: http://localhost:3400 · 로그의 'API guard ON/개방 모드' · 'DECODO 프리플라이트' 확인: docker compose logs -f lps-api lps-worker lps-admin" ;; 2) docker compose restart lps-api lps-worker lps-admin ;; 3) docker compose stop lps-api lps-worker lps-admin ;; 4) docker compose logs -f lps-api lps-worker lps-admin ;; *) echo "[error] 알 수 없는 선택: $act"; exit 1 ;; esac