File size: 2,194 Bytes
3d6cc8a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
version: '3.8'

services:
  # PostgreSQL Database
  db:
    image: postgres:15-alpine
    container_name: goxy-ml-db
    environment:
      POSTGRES_USER: goxy_user
      POSTGRES_PASSWORD: goxy_password
      POSTGRES_DB: goxy_ml_db
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: [ "CMD-SHELL", "pg_isready -U goxy_user" ]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - goxy-network

  # Redis Cache
  redis:
    image: redis:7-alpine
    container_name: goxy-ml-redis
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data
    healthcheck:
      test: [ "CMD", "redis-cli", "ping" ]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - goxy-network

  # GOXY ML/AI Service
  app:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: goxy-ml-service
    env_file:
      - .env
    environment:
      - DATABASE_URL=postgresql+asyncpg://goxy_user:goxy_password@db:5432/goxy_ml_db
      - REDIS_URL=redis://redis:6379/0
    ports:
      - "8000:8000" # API
      - "9090:9090" # Metrics
    volumes:
      - ./app:/app/app # Mount source code for development
      - ./data:/app/data # Mount data directory
      - ./logs:/app/logs # Mount logs directory
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_healthy
    healthcheck:
      test: [ "CMD-SHELL", "curl -f http://localhost:8000/health || exit 1" ]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    networks:
      - goxy-network
    restart: unless-stopped

  # Database migrations (run once)
  migrations:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: goxy-ml-migrations
    env_file:
      - .env
    environment:
      - DATABASE_URL=postgresql+asyncpg://goxy_user:goxy_password@db:5432/goxy_ml_db
    command: alembic upgrade head
    depends_on:
      db:
        condition: service_healthy
    networks:
      - goxy-network

volumes:
  postgres_data:
    driver: local
  redis_data:
    driver: local

networks:
  goxy-network:
    driver: bridge