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