From fa6ef6c5c8cfd70033d0a84db719542e7ae88b5c Mon Sep 17 00:00:00 2001 From: gahusb Date: Fri, 3 Jul 2026 01:48:14 +0900 Subject: [PATCH] =?UTF-8?q?feat(trade-monitor):=20Dockerfile=20+=20compose?= =?UTF-8?q?=20=EC=84=9C=EB=B9=84=EC=8A=A4(18715)=20+=20.env.example?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/docker-compose.yml | 25 +++++++++++++++++++++++++ services/trade-monitor/.env.example | 18 ++++++++++++++++++ services/trade-monitor/Dockerfile | 19 +++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 services/trade-monitor/.env.example create mode 100644 services/trade-monitor/Dockerfile diff --git a/services/docker-compose.yml b/services/docker-compose.yml index 18bf4e8..9ddec55 100644 --- a/services/docker-compose.yml +++ b/services/docker-compose.yml @@ -127,3 +127,28 @@ services: interval: 60s timeout: 5s retries: 3 + + trade-monitor: + build: + context: . + dockerfile: trade-monitor/Dockerfile + container_name: trade-monitor + restart: unless-stopped + ports: + - "18715:8000" + environment: + - TZ=Asia/Seoul + - REDIS_URL=${REDIS_URL:-redis://192.168.45.54:6379} + - NAS_BASE_URL=${NAS_BASE_URL:-http://192.168.45.54:18500} + - WEBAI_API_KEY=${WEBAI_API_KEY:-} + - TM_KIS_APP_KEY=${TM_KIS_APP_KEY:-} + - TM_KIS_APP_SECRET=${TM_KIS_APP_SECRET:-} + - TM_KIS_ACCOUNT=${TM_KIS_ACCOUNT:-} + - TM_KIS_IS_VIRTUAL=${TM_KIS_IS_VIRTUAL:-0} + - TM_LOOP_INTERVAL=${TM_LOOP_INTERVAL:-60} + - TM_CLIMAX_VOL_MULT=${TM_CLIMAX_VOL_MULT:-3.0} + healthcheck: + test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"] + interval: 60s + timeout: 5s + retries: 3 diff --git a/services/trade-monitor/.env.example b/services/trade-monitor/.env.example new file mode 100644 index 0000000..b93a8ea --- /dev/null +++ b/services/trade-monitor/.env.example @@ -0,0 +1,18 @@ +# Plan-realtime-trade-alerts — trade-monitor + +# NAS Redis (heartbeat) +REDIS_URL=redis://192.168.45.54:6379 + +# NAS stock 백엔드 (monitor-set / report) +NAS_BASE_URL=http://192.168.45.54:18500 +WEBAI_API_KEY= + +# KIS 자체 토큰 (ai_trade와 분리된 전용 app_key) +TM_KIS_APP_KEY= +TM_KIS_APP_SECRET= +TM_KIS_ACCOUNT= +TM_KIS_IS_VIRTUAL=0 + +# 루프 주기(초) / sell_climax 거래량 배수 임계 +TM_LOOP_INTERVAL=60 +TM_CLIMAX_VOL_MULT=3.0 diff --git a/services/trade-monitor/Dockerfile b/services/trade-monitor/Dockerfile new file mode 100644 index 0000000..aae9ded --- /dev/null +++ b/services/trade-monitor/Dockerfile @@ -0,0 +1,19 @@ +FROM python:3.12-slim-bookworm +ENV PYTHONUNBUFFERED=1 + +WORKDIR /app + +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates tzdata \ + && rm -rf /var/lib/apt/lists/* + +COPY trade-monitor/requirements.txt /app/ +RUN pip install --no-cache-dir --timeout 600 --retries 5 -r requirements.txt + +# 공통 heartbeat 모듈 (services/_shared) — main.py가 from _shared.heartbeat import +COPY _shared /app/_shared +COPY trade-monitor/. /app/ +ENV PYTHONPATH=/app + +EXPOSE 8000 +CMD ["python", "-m", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "1"]