/ docker-compose.yml
docker-compose.yml
 1  services:
 2    db:
 3      image: pgvector/pgvector:pg16
 4      environment:
 5        POSTGRES_USER: postgres
 6        POSTGRES_PASSWORD: postgres
 7        POSTGRES_DB: ai_business_ops_dev
 8      ports:
 9        - "5432:5432"
10      volumes:
11        - pgdata:/var/lib/postgresql/data
12      healthcheck:
13        test: ["CMD-SHELL", "pg_isready -U postgres"]
14        interval: 5s
15        timeout: 5s
16        retries: 20
17  
18    minio:
19      image: minio/minio:latest
20      command: server /data --console-address ":9001"
21      environment:
22        MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minio}
23        MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-miniosecret}
24      ports:
25        - "9000:9000"
26        - "9001:9001"
27      volumes:
28        - miniodata:/data
29  
30    createbuckets:
31      image: minio/mc:latest
32      depends_on:
33        - minio
34      entrypoint: >
35        /bin/sh -c "
36        /usr/bin/mc alias set local http://minio:9000 $${MINIO_ROOT_USER:-minio} $${MINIO_ROOT_PASSWORD:-miniosecret};
37        /usr/bin/mc mb --ignore-existing local/$${S3_BUCKET:-ai-business-ops};
38        exit 0;
39        "
40  
41    app:
42      build: .
43      depends_on:
44        db:
45          condition: service_healthy
46        minio:
47          condition: service_started
48      env_file:
49        - .env
50      environment:
51        DATABASE_URL: ecto://postgres:postgres@db:5432/ai_business_ops_dev
52        S3_ENDPOINT: http://minio:9000
53        PHX_HOST: localhost
54        PORT: 4000
55      ports:
56        - "4000:4000"
57      volumes:
58        - .:/app
59      command: sh -c "mix deps.get && mix ecto.setup && mix phx.server"
60  
61  volumes:
62    pgdata:
63    miniodata: