5.5 KiB
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단계: 시놀로지 업로드
- File Station →
/docker/AutoCoinTrader/폴더 생성 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 파일이 자동으로 제외하며, 도커 이미지 크기와 빌드 속도가 최적화됩니다.