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"]