summaryrefslogtreecommitdiff
path: root/docker-compose.yml
blob: d9fdbbb54debe87f0f332ba4cf881636c31e790a (plain)
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
services:
  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: ${AIGW_POSTGRES_USER:?set AIGW_POSTGRES_USER}
      POSTGRES_PASSWORD: ${AIGW_POSTGRES_PASSWORD:?set AIGW_POSTGRES_PASSWORD}
      POSTGRES_DB: ${AIGW_POSTGRES_DB:?set AIGW_POSTGRES_DB}
    ports:
      - "127.0.0.1:5432:5432"
    volumes:
      - aigw-postgres:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"]
      interval: 5s
      timeout: 3s
      retries: 20

  redis:
    image: redis:7-alpine
    ports:
      - "127.0.0.1:6379:6379"
    volumes:
      - aigw-redis:/data
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      timeout: 3s
      retries: 20

  mailpit:
    image: axllent/mailpit:v1.27
    ports:
      - "127.0.0.1:8025:8025"
      - "127.0.0.1:1025:1025"
    healthcheck:
      test: ["CMD", "/mailpit", "readyz"]
      interval: 5s
      timeout: 3s
      retries: 20

  mockupstream:
    image: aigw-debug:local
    profiles: ["test"]
    entrypoint: ["/usr/local/bin/mockupstream"]
    command: ["-address", ":18080"]
    healthcheck:
      test: ["CMD", "wget", "-q", "-O", "-", "http://127.0.0.1:18080/healthz"]
      interval: 2s
      timeout: 2s
      retries: 10

  aigw:
    image: aigw-debug:local
    build: .
    depends_on:
      postgres:
        condition: service_healthy
      mailpit:
        condition: service_healthy
    ports:
      - "127.0.0.1:8080:8080"
      - "127.0.0.1:8081:8081"
      - "127.0.0.1:8082:8082"
      - "127.0.0.1:9090:9090"
    environment:
      AIGW_SERVER_ADDRESS: ${AIGW_SERVER_ADDRESS:?set AIGW_SERVER_ADDRESS}
      AIGW_PUBLIC_ADDRESS: ${AIGW_PUBLIC_ADDRESS:-:8080}
      AIGW_ADMIN_ADDRESS: ${AIGW_ADMIN_ADDRESS:-:8081}
      AIGW_WEBHOOK_ADDRESS: ${AIGW_WEBHOOK_ADDRESS:-:8082}
      AIGW_OPERATIONS_ADDRESS: ${AIGW_OPERATIONS_ADDRESS:-:9090}
      AIGW_TRUSTED_PROXY_CIDRS: ${AIGW_TRUSTED_PROXY_CIDRS:-}
      AIGW_REQUIRE_HTTPS: ${AIGW_REQUIRE_HTTPS:-false}
      AIGW_DEPLOYMENT_REGION: ${AIGW_DEPLOYMENT_REGION:-}
      AIGW_PROVIDER_ACTIVE_PROBES_ENABLED: ${AIGW_PROVIDER_ACTIVE_PROBES_ENABLED:-false}
      AIGW_PROVIDER_SHARED_HISTORY_ENABLED: ${AIGW_PROVIDER_SHARED_HISTORY_ENABLED:-true}
      AIGW_DATABASE_URL: ${AIGW_DATABASE_URL_DOCKER:?set AIGW_DATABASE_URL_DOCKER}
      AIGW_REDIS_URL: ${AIGW_REDIS_URL_DOCKER:-}
      AIGW_CREDENTIAL_KEY: ${AIGW_CREDENTIAL_KEY:?set AIGW_CREDENTIAL_KEY}
      AIGW_CREDENTIAL_PREVIOUS_KEYS: ${AIGW_CREDENTIAL_PREVIOUS_KEYS:-}
      AIGW_ADMIN_TOKEN: ${AIGW_ADMIN_TOKEN:?set AIGW_ADMIN_TOKEN}
      AIGW_PUBLIC_URL: ${AIGW_PUBLIC_URL:?set AIGW_PUBLIC_URL}
      AIGW_INFERENCE_PUBLIC_URL: ${AIGW_INFERENCE_PUBLIC_URL:?set AIGW_INFERENCE_PUBLIC_URL}
      AIGW_WEBAUTHN_RP_ID: ${AIGW_WEBAUTHN_RP_ID:?set AIGW_WEBAUTHN_RP_ID}
      AIGW_WEBAUTHN_ORIGINS: ${AIGW_WEBAUTHN_ORIGINS:?set AIGW_WEBAUTHN_ORIGINS}
      AIGW_SMTP_FROM_ADDRESS: ${AIGW_SMTP_FROM_ADDRESS:?set AIGW_SMTP_FROM_ADDRESS}
      AIGW_SMTP_ADDRESS: ${AIGW_SMTP_ADDRESS_DOCKER:?set AIGW_SMTP_ADDRESS_DOCKER}
      AIGW_SMTP_USERNAME: ${AIGW_SMTP_USERNAME:-}
      AIGW_SMTP_PASSWORD: ${AIGW_SMTP_PASSWORD:-}
      AIGW_STRIPE_ENABLED: ${AIGW_STRIPE_ENABLED:-false}
      AIGW_STRIPE_API_KEY: ${AIGW_STRIPE_API_KEY:-}
      AIGW_STRIPE_WEBHOOK_SECRET: ${AIGW_STRIPE_WEBHOOK_SECRET:-}
      AIGW_STRIPE_SUCCESS_URL: ${AIGW_STRIPE_SUCCESS_URL:-}
      AIGW_STRIPE_CANCEL_URL: ${AIGW_STRIPE_CANCEL_URL:-}
      AIGW_STRIPE_PORTAL_RETURN_URL: ${AIGW_STRIPE_PORTAL_RETURN_URL:-http://localhost:8081/admin/?billing=portal}
      AIGW_STRIPE_AUTOMATIC_TAX_ENABLED: ${AIGW_STRIPE_AUTOMATIC_TAX_ENABLED:-false}
      AIGW_STRIPE_TAX_REGISTRATION_CONFIRMED: ${AIGW_STRIPE_TAX_REGISTRATION_CONFIRMED:-false}
      AIGW_STRIPE_PRODUCT_TAX_CODE: ${AIGW_STRIPE_PRODUCT_TAX_CODE:-}
      AIGW_SETTLEMENT_SPOOL_PATH: /var/lib/aigw/settlements.jsonl
    volumes:
      - ./config.control.example.json:/etc/aigw/config.json:ro
      - aigw-settlements:/var/lib/aigw
    healthcheck:
      test: ["CMD", "wget", "-q", "-O", "-", "http://127.0.0.1:9090/readyz"]
      interval: 3s
      timeout: 2s
      retries: 20
      start_period: 5s

  integration-test:
    image: aigw-test:local
    build:
      context: .
      target: test
    profiles: ["test"]
    working_dir: /src
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      AIGW_TEST_DATABASE_URL: ${AIGW_DATABASE_URL_DOCKER:?set AIGW_DATABASE_URL_DOCKER}
      GOCACHE: /go-build-cache
    volumes:
      - .:/src:ro
      - aigw-go-build:/go-build-cache
    command: ["go", "test", "-p=1", "./internal/controlplane", "./internal/billing", "-count=1"]

volumes:
  aigw-postgres:
  aigw-redis:
  aigw-settlements:
  aigw-go-build: