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

241 lines
5.5 KiB
Markdown

# 시놀로지 도커 배포 가이드
## 📦 포함/제외 파일
### ✅ 도커 이미지에 포함되는 파일
```
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` 파일이 자동으로 제외하며, 도커 이미지 크기와 빌드 속도가 최적화됩니다.