services: # Graph Database for Resource Matching neo4j: image: neo4j:5.26 container_name: turash-neo4j environment: NEO4J_AUTH: neo4j/test123456 ports: - "7474:7474" # HTTP - "7687:7687" # Bolt volumes: - neo4j_data:/data - neo4j_logs:/logs - ./neo4j/init:/docker-entrypoint-initdb.d - ./migrations:/var/lib/neo4j/import/migrations networks: - turash-network restart: unless-stopped healthcheck: test: [ "CMD", "cypher-shell", "-u", "neo4j", "-p", "test123456", "MATCH () RETURN count(*) limit 1", ] interval: 30s timeout: 10s retries: 5 # Spatial Database for Geospatial Queries postgres: image: postgis/postgis:16-3.4 platform: linux/amd64 container_name: turash-postgres environment: POSTGRES_DB: turash POSTGRES_USER: turash POSTGRES_PASSWORD: turash123 PGDATA: /var/lib/postgresql/data/pgdata ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data - ./postgres/init:/docker-entrypoint-initdb.d - ./migrations:/app/migrations networks: - turash-network restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -U turash -d turash"] interval: 30s timeout: 10s retries: 5 # Caching and Session Store redis: image: redis:8.4-alpine container_name: turash-redis command: redis-server --appendonly yes --requirepass turash123 ports: - "6379:6379" volumes: - redis_data:/data networks: - turash-network restart: unless-stopped healthcheck: test: ["CMD", "redis-cli", "--raw", "incr", "ping"] interval: 30s timeout: 10s retries: 5 # Message Queue for Event Streaming nats: image: nats:2.12.2-alpine container_name: turash-nats command: ["-js", "-sd", "/data"] ports: - "4222:4222" # Client connections - "8222:8222" # HTTP monitoring volumes: - nats_data:/data networks: - turash-network restart: unless-stopped healthcheck: test: ["CMD", "echo", "ok"] interval: 30s timeout: 10s retries: 3 # Go Backend Application (Development) # Uncomment for development with hot reload backend: build: context: . dockerfile: Dockerfile.dev container_name: turash-backend ports: - "8080:8080" volumes: - .:/app - /app/vendor environment: - NEO4J_URI=neo4j://neo4j:7687 - NEO4J_USER=neo4j - NEO4J_PASSWORD=test123456 - POSTGRES_DSN=host=postgres port=5432 user=turash password=turash123 dbname=turash sslmode=disable - REDIS_ADDR=redis:6379 - REDIS_PASSWORD=turash123 - NATS_URL=nats://nats:4222 depends_on: neo4j: condition: service_healthy postgres: condition: service_healthy redis: condition: service_healthy nats: condition: service_healthy networks: - turash-network restart: unless-stopped volumes: neo4j_data: driver: local neo4j_logs: driver: local postgres_data: driver: local redis_data: driver: local nats_data: driver: local networks: turash-network: driver: bridge