compose.yaml 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. services:
  2. # ── Base de datos interna (admins, sesiones, logs) ─────────────────────────────
  3. internal_db:
  4. image: postgres:16
  5. container_name: internal_postgres_db
  6. restart: unless-stopped
  7. environment:
  8. POSTGRES_USER: ${INTERNAL_DB_USER}
  9. POSTGRES_PASSWORD: ${INTERNAL_DB_PASSWORD}
  10. POSTGRES_DB: ${INTERNAL_DB_NAME}
  11. ports:
  12. - "${INTERNAL_DB_PORT}:5432"
  13. volumes:
  14. - internal_db_data:/var/lib/postgresql/data
  15. - ./internal/schemas/001_admins_table_setup.schema.sql:/docker-entrypoint-initdb.d/001_init.sql:ro
  16. networks:
  17. - opendata_network
  18. healthcheck:
  19. test: ["CMD-SHELL", "pg_isready -U ${INTERNAL_DB_USER} -d ${INTERNAL_DB_NAME}"]
  20. interval: 10s
  21. timeout: 5s
  22. retries: 5
  23. # ── Base de datos de plataforma de usuarios ────────────────────────────────────
  24. platform_db:
  25. image: postgres:16
  26. container_name: user_postgres_db
  27. restart: unless-stopped
  28. environment:
  29. POSTGRES_USER: ${PLATFORM_DB_USER}
  30. POSTGRES_PASSWORD: ${PLATFORM_DB_PASSWORD}
  31. POSTGRES_DB: ${PLATFORM_DB_NAME}
  32. ports:
  33. - "${PLATFORM_DB_PORT}:5432"
  34. volumes:
  35. - platform_db_data:/var/lib/postgresql/data
  36. - ./user_platform/schemas/001_platform_table_setup.schema.sql:/docker-entrypoint-initdb.d/001_init.sql:ro
  37. networks:
  38. - opendata_network
  39. healthcheck:
  40. test: ["CMD-SHELL", "pg_isready -U ${PLATFORM_DB_USER} -d ${PLATFORM_DB_NAME}"]
  41. interval: 10s
  42. timeout: 5s
  43. retries: 5
  44. # ── MinIO (almacenamiento de archivos) ─────────────────────────────────────────
  45. minio:
  46. image: minio/minio:latest
  47. container_name: minio
  48. restart: unless-stopped
  49. command: server /data --console-address ":9001"
  50. environment:
  51. MINIO_ROOT_USER: ${MINIO_ROOT_USER}
  52. MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
  53. ports:
  54. - "${MINIO_PORT}:9000"
  55. - "${MINIO_CONSOLE_PORT}:9001"
  56. volumes:
  57. - minio_data:/data
  58. networks:
  59. - opendata_network
  60. healthcheck:
  61. test: ["CMD", "mc", "ready", "local"]
  62. interval: 15s
  63. timeout: 5s
  64. retries: 5
  65. # ── Backend interno (FastAPI) ──────────────────────────────────────────────────
  66. backend:
  67. build:
  68. context: ./internal
  69. dockerfile: Dockerfile.backend
  70. container_name: internal_backend
  71. restart: unless-stopped
  72. environment:
  73. JWT_SECRET_KEY: ${JWT_SECRET_KEY}
  74. JWT_ACCESS_TOKEN_EXPIRE_MINUTES: ${JWT_ACCESS_TOKEN_EXPIRE_MINUTES}
  75. INTERNAL_DB_URL: postgresql://${INTERNAL_DB_USER}:${INTERNAL_DB_PASSWORD}@internal_db:5432/${INTERNAL_DB_NAME}
  76. PLATFORM_DB_URL: postgresql://${PLATFORM_DB_USER}:${PLATFORM_DB_PASSWORD}@platform_db:5432/${PLATFORM_DB_NAME}
  77. MODELS_BASE_PATH: /app/models
  78. ports:
  79. - "${BACKEND_PORT}:8000"
  80. depends_on:
  81. internal_db:
  82. condition: service_healthy
  83. platform_db:
  84. condition: service_healthy
  85. networks:
  86. - opendata_network
  87. # ── Backend de plataforma de usuarios (FastAPI + Frontend) ─────────────────────
  88. user_backend:
  89. build:
  90. context: ./user_platform
  91. dockerfile: Dockerfile
  92. container_name: user_platform_backend
  93. restart: unless-stopped
  94. environment:
  95. PLATFORM_DB_URL: postgresql://${PLATFORM_DB_USER}:${PLATFORM_DB_PASSWORD}@platform_db:5432/${PLATFORM_DB_NAME}
  96. ports:
  97. - "8001:8000"
  98. depends_on:
  99. platform_db:
  100. condition: service_healthy
  101. networks:
  102. - opendata_network
  103. volumes:
  104. internal_db_data:
  105. platform_db_data:
  106. minio_data:
  107. networks:
  108. opendata_network:
  109. driver: bridge