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:
|