7.5 KiB
7.5 KiB
Docker 배포 가이드
📋 목차
🔧 사전 요구사항
필수 소프트웨어
- Docker: 20.10 이상
- Docker Compose: 2.0 이상
설치 확인
docker --version
docker-compose --version
🚀 빠른 시작
1. 자동 배포 스크립트 사용
./deploy.sh
스크립트 실행 후 배포 모드 선택:
1- Production (포트 8000)2- Development (포트 8001)3- 모두
2. 수동 배포
# 환경 변수 설정
cp .env.example .env
nano .env # 필요한 설정 수정
# Docker 이미지 빌드 및 실행
docker-compose up -d web
3. 접속 확인
# Production
curl http://localhost:8000/strategies/
# Development
curl http://localhost:8001/strategies/
📁 배포 파일 구조
executor/
├── Dockerfile # Docker 이미지 정의
├── docker-compose.yml # 컨테이너 오케스트레이션
├── docker-entrypoint.sh # 컨테이너 시작 스크립트
├── .dockerignore # Docker 빌드 시 제외할 파일
├── .env.example # 환경 변수 템플릿
├── deploy.sh # 자동 배포 스크립트
└── DEPLOYMENT_GUIDE.md # 이 파일
📦 배포 방법
Production 배포
# 1. 이미지 빌드
docker-compose build web
# 2. 컨테이너 시작
docker-compose up -d web
# 3. 로그 확인
docker-compose logs -f web
Development 배포
# Development 프로파일로 실행
docker-compose --profile dev up -d web-dev
# 로그 확인
docker-compose logs -f web-dev
동시 배포 (Production + Development)
docker-compose --profile dev up -d
⚙️ 설정
환경 변수 (.env)
# .env.example을 복사하여 시작
cp .env.example .env
주요 설정:
# Django 보안
DJANGO_SECRET_KEY=your-secret-key-here
DJANGO_DEBUG=False
DJANGO_ALLOWED_HOSTS=localhost,127.0.0.1,yourdomain.com
# 환경
DJANGO_ENV=production
# 타임존
TIME_ZONE=Asia/Seoul
Docker Compose 설정
포트 변경:
services:
web:
ports:
- "9000:8000" # 외부:내부
Worker 수 조정:
services:
web:
command: gunicorn --bind 0.0.0.0:8000 --workers 8 executor.wsgi:application
볼륨 추가:
services:
web:
volumes:
- ./data:/app/data
🛠️ 유용한 명령어
컨테이너 관리
# 컨테이너 상태 확인
docker-compose ps
# 컨테이너 중지
docker-compose down
# 컨테이너 재시작
docker-compose restart web
# 컨테이너 완전 제거 (볼륨 포함)
docker-compose down -v
로그 확인
# 실시간 로그
docker-compose logs -f
# 특정 서비스 로그
docker-compose logs -f web
# 마지막 100줄
docker-compose logs --tail=100 web
Django 명령어 실행
# 마이그레이션
docker-compose exec web python manage.py migrate
# 전략 초기화
docker-compose exec web python manage.py init_strategies
# 슈퍼유저 생성
docker-compose exec web python manage.py createsuperuser
# Shell 접속
docker-compose exec web python manage.py shell
# 전략 목록 확인
docker-compose exec web python list_strategies.py
데이터베이스 백업
# SQLite 백업
docker-compose exec web sqlite3 /app/db.sqlite3 .dump > backup.sql
# 복원
cat backup.sql | docker-compose exec -T web sqlite3 /app/db.sqlite3
이미지 관리
# 이미지 재빌드 (캐시 무시)
docker-compose build --no-cache web
# 이미지 정리
docker image prune -a
# 미사용 리소스 정리
docker system prune -a
🔍 문제 해결
1. 포트가 이미 사용 중인 경우
증상:
Error: bind: address already in use
해결:
# 사용 중인 프로세스 확인
lsof -i :8000
# docker-compose.yml에서 포트 변경
ports:
- "8001:8000"
2. 마이그레이션 오류
증상:
django.db.utils.OperationalError: no such table
해결:
# 컨테이너에서 마이그레이션 재실행
docker-compose exec web python manage.py migrate --run-syncdb
# 또는 DB 초기화
docker-compose down -v
docker-compose up -d
3. 전략이 초기화되지 않음
해결:
# 수동으로 전략 초기화
docker-compose exec web python manage.py init_strategies
# 컨테이너 재시작
docker-compose restart web
4. 정적 파일이 로드되지 않음
해결:
# 정적 파일 수집
docker-compose exec web python manage.py collectstatic --noinput
# 권한 확인
docker-compose exec web ls -la /app/staticfiles/
5. 컨테이너가 즉시 종료됨
확인:
# 로그에서 오류 확인
docker-compose logs web
# 컨테이너 상태 확인
docker-compose ps
6. Health check 실패
증상:
Status: unhealthy
해결:
# 수동으로 health check 테스트
docker-compose exec web curl -f http://localhost:8000/strategies/
# health check 비활성화 (임시)
# docker-compose.yml에서 healthcheck 섹션 주석 처리
🔐 보안 권장사항
Production 환경
-
SECRET_KEY 변경
# .env 파일에서 반드시 변경 DJANGO_SECRET_KEY=$(python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())') -
DEBUG 모드 비활성화
DJANGO_DEBUG=False -
ALLOWED_HOSTS 설정
DJANGO_ALLOWED_HOSTS=yourdomain.com,www.yourdomain.com -
방화벽 설정
# 필요한 포트만 개방 ufw allow 8000/tcp
📊 모니터링
컨테이너 리소스 사용량
# 실시간 모니터링
docker stats
# 특정 컨테이너
docker stats quantbench-executor
디스크 사용량
# Docker 전체 사용량
docker system df
# 상세 정보
docker system df -v
🔄 업데이트
코드 업데이트
# 1. Git에서 최신 코드 가져오기
git pull origin main
# 2. 이미지 재빌드
docker-compose build web
# 3. 컨테이너 재시작
docker-compose up -d web
# 4. 마이그레이션 실행
docker-compose exec web python manage.py migrate
Rolling 업데이트 (무중단 배포)
# 1. 새 컨테이너 시작
docker-compose up -d --scale web=2 --no-recreate
# 2. 헬스 체크 확인
docker-compose ps
# 3. 이전 컨테이너 종료
docker-compose up -d --scale web=1
📝 추가 정보
BAA 전략 테스트
# 컨테이너 내부에서 테스트
docker-compose exec web python test_baa.py
# API 테스트
docker-compose exec web bash baa_api_examples.sh
전략 목록 확인
docker-compose exec web python list_strategies.py
🆘 지원
문제가 발생하면:
- 로그 확인:
docker-compose logs -f - 컨테이너 상태:
docker-compose ps - GitHub Issues에 보고