# 시놀로지 도커 배포 가이드 ## 📦 포함/제외 파일 ### ✅ 도커 이미지에 포함되는 파일 ``` 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단계: 프로젝트 압축 ```bash # 프로젝트 루트에서 zip -r AutoCoinTrader.zip . -x "*.git*" "src/tests/*" "docs/*" "logs/*" "data/*" ``` **또는 필요한 파일만 선택:** ```bash 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단계: 도커 이미지 빌드 ```bash # 시놀로지 SSH 접속 후 cd /volume1/docker/AutoCoinTrader docker build -t autocointrader:latest . ``` ### 4단계: 컨테이너 실행 ```bash 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: 전체 재빌드 (권장) ```bash # 1. 새 코드 업로드 (src/ 폴더만) # 2. 기존 컨테이너 중지 및 삭제 docker stop autocointrader docker rm autocointrader # 3. 이미지 재빌드 docker build -t autocointrader:latest . # 4. 컨테이너 재시작 docker run -d ... (위와 동일) ``` ### 방법 2: 소스만 교체 (빠른 방법) ```bash # 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` 변경 시 재빌드 - [ ] 컨테이너 재시작 후 로그 확인 --- ## 🔍 디버깅 ### 로그 확인 ```bash # 실시간 로그 docker logs -f autocointrader # 최근 100줄 docker logs --tail 100 autocointrader ``` ### 컨테이너 내부 접속 ```bash docker exec -it autocointrader /bin/bash ls -la /app/src/ ``` ### 파일 크기 확인 (테스트 파일 제외 확인) ```bash # 도커 이미지 크기 docker images autocointrader # 컨테이너 내부 파일 확인 docker exec autocointrader du -sh /app/* ``` --- ## 💡 최적화 팁 ### 이미지 크기 줄이기 현재 `.dockerignore`로 자동 제외: - `src/tests/` (약 50KB) - `docs/` (약 300KB) - `*.pyc`, `__pycache__/` (약 1-5MB) - `.git/` (약 10-50MB) **예상 효과:** 약 50-60MB 절약 ### 빌드 속도 향상 ```dockerfile # requirements.txt만 먼저 복사 → 캐시 활용 COPY requirements.txt . RUN pip install -r requirements.txt # 소스 코드는 나중에 복사 COPY . /app ``` --- ## 📞 문제 해결 ### Q: src/tests/ 폴더가 컨테이너에 있나요? ```bash docker exec autocointrader ls -la /app/src/tests/ # 결과: No such file or directory ✓ ``` ### Q: 업데이트 후 이전 코드가 실행됩니다 → 도커 빌드 캐시 문제. 강제 재빌드: ```bash docker build --no-cache -t autocointrader:latest . ``` ### Q: 컨테이너가 즉시 종료됩니다 → 환경 변수 확인: ```bash docker logs autocointrader # [ERROR] API 키가 설정되지 않았습니다... ``` --- **최종 답변:** ✅ **네, `src/tests/` 폴더는 프로덕션 배포 시 업데이트하지 않아도 됩니다.** `.dockerignore` 파일이 자동으로 제외하며, 도커 이미지 크기와 빌드 속도가 최적화됩니다.