docker-compose.dev.yml 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. name: flowsint-dev
  2. services:
  3. postgres:
  4. image: postgres:15
  5. container_name: flowsint-postgres-dev
  6. restart: always
  7. environment:
  8. POSTGRES_USER: flowsint
  9. POSTGRES_PASSWORD: flowsint
  10. POSTGRES_DB: flowsint
  11. ports:
  12. - "5433:5432"
  13. volumes:
  14. - pg_data_dev:/var/lib/postgresql/data
  15. networks:
  16. - flowsint_network
  17. healthcheck:
  18. test: ["CMD-SHELL", "pg_isready -U flowsint"]
  19. interval: 10s
  20. timeout: 5s
  21. retries: 5
  22. redis:
  23. image: redis:alpine
  24. container_name: flowsint-redis-dev
  25. ports:
  26. - "6379:6379"
  27. networks:
  28. - flowsint_network
  29. healthcheck:
  30. test: ["CMD", "redis-cli", "ping"]
  31. interval: 10s
  32. timeout: 5s
  33. retries: 5
  34. neo4j:
  35. image: neo4j:5
  36. container_name: flowsint-neo4j-dev
  37. ports:
  38. - "7474:7474" # Web UI
  39. - "7687:7687" # Bolt
  40. environment:
  41. - NEO4J_AUTH=${NEO4J_USERNAME}/${NEO4J_PASSWORD}
  42. - NEO4J_PLUGINS=["apoc"]
  43. - NEO4J_apoc_export_file_enabled=true
  44. - NEO4J_apoc_import_file_enabled=true
  45. - NEO4J_apoc_import_file_use__neo4j__config=true
  46. volumes:
  47. - neo4j_data_dev:/data
  48. - neo4j_logs_dev:/logs
  49. - neo4j_import_dev:/var/lib/neo4j/import
  50. - neo4j_plugins_dev:/plugins
  51. restart: unless-stopped
  52. networks:
  53. - flowsint_network
  54. healthcheck:
  55. test: cypher-shell -u ${NEO4J_USERNAME} -p ${NEO4J_PASSWORD} "RETURN 1"
  56. interval: 5s
  57. timeout: 5s
  58. retries: 10
  59. api:
  60. build:
  61. context: .
  62. dockerfile: flowsint-api/Dockerfile
  63. target: dev
  64. container_name: flowsint-api-dev
  65. restart: unless-stopped
  66. ports:
  67. - "5001:5001"
  68. volumes:
  69. - ./flowsint-api:/app/flowsint-api
  70. - /app/flowsint-api/.venv
  71. - ./flowsint-core:/app/flowsint-core
  72. - ./flowsint-types:/app/flowsint-types
  73. - ./flowsint-enrichers:/app/flowsint-enrichers
  74. - /var/run/docker.sock:/var/run/docker.sock:ro
  75. environment:
  76. - DATABASE_URL=postgresql://flowsint:flowsint@postgres:5432/flowsint
  77. - NEO4J_URI_BOLT=bolt://neo4j:7687
  78. - NEO4J_USERNAME=${NEO4J_USERNAME}
  79. - NEO4J_PASSWORD=${NEO4J_PASSWORD}
  80. - AUTH_SECRET=${AUTH_SECRET}
  81. - MASTER_VAULT_KEY_V1=${MASTER_VAULT_KEY_V1}
  82. - REDIS_URL=redis://redis:6379/0
  83. depends_on:
  84. postgres:
  85. condition: service_healthy
  86. redis:
  87. condition: service_healthy
  88. neo4j:
  89. condition: service_healthy
  90. healthcheck:
  91. test: ["CMD-SHELL", "curl -f http://localhost:5001/health || exit 1"]
  92. interval: 10s
  93. timeout: 5s
  94. retries: 5
  95. networks:
  96. - flowsint_network
  97. celery:
  98. build:
  99. context: .
  100. dockerfile: flowsint-api/Dockerfile
  101. target: dev
  102. container_name: flowsint-celery-dev
  103. restart: unless-stopped
  104. command: celery -A flowsint_core.core.celery worker --loglevel=info --pool=threads --concurrency=10
  105. volumes:
  106. - ./flowsint-api:/app/flowsint-api
  107. - /app/flowsint-api/.venv
  108. - ./flowsint-core:/app/flowsint-core
  109. - ./flowsint-types:/app/flowsint-types
  110. - ./flowsint-enrichers:/app/flowsint-enrichers
  111. - /var/run/docker.sock:/var/run/docker.sock:ro
  112. environment:
  113. - DATABASE_URL=postgresql://flowsint:flowsint@postgres:5432/flowsint
  114. - NEO4J_URI_BOLT=bolt://neo4j:7687
  115. - NEO4J_USERNAME=${NEO4J_USERNAME}
  116. - NEO4J_PASSWORD=${NEO4J_PASSWORD}
  117. - MASTER_VAULT_KEY_V1=${MASTER_VAULT_KEY_V1}
  118. - REDIS_URL=redis://redis:6379/0
  119. - SKIP_MIGRATIONS=true
  120. - AUTH_SECRET=${AUTH_SECRET}
  121. healthcheck:
  122. # Celery has no HTTP server — Dockerfile's curl-based healthcheck always fails.
  123. # Use celery's own ping primitive instead.
  124. test: ["CMD-SHELL", "celery -A flowsint_core.core.celery inspect ping -d celery@$$HOSTNAME || exit 1"]
  125. interval: 30s
  126. timeout: 10s
  127. retries: 3
  128. start_period: 30s
  129. depends_on:
  130. postgres:
  131. condition: service_healthy
  132. redis:
  133. condition: service_healthy
  134. neo4j:
  135. condition: service_healthy
  136. api:
  137. condition: service_healthy
  138. networks:
  139. - flowsint_network
  140. app:
  141. build:
  142. context: ./flowsint-app
  143. dockerfile: Dockerfile.dev
  144. container_name: flowsint-app-dev
  145. ports:
  146. - "5173:5173"
  147. volumes:
  148. - ./flowsint-app:/app
  149. - /app/node_modules
  150. environment:
  151. - VITE_API_URL=${VITE_API_URL}
  152. depends_on:
  153. api:
  154. condition: service_healthy
  155. networks:
  156. - flowsint_network
  157. stdin_open: true
  158. tty: true
  159. networks:
  160. flowsint_network:
  161. name: flowsint_network_dev
  162. driver: bridge
  163. volumes:
  164. pg_data_dev:
  165. neo4j_data_dev:
  166. neo4j_logs_dev:
  167. neo4j_import_dev:
  168. neo4j_plugins_dev: