Dart Shelf REST API with auth, recipes, AI (Claude), search, and community modules. PostgreSQL, Redis, Meilisearch. Docker Compose for local dev.
115 lines
2.9 KiB
YAML
115 lines
2.9 KiB
YAML
services:
|
|
api:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
ports:
|
|
- "8080:8080"
|
|
environment:
|
|
- PORT=8080
|
|
- DATABASE_URL=postgresql://cleanplate:cleanplate@postgres:5432/cleanplate
|
|
- REDIS_URL=redis://redis:6379
|
|
- JWT_SECRET=${JWT_SECRET:-dev-secret-change-in-production}
|
|
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}
|
|
- MEILISEARCH_URL=http://meilisearch:7700
|
|
- MEILI_MASTER_KEY=${MEILI_MASTER_KEY:-dev-meili-key}
|
|
- MINIO_ENDPOINT=minio:9000
|
|
- MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY:-minioadmin}
|
|
- MINIO_SECRET_KEY=${MINIO_SECRET_KEY:-minioadmin}
|
|
- APP_ENV=development
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
meilisearch:
|
|
condition: service_started
|
|
minio:
|
|
condition: service_started
|
|
restart: unless-stopped
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
start_period: 10s
|
|
|
|
postgres:
|
|
image: postgres:16-alpine
|
|
ports:
|
|
- "5432:5432"
|
|
environment:
|
|
POSTGRES_DB: cleanplate
|
|
POSTGRES_USER: cleanplate
|
|
POSTGRES_PASSWORD: cleanplate
|
|
volumes:
|
|
- pg_data:/var/lib/postgresql/data
|
|
- ./migrations:/docker-entrypoint-initdb.d
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U cleanplate -d cleanplate"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
restart: unless-stopped
|
|
|
|
redis:
|
|
image: redis:7-alpine
|
|
ports:
|
|
- "6379:6379"
|
|
volumes:
|
|
- redis_data:/data
|
|
command: redis-server --appendonly yes
|
|
healthcheck:
|
|
test: ["CMD", "redis-cli", "ping"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
restart: unless-stopped
|
|
|
|
meilisearch:
|
|
image: getmeili/meilisearch:v1.11
|
|
ports:
|
|
- "7700:7700"
|
|
environment:
|
|
MEILI_MASTER_KEY: ${MEILI_MASTER_KEY:-dev-meili-key}
|
|
MEILI_ENV: development
|
|
volumes:
|
|
- meili_data:/meili_data
|
|
restart: unless-stopped
|
|
|
|
minio:
|
|
image: minio/minio
|
|
ports:
|
|
- "9000:9000"
|
|
- "9001:9001"
|
|
environment:
|
|
MINIO_ROOT_USER: ${MINIO_ACCESS_KEY:-minioadmin}
|
|
MINIO_ROOT_PASSWORD: ${MINIO_SECRET_KEY:-minioadmin}
|
|
volumes:
|
|
- minio_data:/data
|
|
command: server /data --console-address ":9001"
|
|
restart: unless-stopped
|
|
|
|
# MinIO bucket initialization
|
|
minio-init:
|
|
image: minio/mc
|
|
depends_on:
|
|
- minio
|
|
entrypoint: >
|
|
/bin/sh -c "
|
|
sleep 5;
|
|
mc alias set local http://minio:9000 minioadmin minioadmin;
|
|
mc mb --ignore-existing local/cleanplate-images;
|
|
mc mb --ignore-existing local/cleanplate-videos;
|
|
mc mb --ignore-existing local/cleanplate-temp;
|
|
mc anonymous set download local/cleanplate-images;
|
|
mc anonymous set download local/cleanplate-videos;
|
|
echo 'Buckets created successfully';
|
|
"
|
|
|
|
volumes:
|
|
pg_data:
|
|
redis_data:
|
|
meili_data:
|
|
minio_data:
|