# LPS API 서버 이미지 — 요청 접수/조회만(브라우저 불필요, lean). # 크롤은 별도 워커 이미지(Dockerfile.worker, Chromium+Xvfb)가 담당한다. # 시크릿은 이미지에 굽지 않는다 — config 는 example(플레이스홀더)로 대체되고, # 실제 값은 compose 의 env(DB_USER/DB_PASSWORD 등)로 주입된다(server_configs override). FROM python:3.14-slim WORKDIR /app # 의존성 먼저 설치 (레이어 캐시 활용) — API 전용 경량 세트 COPY requirements-api.txt . RUN pip install --no-cache-dir -r requirements-api.txt COPY . . # 시크릿 든 config.local.toml 은 .dockerignore 로 제외됨 → example(플레이스홀더)로 대체. # 실값은 env 주입: DB_HOST/DB_USER/DB_PASSWORD/DB_NAME, PROCESS_COUNT, DB_CONNECTION_BUDGET … RUN cp config/config.local.toml.example config/config.local.toml # 항상 APP_ENV=local 로 실행 → config.local.toml(=example 사본) + env override. ENV APP_ENV=local EXPOSE 9600 HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \ CMD python -c "import urllib.request,sys; sys.exit(0 if urllib.request.urlopen('http://127.0.0.1:9600/healthz', timeout=4).status==200 else 1)" CMD ["python", "web_main.py"]