241 lines
5.5 KiB
Markdown
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` 파일이 자동으로 제외하며, 도커 이미지 크기와 빌드 속도가 최적화됩니다.
|