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
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. 자동 백업 스케줄 설정 |