Files
br-acc/docker-compose.yml
Davi Rezende d889569a78 feat(ci): add docker-ci workflow for GHCR and optional image-based deploy (#47)
* feat(ci): add docker-ci workflow for Buildx and GHCR push

* refactor(docker): use per-service builds in root docker-compose

* refactor(etl): use uv and uv.lock in ETL Dockerfile

* fix(api): add uv.lock to API Dockerfile for reproducible builds

* feat(deploy): add optional GHCR image pull and prod images override

* refactor(docker): use uv in root Dockerfile etl stage, document canonical Dockerfiles

* chore(docker): extend .dockerignore for build context

* docs: add Docker Compose start option to README
2026-03-03 21:26:32 -03:00

75 lines
2.0 KiB
YAML

services:
neo4j:
container_name: bracc-neo4j
image: neo4j:5-community
ports:
- "7474:7474"
- "7687:7687"
environment:
NEO4J_AUTH: neo4j/${NEO4J_PASSWORD}
NEO4J_PLUGINS: '["apoc"]'
NEO4J_server_memory_heap_initial__size: ${NEO4J_HEAP_INITIAL:-512m}
NEO4J_server_memory_heap_max__size: ${NEO4J_HEAP_MAX:-1G}
NEO4J_server_memory_pagecache_size: ${NEO4J_PAGECACHE:-512m}
NEO4J_dbms_memory_transaction_total_max: 1G
volumes:
- neo4j-data:/data
- ./infra/neo4j/import:/var/lib/neo4j/import
- ./infra/neo4j/init.cypher:/var/lib/neo4j/init.cypher
healthcheck:
test: ["CMD", "cypher-shell", "-u", "neo4j", "-p", "${NEO4J_PASSWORD}", "RETURN 1"]
interval: 10s
timeout: 5s
retries: 8
api:
build: ./api
ports:
- "8000:8000"
environment:
NEO4J_URI: bolt://neo4j:7687
NEO4J_USER: neo4j
NEO4J_PASSWORD: ${NEO4J_PASSWORD}
JWT_SECRET_KEY: ${JWT_SECRET_KEY:-change-me-generate-with-openssl-rand-hex-32}
INVITE_CODE: ${INVITE_CODE:-}
LOG_LEVEL: ${LOG_LEVEL:-info}
APP_ENV: ${APP_ENV:-dev}
CORS_ORIGINS: ${CORS_ORIGINS:-http://localhost:3000}
depends_on:
neo4j:
condition: service_healthy
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"]
interval: 10s
timeout: 5s
retries: 8
start_period: 20s
frontend:
build: ./frontend
ports:
- "3000:3000"
environment:
VITE_API_URL: ${VITE_API_URL:-http://localhost:8000}
depends_on:
api:
condition: service_healthy
etl:
build: ./etl
profiles: ["etl"]
working_dir: /workspace
environment:
NEO4J_URI: bolt://neo4j:7687
NEO4J_USER: neo4j
NEO4J_PASSWORD: ${NEO4J_PASSWORD}
PYTHONUNBUFFERED: "1"
volumes:
- .:/workspace
depends_on:
neo4j:
condition: service_healthy
volumes:
neo4j-data: