수집한 객실·이용 정보가 발행 화면에 연결되지 않던 경로를 보완하고, 숙소 소개와 지역 맛집 표시를 개선한다. - NOL 브라우저 수집 어댑터와 수집·반영 스크립트 추가 - 크롤링 fact 즉시 노출 및 직접 입력·정정값 보호 - 이용안내 항목별 구조화와 기존 표 연결, 원문 UI 비표시 - 군산 한일옥 고정 등록과 지역 맛집 탐색·보강 경로 추가 - 숙소 소개 요약, 히어로 문구, 지역 콘텐츠·목업 표시 개선 검증: 작업 트리 기준 site 타입·린트·빌드 및 안내 렌더링 테스트 통과, PC·모바일 화면 확인. 스테이징 diff 공백 검사 통과. 사용자 요청에 따라 현재 스테이징된 55개 파일만 포함하며 미스테이징 문서·테스트 등은 제외.
45 lines
2.3 KiB
Docker
45 lines
2.3 KiB
Docker
# o2o-web4ai 백엔드 이미지 — 세 프로세스가 **같은 이미지**를 공유하고 command 로만 갈린다.
|
|
# 사장님 API : python web_main.py (:9800)
|
|
# 내부 API : python main.py (:9801, working_dir=/app/admin/backend)
|
|
# 워커 : python worker_main.py (수집·비전분석·빌드 잡, 포트 없음)
|
|
#
|
|
# ★ 빌드 컨텍스트가 **레포 루트**다(./solution/backend 가 아니다).
|
|
# 내부 API 진입점이 admin/backend 에 있고 도메인 코드는 solution/backend 에 있어서,
|
|
# 한 이미지에 둘 다 들어와야 한다. 나누면 requirements 를 두 번 설치하게 된다.
|
|
#
|
|
# 시크릿은 이미지에 굽지 않는다 — config 는 example(플레이스홀더)로 대체되고,
|
|
# 실제 값은 compose 의 env 로 주입된다(server_configs override).
|
|
FROM python:3.12-slim
|
|
|
|
WORKDIR /app
|
|
|
|
# 의존성 먼저 설치 (레이어 캐시 활용)
|
|
COPY solution/backend/requirements.txt .
|
|
RUN pip install --no-cache-dir -r requirements.txt
|
|
# ★ yanolja_adapter.py 가 Playwright 로 페이지를 렌더링한다 — 패키지(pip)만으로는
|
|
# 브라우저 실행 파일이 없다. --with-deps 가 Chromium 이 필요로 하는 시스템 라이브러리
|
|
# (libnss3 등)까지 apt 로 같이 깐다. 세 프로세스(웹·admin·워커)가 이 이미지 하나를
|
|
# 공유하므로 실제로 fetch() 를 호출하는 건 워커뿐이어도 여기서 한 번만 설치한다.
|
|
RUN playwright install --with-deps chromium
|
|
|
|
COPY solution/backend ./solution/backend
|
|
COPY admin/backend ./admin/backend
|
|
|
|
|
|
ENV APP_ENV=local
|
|
# ★ 내부 API(admin/backend)가 common·router·services 를 그대로 import 하는 경로.
|
|
# 도메인 코드를 복제하지 않는 대신 이 한 줄이 두 폴더를 잇는다.
|
|
ENV PYTHONPATH=/app/solution/backend
|
|
|
|
# 기본은 사장님 API. 내부 API·워커는 compose 가 working_dir·command 를 갈아끼운다.
|
|
WORKDIR /app/solution/backend
|
|
|
|
EXPOSE 9800
|
|
|
|
# 사장님 API 컨테이너용. 워커는 포트가 없어 이 체크를 끄고, 내부 API 는 :9801 로 다시 건다
|
|
# (둘 다 compose 에서 override).
|
|
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:9800/healthz', timeout=4).status==200 else 1)"
|
|
|
|
CMD ["python", "web_main.py"]
|