Files
AutoCoinTrader/docs/synology_docker_deployment.md
2025-12-09 21:39:23 +09:00

5.5 KiB

시놀로지 도커 배포 가이드

📦 포함/제외 파일

도커 이미지에 포함되는 파일

main.py
src/
  ├── __init__.py
  ├── common.py
  ├── config.py
  ├── holdings.py
  ├── indicators.py
  ├── notifications.py
  ├── order.py
  ├── signals.py
  ├── threading_utils.py
  ├── retry_utils.py
  └── circuit_breaker.py
config/
  ├── config.json
  └── symbols.txt
requirements.txt
Dockerfile
README.md (참고용)

도커 이미지에서 제외되는 파일 (.dockerignore)

src/tests/           ← 테스트 파일 (불필요)
docs/                ← 문서 파일 (불필요)
logs/                ← 로그 (볼륨 마운트로 관리)
data/                ← 데이터 (볼륨 마운트로 관리)
.git/                ← Git 히스토리
.env                 ← 환경 변수 (컨테이너 설정에서 직접 입력)
*.pyc, __pycache__/  ← Python 캐시
*.md (README 제외)   ← 문서

🚀 시놀로지 도커 배포 방법

1단계: 프로젝트 압축

# 프로젝트 루트에서
zip -r AutoCoinTrader.zip . -x "*.git*" "src/tests/*" "docs/*" "logs/*" "data/*"

또는 필요한 파일만 선택:

zip AutoCoinTrader.zip \
  main.py \
  requirements.txt \
  Dockerfile \
  .dockerignore \
  README.md \
  -r src/ config/ \
  -x "src/tests/*" "src/__pycache__/*"

2단계: 시놀로지 업로드

  1. File Station/docker/AutoCoinTrader/ 폴더 생성
  2. AutoCoinTrader.zip 업로드 후 압축 해제

3단계: 도커 이미지 빌드

# 시놀로지 SSH 접속 후
cd /volume1/docker/AutoCoinTrader
docker build -t autocointrader:latest .

4단계: 컨테이너 실행

docker run -d \
  --name autocointrader \
  --restart unless-stopped \
  -v /volume1/docker/AutoCoinTrader/data:/app/data \
  -v /volume1/docker/AutoCoinTrader/logs:/app/logs \
  -e UPBIT_ACCESS_KEY="your_access_key" \
  -e UPBIT_SECRET_KEY="your_secret_key" \
  -e TELEGRAM_BOT_TOKEN="your_bot_token" \
  -e TELEGRAM_CHAT_ID="your_chat_id" \
  autocointrader:latest

🔄 코드 업데이트 시

방법 1: 전체 재빌드 (권장)

# 1. 새 코드 업로드 (src/ 폴더만)
# 2. 기존 컨테이너 중지 및 삭제
docker stop autocointrader
docker rm autocointrader

# 3. 이미지 재빌드
docker build -t autocointrader:latest .

# 4. 컨테이너 재시작
docker run -d ... (위와 동일)

방법 2: 소스만 교체 (빠른 방법)

# 1. 컨테이너 중지
docker stop autocointrader

# 2. File Station에서 src/ 폴더 내용 교체
#    src/tests/ 폴더는 업로드하지 않음 ✓

# 3. 컨테이너 재시작
docker start autocointrader

⚠️ 주의:

  • requirements.txt 변경 시: 방법 1 (재빌드) 필수
  • 소스 코드만 변경 시: 방법 2 가능

📁 볼륨 마운트 구조

/volume1/docker/AutoCoinTrader/
├── main.py
├── src/
│   ├── common.py
│   ├── order.py
│   └── ...
├── config/
│   ├── config.json
│   └── symbols.txt
├── data/              ← 마운트 (컨테이너 외부)
│   ├── holdings.json
│   ├── trades.json
│   └── pending_orders.json
└── logs/              ← 마운트 (컨테이너 외부)
    └── AutoCoinTrader.log

체크리스트

초기 배포 시

  • .dockerignore 파일 존재 확인
  • src/tests/ 폴더 제외됨 확인
  • config/config.json 설정 완료
  • config/symbols.txt 심볼 목록 작성
  • 환경 변수 (API 키) 설정

코드 업데이트 시

  • src/tests/ 폴더는 업로드 안 함
  • docs/ 폴더는 업로드 안 함
  • main.py, src/*.py 파일만 교체
  • requirements.txt 변경 시 재빌드
  • 컨테이너 재시작 후 로그 확인

🔍 디버깅

로그 확인

# 실시간 로그
docker logs -f autocointrader

# 최근 100줄
docker logs --tail 100 autocointrader

컨테이너 내부 접속

docker exec -it autocointrader /bin/bash
ls -la /app/src/

파일 크기 확인 (테스트 파일 제외 확인)

# 도커 이미지 크기
docker images autocointrader

# 컨테이너 내부 파일 확인
docker exec autocointrader du -sh /app/*

💡 최적화 팁

이미지 크기 줄이기

현재 .dockerignore로 자동 제외:

  • src/tests/ (약 50KB)
  • docs/ (약 300KB)
  • *.pyc, __pycache__/ (약 1-5MB)
  • .git/ (약 10-50MB)

예상 효과: 약 50-60MB 절약

빌드 속도 향상

# requirements.txt만 먼저 복사 → 캐시 활용
COPY requirements.txt .
RUN pip install -r requirements.txt

# 소스 코드는 나중에 복사
COPY . /app

📞 문제 해결

Q: src/tests/ 폴더가 컨테이너에 있나요?

docker exec autocointrader ls -la /app/src/tests/
# 결과: No such file or directory ✓

Q: 업데이트 후 이전 코드가 실행됩니다

→ 도커 빌드 캐시 문제. 강제 재빌드:

docker build --no-cache -t autocointrader:latest .

Q: 컨테이너가 즉시 종료됩니다

→ 환경 변수 확인:

docker logs autocointrader
# [ERROR] API 키가 설정되지 않았습니다...

최종 답변: 네, src/tests/ 폴더는 프로덕션 배포 시 업데이트하지 않아도 됩니다.

.dockerignore 파일이 자동으로 제외하며, 도커 이미지 크기와 빌드 속도가 최적화됩니다.