다른 개발자가 어느 환경이든 같은 방식으로 띄울 수 있게 한다.
환경 = APP_ENV 가 고르는 config.<env>.toml 하나(구조 동일, 값만 다름).
- config.docker.toml → config.dev.toml 개명, config.prod.toml.example 신설
(prod 성격 반영: api_keys 필수 표기·debug 로그 금지·웹훅 권장).
- compose 의 lps 서비스 APP_ENV/마운트를 ${APP_ENV:-dev} 로 파라미터화,
API 포트를 ${LPS_API_BIND:-0.0.0.0} 바인드로 노출 제어.
- run_docker.sh(대화형) 신설: 환경 선택 → 설정 파일 검증(없으면 example
복사 제안) → 기동/재시작/중지/로그. prod 는 guard 키 비면 경고 후
확인받고, LPS_API_BIND=127.0.0.1 자동 설정(외부는 리버스프록시 경유).
- 운영 가이드에 환경 개요 표, README 빠른 시작에 Docker 실행 추가.
- 검증: 스크립트 문법·compose(dev/prod) 파싱·APP_ENV=dev 로딩·145 passed.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
50 lines
2.3 KiB
Bash
Executable File
50 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# LPS Docker 실행(대화형) — dev/prod 환경을 골라 lps-api/lps-worker 를 관리한다.
|
|
# 환경 = APP_ENV 가 고르는 config.<env>.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
|