version: '3.8' services: # PostgreSQL Database postgres: image: postgres:15 container_name: stock-oracle-postgres environment: POSTGRES_DB: stock_oracle POSTGRES_USER: stock_oracle_user POSTGRES_PASSWORD: stock_oracle_password TZ: Asia/Seoul volumes: - postgres_data:/var/lib/postgresql/data - ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro ports: - "15433:5432" networks: - stock-oracle-network restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -U stock_oracle_user -d stock_oracle"] interval: 30s timeout: 10s retries: 3 # Redis Cache redis: image: redis:7-alpine container_name: stock-oracle-redis command: redis-server --appendonly yes --requirepass redis_password volumes: - redis_data:/data ports: - "16380:6379" networks: - stock-oracle-network restart: unless-stopped healthcheck: test: ["CMD", "redis-cli", "-a", "redis_password", "ping"] interval: 30s timeout: 10s retries: 3 # Stock Oracle API api: image: stock-oracle-api:latest container_name: stock-oracle-api build: context: . dockerfile: Dockerfile environment: # Database Configuration DATABASE_URL: postgresql+asyncpg://stock_oracle_user:stock_oracle_password@postgres:5432/stock_oracle # Redis Configuration REDIS_HOST: redis REDIS_PORT: 6379 REDIS_PASSWORD: redis_password # API Configuration API_TITLE: Stock Oracle API API_VERSION: 1.0.0 DEBUG: false # External API Keys (환경변수로 설정) SEC_EMAIL: ${SEC_EMAIL:-your-email@example.com} ALPHA_VANTAGE_API_KEY: ${ALPHA_VANTAGE_API_KEY:-} # Timezone TZ: Asia/Seoul ports: - "18001:8000" depends_on: postgres: condition: service_healthy redis: condition: service_healthy networks: - stock-oracle-network restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/docs"] interval: 30s timeout: 10s retries: 3 volumes: # 로그 볼륨 마운트 - api_logs:/app/logs # yfinance_plus 소스 마운트 (업데이트용) - yfinance_plus_src:/app/yfinance_plus # Nginx Reverse Proxy (선택사항) nginx: image: nginx:alpine container_name: stock-oracle-nginx ports: - "80:80" - "443:443" volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ./nginx/ssl:/etc/nginx/ssl:ro - nginx_logs:/var/log/nginx depends_on: - api networks: - stock-oracle-network restart: unless-stopped volumes: postgres_data: name: stock-oracle-postgres-data redis_data: name: stock-oracle-redis-data api_logs: name: stock-oracle-api-logs yfinance_plus_src: name: stock-oracle-yfinance-plus nginx_logs: name: stock-oracle-nginx-logs networks: stock-oracle-network: name: stock-oracle-network driver: bridge # Portainer Labels for better management x-portainer-labels: &portainer-labels - "io.portainer.accesscontrol.teams=stock-oracle-team" - "io.portainer.accesscontrol.users=admin" - "project=stock-oracle" - "environment=production"