infra: full docker-compose with core-db, tenants-db, mcp, frontend

This commit is contained in:
2026-05-06 15:44:47 +00:00
parent 6f6b449c4c
commit cf41a25721
+26 -22
View File
@@ -1,10 +1,10 @@
version: "3.9" version: "3.9"
networks: networks:
manar-internal:
driver: bridge
coolify: coolify:
external: true external: true
manar-internal:
driver: bridge
volumes: volumes:
manar-core-db-data: manar-core-db-data:
@@ -12,7 +12,6 @@ volumes:
services: services:
# ── Core Registry DB ─────────────────────────────────────
manar-core-db: manar-core-db:
image: postgres:16-alpine image: postgres:16-alpine
container_name: manar-core-db container_name: manar-core-db
@@ -23,7 +22,7 @@ services:
POSTGRES_PASSWORD: ${CORE_DB_PASSWORD} POSTGRES_PASSWORD: ${CORE_DB_PASSWORD}
volumes: volumes:
- manar-core-db-data:/var/lib/postgresql/data - manar-core-db-data:/var/lib/postgresql/data
- ./core-db/init:/docker-entrypoint-initdb.d - ./core-db/init:/docker-entrypoint-initdb.d:ro
networks: networks:
- manar-internal - manar-internal
healthcheck: healthcheck:
@@ -32,7 +31,6 @@ services:
timeout: 5s timeout: 5s
retries: 5 retries: 5
# ── Tenants DB ───────────────────────────────────────────
manar-tenants-db: manar-tenants-db:
image: postgres:16-alpine image: postgres:16-alpine
container_name: manar-tenants-db container_name: manar-tenants-db
@@ -43,7 +41,7 @@ services:
POSTGRES_PASSWORD: ${TENANTS_DB_PASSWORD} POSTGRES_PASSWORD: ${TENANTS_DB_PASSWORD}
volumes: volumes:
- manar-tenants-db-data:/var/lib/postgresql/data - manar-tenants-db-data:/var/lib/postgresql/data
- ./tenants-db/init:/docker-entrypoint-initdb.d - ./tenants-db/init:/docker-entrypoint-initdb.d:ro
networks: networks:
- manar-internal - manar-internal
healthcheck: healthcheck:
@@ -52,20 +50,25 @@ services:
timeout: 5s timeout: 5s
retries: 5 retries: 5
# ── MCP Server ───────────────────────────────────────────
manar-mcp: manar-mcp:
build: build:
context: ./mcp context: ./mcp
dockerfile: Dockerfile dockerfile: Dockerfile
container_name: manar-mcp container_name: manar-mcp
restart: unless-stopped restart: unless-stopped
env_file: .env
environment: environment:
CORE_DB_URL: postgresql://manar:${CORE_DB_PASSWORD}@manar-core-db:5432/manar_core CORE_DB_URL: postgresql://manar:${CORE_DB_PASSWORD}@manar-core-db:5432/manar_core
TENANTS_DB_URL: postgresql://manar:${TENANTS_DB_PASSWORD}@manar-tenants-db:5432/manar_tenants TENANTS_DB_URL: postgresql://manar:${TENANTS_DB_PASSWORD}@manar-tenants-db:5432/manar_tenants
CLICKHOUSE_HOST: clickhouse CLICKHOUSE_HOST: clickhouse
CLICKHOUSE_PORT: 8123 CLICKHOUSE_PORT: 8123
CLICKHOUSE_DB: manar CLICKHOUSE_DB: manar
CLICKHOUSE_USER: ${CLICKHOUSE_USER:-default}
CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD:-}
GOOGLE_ADS_DEVELOPER_TOKEN: ${GOOGLE_ADS_DEVELOPER_TOKEN}
GOOGLE_ADS_CLIENT_ID: ${GOOGLE_ADS_CLIENT_ID}
GOOGLE_ADS_CLIENT_SECRET: ${GOOGLE_ADS_CLIENT_SECRET}
MCP_HOST: 0.0.0.0
MCP_PORT: 8090
networks: networks:
- manar-internal - manar-internal
- coolify - coolify
@@ -75,32 +78,33 @@ services:
manar-tenants-db: manar-tenants-db:
condition: service_healthy condition: service_healthy
healthcheck: healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"] test: ["CMD-SHELL", "curl -sf http://localhost:8090/health || exit 1"]
interval: 30s interval: 15s
timeout: 10s timeout: 5s
retries: 3 retries: 5
# ── Frontend ─────────────────────────────────────────────
manar-frontend: manar-frontend:
build: build:
context: ./frontend context: ./frontend
dockerfile: Dockerfile dockerfile: Dockerfile
container_name: manar-frontend container_name: manar-frontend
restart: unless-stopped restart: unless-stopped
env_file: .env
environment: environment:
MCP_URL: http://manar-mcp:8000 NEXT_PUBLIC_APP_URL: https://manar.asktam.net
MANAR_MCP_URL: http://manar-mcp:8090
CORE_DB_URL: postgresql://manar:${CORE_DB_PASSWORD}@manar-core-db:5432/manar_core CORE_DB_URL: postgresql://manar:${CORE_DB_PASSWORD}@manar-core-db:5432/manar_core
NEXTAUTH_SECRET: ${NEXTAUTH_SECRET}
NEXTAUTH_URL: https://manar.asktam.net
networks: networks:
- manar-internal - manar-internal
- coolify - coolify
depends_on: depends_on:
- manar-core-db
- manar-mcp - manar-mcp
labels: labels:
- traefik.enable=true - "traefik.enable=true"
- traefik.http.routers.manar.rule=Host(`manar.asktam.net`) - "traefik.http.routers.manar.rule=Host(`manar.asktam.net`)"
- traefik.http.routers.manar.entrypoints=https - "traefik.http.routers.manar.entrypoints=https"
- traefik.http.routers.manar.tls=true - "traefik.http.routers.manar.tls.certresolver=letsencrypt"
- traefik.http.routers.manar.tls.certresolver=letsencrypt - "traefik.http.services.manar.loadbalancer.server.port=3000"
- traefik.http.services.manar.loadbalancer.server.port=3000 - "traefik.docker.network=coolify"
- traefik.docker.network=coolify