업데이트
This commit is contained in:
240
docs/synology_docker_deployment.md
Normal file
240
docs/synology_docker_deployment.md
Normal file
@@ -0,0 +1,240 @@
|
||||
# 시놀로지 도커 배포 가이드
|
||||
|
||||
## 📦 포함/제외 파일
|
||||
|
||||
### ✅ 도커 이미지에 포함되는 파일
|
||||
```
|
||||
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` 파일이 자동으로 제외하며, 도커 이미지 크기와 빌드 속도가 최적화됩니다.
|
||||
Reference in New Issue
Block a user