You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

240 lines
5.5 KiB
Markdown

# 🐳 Portainer로 Stock Oracle 배포하기
## 📋 사전 준비사항
### 1. 시스템 요구사항
- Docker Engine 20.10+
- Docker Compose 2.0+
- 최소 4GB RAM
- 최소 10GB 디스크 공간
### 2. 필수 환경 변수 설정
```bash
# SEC API 이메일 (필수)
export SEC_EMAIL="your-email@example.com"
# Alpha Vantage API Key (선택사항)
export ALPHA_VANTAGE_API_KEY="your_key_here"
```
## 🚀 단계별 배포 가이드
### Step 1: Portainer 설치
```bash
# Portainer 설치 스크립트 실행
./portainer/install-portainer.sh
# 또는 수동 설치
docker volume create portainer_data
docker run -d \
-p 8000:8000 \
-p 9443:9443 \
--name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
```
### Step 2: Portainer 웹 UI 접속
1. 브라우저에서 `https://localhost:9443` 접속
2. 관리자 계정 생성 (username: admin, password: 설정)
3. Local Docker 환경 선택
### Step 3: SSL 인증서 생성 (개발용)
```bash
./portainer/generate-ssl.sh
```
### Step 4: 환경 변수 파일 설정
```bash
# 환경 변수 파일 복사
cp portainer/.env.portainer .env
# 환경 변수 편집
nano .env
# 반드시 변경해야 할 값들:
# - SEC_EMAIL: 실제 이메일 주소
# - POSTGRES_PASSWORD: 강력한 패스워드
# - REDIS_PASSWORD: Redis 패스워드
```
### Step 5: Docker 이미지 빌드
```bash
# API 이미지 빌드
docker build -t stock-oracle-api:latest .
# 또는 Portainer에서 빌드
```
## 🎯 Portainer를 통한 스택 배포
### 방법 1: Portainer Web UI 사용
1. **스택 메뉴로 이동**
- Portainer 대시보드 → Stacks → Add stack
2. **스택 정보 입력**
- Name: `stock-oracle`
- Build method: `Git Repository` 또는 `Upload`
3. **Git Repository 방법 (권장)**
```
Repository URL: https://github.com/your-repo/stock-oracle
Repository reference: main
Compose path: portainer/docker-compose.portainer.yml
```
4. **환경 변수 설정**
```
SEC_EMAIL=your-email@example.com
POSTGRES_PASSWORD=your_secure_password
REDIS_PASSWORD=your_redis_password
```
5. **Deploy the stack** 클릭
### 방법 2: Docker Compose 직접 사용
```bash
# 스택 배포
docker-compose -f portainer/docker-compose.portainer.yml up -d
# 상태 확인
docker-compose -f portainer/docker-compose.portainer.yml ps
```
## 🔍 배포 확인
### 1. 서비스 상태 확인
Portainer Dashboard → Containers에서 다음 컨테이너들이 실행 중인지 확인:
- ✅ stock-oracle-postgres
- ✅ stock-oracle-redis
- ✅ stock-oracle-api
- ✅ stock-oracle-nginx
### 2. API 접속 테스트
```bash
# HTTP (리다이렉트)
curl http://localhost/docs
# HTTPS
curl -k https://localhost/docs
# API 테스트
curl -k https://localhost/api/v1/financial/data \
-H "Content-Type: application/json" \
-d '{"ticker":"AAPL","start_date":"2024-01-01","end_date":"2024-12-31","period_type":"quarterly"}'
```
### 3. 접속 URL
- **API 문서**: https://localhost/docs
- **API 엔드포인트**: https://localhost/api/v1/
- **Portainer**: https://localhost:9443
## 🛠️ 관리 및 모니터링
### Portainer에서 제공하는 기능
1. **컨테이너 관리**
- 컨테이너 시작/중지/재시작
- 로그 실시간 모니터링
- 리소스 사용량 확인
2. **볼륨 관리**
- 데이터 백업/복원
- 볼륨 크기 모니터링
3. **네트워크 관리**
- 네트워크 설정 확인
- 컨테이너 간 통신 관리
4. **스택 업데이트**
- Git pull을 통한 자동 업데이트
- Rolling update 지원
### 유용한 Portainer 명령어
```bash
# 스택 재배포
curl -X POST "http://localhost:9000/api/stacks/1/git/redeploy" \
-H "X-API-Key: your-api-key"
# 컨테이너 재시작
curl -X POST "http://localhost:9000/api/endpoints/1/docker/containers/container-id/restart" \
-H "X-API-Key: your-api-key"
```
## 🔧 문제 해결
### 일반적인 문제들
1. **포트 충돌**
```bash
# 포트 사용 확인
netstat -tlnp | grep :18001
# 환경 변수에서 포트 변경
API_PORT=18002
```
2. **권한 문제**
```bash
# Docker 소켓 권한
sudo chmod 666 /var/run/docker.sock
# SSL 인증서 권한
chmod 600 portainer/nginx/ssl/key.pem
```
3. **메모리 부족**
```bash
# 메모리 사용량 확인
docker stats
# 불필요한 컨테이너 정리
docker system prune -a
```
### 로그 확인 방법
```bash
# Portainer에서 로그 확인
Containers → 컨테이너 선택 → Logs
# 명령어로 로그 확인
docker logs stock-oracle-api
docker logs stock-oracle-postgres
docker logs stock-oracle-nginx
```
## 🔄 업데이트 및 백업
### 업데이트 방법
1. Portainer → Stacks → stock-oracle → Editor
2. Git Repository 방법: **Pull and redeploy** 클릭
3. 또는 새 이미지로 수동 업데이트
### 백업 방법
```bash
# 데이터베이스 백업
docker exec stock-oracle-postgres pg_dump \
-U stock_oracle_user stock_oracle > backup.sql
# 볼륨 백업
docker run --rm -v stock-oracle-postgres-data:/data \
-v $(pwd):/backup alpine tar czf /backup/postgres-backup.tar.gz /data
```
## 🎉 배포 완료!
배포가 성공적으로 완료되면:
- 📊 **API 문서**: https://localhost/docs
- 🔧 **Portainer 관리**: https://localhost:9443
- 🧪 **테스트 실행**: `python tests/run_all_tests.py`
### 다음 단계
1. 프로덕션 환경에서는 Let's Encrypt SSL 인증서 사용
2. 도메인 설정 및 DNS 구성
3. 모니터링 시스템 연동
4. 자동 백업 스케줄 설정