File size: 3,259 Bytes
6f00e60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
version: '3.8'

services:
  # Aplicación principal
  antiscam-ai:
    build: 
      context: .
      dockerfile: Dockerfile
    container_name: antiscam-ai-pro
    restart: unless-stopped
    ports:
      - "7860:7860"
    environment:
      - STRIPE_SECRET_KEY=${STRIPE_SECRET_KEY}
      - STRIPE_PUBLISHABLE_KEY=${STRIPE_PUBLISHABLE_KEY}
      - EMAIL_USER=${EMAIL_USER}
      - EMAIL_PASSWORD=${EMAIL_PASSWORD}
      - DATABASE_URL=postgresql://antiscam:${DB_PASSWORD}@postgres:5432/antiscam_db
    volumes:
      - ./uploads:/app/uploads
      - ./logs:/app/logs
      - antiscam_data:/app/data
    depends_on:
      - postgres
      - redis
    networks:
      - antiscam-network
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:7860/"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
  
  # Base de datos PostgreSQL
  postgres:
    image: postgres:15-alpine
    container_name: antiscam-postgres
    restart: unless-stopped
    environment:
      - POSTGRES_DB=antiscam_db
      - POSTGRES_USER=antiscam
      - POSTGRES_PASSWORD=${DB_PASSWORD}
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    networks:
      - antiscam-network
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U antiscam"]
      interval: 10s
      timeout: 5s
      retries: 5
  
  # Redis para cache y sesiones
  redis:
    image: redis:7-alpine
    container_name: antiscam-redis
    restart: unless-stopped
    command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD}
    volumes:
      - redis_data:/data
    networks:
      - antiscam-network
    healthcheck:
      test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
      interval: 10s
      timeout: 3s
      retries: 5
  
  # Nginx como proxy reverso
  nginx:
    image: nginx:alpine
    container_name: antiscam-nginx
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/ssl:/etc/nginx/ssl
      - ./nginx/logs:/var/log/nginx
    depends_on:
      - antiscam-ai
    networks:
      - antiscam-network

  # Monitoring con Prometheus (opcional)
  prometheus:
    image: prom/prometheus:latest
    container_name: antiscam-prometheus
    restart: unless-stopped
    ports:
      - "9090:9090"
    volumes:
      - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus_data:/prometheus
    networks:
      - antiscam-network
    profiles:
      - monitoring

  # Grafana para dashboards (opcional)
  grafana:
    image: grafana/grafana:latest
    container_name: antiscam-grafana
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD}
    volumes:
      - grafana_data:/var/lib/grafana
      - ./monitoring/grafana:/etc/grafana/provisioning
    networks:
      - antiscam-network
    profiles:
      - monitoring

# Volúmenes persistentes
volumes:
  postgres_data:
    driver: local
  redis_data:
    driver: local
  prometheus_data:
    driver: local
  grafana_data:
    driver: local
  antiscam_data:
    driver: local

# Red interna
networks:
  antiscam-network:
    driver: bridge