Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/chethangowda-web_sentinalrag.json
T

1 line
31 KiB
JSON

{"repo": "chethangowda-web/sentinalrag", "files": {"docker-compose.yml": {"45e8b32106c3dd4a4f7d42df1a8c266f2fc01ab3": {"t": 1785746990.1588135, "n": 4477, "h": "cd2b9d7f436309c9", "c": "services:\n\n # ─── PostgreSQL ───────────────────────────────────────\n postgres:\n image: postgres:16-alpine\n container_name: sentinelrag-postgres\n restart: unless-stopped\n environment:\n POSTGRES_USER: sentinel\n POSTGRES_PASSWORD: sentinel\n POSTGRES_DB: sentinelrag\n ports:\n - \"5432:5432\"\n volumes:\n - postgres_data:/var/lib/postgresql/data\n healthcheck:\n test: [\"CMD-SHELL\", \"pg_isready -U sentinel -d sentinelrag\"]\n interval: 10s\n timeout: 5s\n retries: 5\n start_period: 10s\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ─── Qdrant ───────────────────────────────────────────\n # Healthcheck uses process check (kill -0 1) because the official Qdrant image\n # does not ship with curl, wget, or Python. PID 1 is always the qdrant binary.\n qdrant:\n image: qdrant/qdrant:v1.13.0\n container_name: sentinelrag-qdrant\n restart: unless-stopped\n ports:\n - \"6333:6333\"\n - \"6334:6334\"\n volumes:\n - qdrant_data:/qdrant/storage\n healthcheck:\n test: [\"CMD\", \"sh\", \"-c\", \"kill -0 1 2>/dev/null\"]\n interval: 10s\n timeout: 5s\n retries: 5\n start_period: 15s\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ─── Backend ──────────────────────────────────────────\n backend:\n build:\n context: ./backend\n dockerfile: Dockerfile\n container_name: sentinelrag-backend\n restart: unless-stopped\n expose:\n - \"8000\"\n environment:\n DATABASE_URL: postgresql+asyncpg://sentinel:sentinel@postgres:5432/sentinelrag\n QDRANT_URL: http://qdrant:6333\n LOG_LEVEL: ${LOG_LEVEL:-INFO}\n # change-me-in-production is safe for local dev; generate a real key for production\n SECRET_KEY: ${SECRET_KEY:-change-me-in-production}\n BACKEND_CORS_ORIGINS: '[\"http://localhost:3000\",\"http://localhost\"]'\n UPLOAD_DIR: /data/uploads\n PROCESSED_DIR: /data/processed\n DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY:-}\n DEEPSEEK_BASE_URL: ${DEEPSEEK_BASE_URL:-https://api.deepseek.com/v1}\n FEATHERLESS_API_KEY: ${FEATHERLESS_API_KEY:-}\n FEATHERLESS_BASE_URL: ${FEATHERLESS_BASE_URL:-}\n FEATHERLESS_MODEL: ${FEATHERLESS_MODEL:-}\n LLM_TEMPERATURE: ${LLM_TEMPERATURE:-0.1}\n # Ensure no CUDA devices are visible (CPU-only)\n CUDA_VISIBLE_DEVICES: \"\"\n volumes:\n - app_data:/data\n depends_on:\n postgres:\n condition: service_healthy\n qdrant:\n condition: service_started\n healthcheck:\n test: [\"CMD\", \"curl\", \"-sf\", \"http://localhost:8000/api/v1/health\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 90s\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ─── Frontend ─────────────────────────────────────────\n frontend:\n build:\n context: ./frontend\n dockerfile: Dockerfile\n args:\n NEXT_PUBLIC_API_URL: \"\"\n container_name: sentinelrag-frontend\n restart: unless-stopped\n expose:\n - \"3000\"\n environment:\n NEXT_PUBLIC_API_URL: \"\"\n HOSTNAME: \"0.0.0.0\"\n depends_on:\n backend:\n condition: service_started\n healthcheck:\n test: [\"CMD\", \"wget\", \"-q\", \"--spider\", \"http://127.0.0.1:3000\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 30s\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ─── NGINX Reverse Proxy ──────────────────────────────\n nginx:\n image: nginx:1.27-alpine\n container_name: sentinelrag-nginx\n restart: unless-stopped\n ports:\n - \"80:80\"\n volumes:\n - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro\n depends_on:\n backend:\n condition: service_started\n frontend:\n condition: service_started\n healthcheck:\n test: [\"CMD\", \"sh\", \"-c\", \"kill -0 1 2>/dev/null\"]\n interval: 30s\n timeout: 5s\n retries: 3\n start_period: 5s\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\nvolumes:\n postgres_data:\n qdrant_data:\n app_data:\n\nnetworks:\n sentinelrag:\n name: sentinelrag-network\n driver: bridge\n"}, "f389b785bfd3fbfd9362caa88884c2836c11ce0f": {"t": 1785769553.7120237, "n": 4477, "h": "cd2b9d7f436309c9", "c": "services:\n\n # ─── PostgreSQL ───────────────────────────────────────\n postgres:\n image: postgres:16-alpine\n container_name: sentinelrag-postgres\n restart: unless-stopped\n environment:\n POSTGRES_USER: sentinel\n POSTGRES_PASSWORD: sentinel\n POSTGRES_DB: sentinelrag\n ports:\n - \"5432:5432\"\n volumes:\n - postgres_data:/var/lib/postgresql/data\n healthcheck:\n test: [\"CMD-SHELL\", \"pg_isready -U sentinel -d sentinelrag\"]\n interval: 10s\n timeout: 5s\n retries: 5\n start_period: 10s\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ─── Qdrant ───────────────────────────────────────────\n # Healthcheck uses process check (kill -0 1) because the official Qdrant image\n # does not ship with curl, wget, or Python. PID 1 is always the qdrant binary.\n qdrant:\n image: qdrant/qdrant:v1.13.0\n container_name: sentinelrag-qdrant\n restart: unless-stopped\n ports:\n - \"6333:6333\"\n - \"6334:6334\"\n volumes:\n - qdrant_data:/qdrant/storage\n healthcheck:\n test: [\"CMD\", \"sh\", \"-c\", \"kill -0 1 2>/dev/null\"]\n interval: 10s\n timeout: 5s\n retries: 5\n start_period: 15s\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ─── Backend ──────────────────────────────────────────\n backend:\n build:\n context: ./backend\n dockerfile: Dockerfile\n container_name: sentinelrag-backend\n restart: unless-stopped\n expose:\n - \"8000\"\n environment:\n DATABASE_URL: postgresql+asyncpg://sentinel:sentinel@postgres:5432/sentinelrag\n QDRANT_URL: http://qdrant:6333\n LOG_LEVEL: ${LOG_LEVEL:-INFO}\n # change-me-in-production is safe for local dev; generate a real key for production\n SECRET_KEY: ${SECRET_KEY:-change-me-in-production}\n BACKEND_CORS_ORIGINS: '[\"http://localhost:3000\",\"http://localhost\"]'\n UPLOAD_DIR: /data/uploads\n PROCESSED_DIR: /data/processed\n DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY:-}\n DEEPSEEK_BASE_URL: ${DEEPSEEK_BASE_URL:-https://api.deepseek.com/v1}\n FEATHERLESS_API_KEY: ${FEATHERLESS_API_KEY:-}\n FEATHERLESS_BASE_URL: ${FEATHERLESS_BASE_URL:-}\n FEATHERLESS_MODEL: ${FEATHERLESS_MODEL:-}\n LLM_TEMPERATURE: ${LLM_TEMPERATURE:-0.1}\n # Ensure no CUDA devices are visible (CPU-only)\n CUDA_VISIBLE_DEVICES: \"\"\n volumes:\n - app_data:/data\n depends_on:\n postgres:\n condition: service_healthy\n qdrant:\n condition: service_started\n healthcheck:\n test: [\"CMD\", \"curl\", \"-sf\", \"http://localhost:8000/api/v1/health\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 90s\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ─── Frontend ─────────────────────────────────────────\n frontend:\n build:\n context: ./frontend\n dockerfile: Dockerfile\n args:\n NEXT_PUBLIC_API_URL: \"\"\n container_name: sentinelrag-frontend\n restart: unless-stopped\n expose:\n - \"3000\"\n environment:\n NEXT_PUBLIC_API_URL: \"\"\n HOSTNAME: \"0.0.0.0\"\n depends_on:\n backend:\n condition: service_started\n healthcheck:\n test: [\"CMD\", \"wget\", \"-q\", \"--spider\", \"http://127.0.0.1:3000\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 30s\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ─── NGINX Reverse Proxy ──────────────────────────────\n nginx:\n image: nginx:1.27-alpine\n container_name: sentinelrag-nginx\n restart: unless-stopped\n ports:\n - \"80:80\"\n volumes:\n - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro\n depends_on:\n backend:\n condition: service_started\n frontend:\n condition: service_started\n healthcheck:\n test: [\"CMD\", \"sh\", \"-c\", \"kill -0 1 2>/dev/null\"]\n interval: 30s\n timeout: 5s\n retries: 3\n start_period: 5s\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\nvolumes:\n postgres_data:\n qdrant_data:\n app_data:\n\nnetworks:\n sentinelrag:\n name: sentinelrag-network\n driver: bridge\n"}, "9e9a263ad9a023d2d5eda49cb628a7931665edc5": {"t": 1785769555.0455763, "n": 4368, "h": "2ec63ade56012f13", "c": "services:\n\n # ─── PostgreSQL ───────────────────────────────────────\n postgres:\n image: postgres:16-alpine\n container_name: sentinelrag-postgres\n restart: unless-stopped\n environment:\n POSTGRES_USER: sentinel\n POSTGRES_PASSWORD: sentinel\n POSTGRES_DB: sentinelrag\n ports:\n - \"5432:5432\"\n volumes:\n - postgres_data:/var/lib/postgresql/data\n healthcheck:\n test: [\"CMD-SHELL\", \"pg_isready -U sentinel -d sentinelrag\"]\n interval: 10s\n timeout: 5s\n retries: 5\n start_period: 10s\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ─── Qdrant ───────────────────────────────────────────\n # Healthcheck uses process check (kill -0 1) because the official Qdrant image\n # does not ship with curl, wget, or Python. PID 1 is always the qdrant binary.\n qdrant:\n image: qdrant/qdrant:v1.13.0\n container_name: sentinelrag-qdrant\n restart: unless-stopped\n ports:\n - \"6333:6333\"\n - \"6334:6334\"\n volumes:\n - qdrant_data:/qdrant/storage\n healthcheck:\n test: [\"CMD\", \"sh\", \"-c\", \"kill -0 1 2>/dev/null\"]\n interval: 10s\n timeout: 5s\n retries: 5\n start_period: 15s\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ─── Backend ──────────────────────────────────────────\n backend:\n build:\n context: ./backend\n dockerfile: Dockerfile\n container_name: sentinelrag-backend\n restart: unless-stopped\n expose:\n - \"8000\"\n environment:\n DATABASE_URL: postgresql+asyncpg://sentinel:sentinel@postgres:5432/sentinelrag\n QDRANT_URL: http://qdrant:6333\n LOG_LEVEL: ${LOG_LEVEL:-INFO}\n # change-me-in-production is safe for local dev; generate a real key for production\n SECRET_KEY: ${SECRET_KEY:-change-me-in-production}\n BACKEND_CORS_ORIGINS: '[\"http://localhost:3000\",\"http://localhost\"]'\n UPLOAD_DIR: /data/uploads\n PROCESSED_DIR: /data/processed\n DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY:-}\n DEEPSEEK_BASE_URL: ${DEEPSEEK_BASE_URL:-https://api.deepseek.com/v1}\n LLM_MODEL: ${LLM_MODEL:-deepseek-chat}\n LLM_TEMPERATURE: ${LLM_TEMPERATURE:-0.1}\n # Ensure no CUDA devices are visible (CPU-only)\n CUDA_VISIBLE_DEVICES: \"\"\n volumes:\n - app_data:/data\n depends_on:\n postgres:\n condition: service_healthy\n qdrant:\n condition: service_started\n healthcheck:\n test: [\"CMD\", \"curl\", \"-sf\", \"http://localhost:8000/api/v1/health\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 90s\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ─── Frontend ─────────────────────────────────────────\n frontend:\n build:\n context: ./frontend\n dockerfile: Dockerfile\n args:\n NEXT_PUBLIC_API_URL: \"\"\n container_name: sentinelrag-frontend\n restart: unless-stopped\n expose:\n - \"3000\"\n environment:\n NEXT_PUBLIC_API_URL: \"\"\n HOSTNAME: \"0.0.0.0\"\n depends_on:\n backend:\n condition: service_started\n healthcheck:\n test: [\"CMD\", \"wget\", \"-q\", \"--spider\", \"http://127.0.0.1:3000\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 30s\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ─── NGINX Reverse Proxy ──────────────────────────────\n nginx:\n image: nginx:1.27-alpine\n container_name: sentinelrag-nginx\n restart: unless-stopped\n ports:\n - \"80:80\"\n volumes:\n - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro\n depends_on:\n backend:\n condition: service_started\n frontend:\n condition: service_started\n healthcheck:\n test: [\"CMD\", \"sh\", \"-c\", \"kill -0 1 2>/dev/null\"]\n interval: 30s\n timeout: 5s\n retries: 3\n start_period: 5s\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\nvolumes:\n postgres_data:\n qdrant_data:\n app_data:\n\nnetworks:\n sentinelrag:\n name: sentinelrag-network\n driver: bridge\n"}, "985fe9ae62f405a576485fe58aecdf54d9e31687": {"t": 1785769556.3121648, "n": 4533, "h": "9fbdc01dce2c44e6", "c": "services:\n\n # ─── PostgreSQL ───────────────────────────────────────\n postgres:\n image: postgres:16-alpine\n container_name: sentinelrag-postgres\n restart: unless-stopped\n environment:\n POSTGRES_USER: sentinel\n POSTGRES_PASSWORD: sentinel\n POSTGRES_DB: sentinelrag\n ports:\n - \"5432:5432\"\n volumes:\n - postgres_data:/var/lib/postgresql/data\n healthcheck:\n test: [\"CMD-SHELL\", \"pg_isready -U sentinel -d sentinelrag\"]\n interval: 5s\n timeout: 5s\n retries: 5\n start_period: 10s\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ─── Redis ────────────────────────────────────────────\n redis:\n image: redis:7-alpine\n container_name: sentinelrag-redis\n restart: unless-stopped\n ports:\n - \"6379:6379\"\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 5s\n timeout: 5s\n retries: 5\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ─── Qdrant ───────────────────────────────────────────\n qdrant:\n image: qdrant/qdrant:v1.13.0\n container_name: sentinelrag-qdrant\n restart: unless-stopped\n ports:\n - \"6333:6333\"\n - \"6334:6334\"\n volumes:\n - qdrant_data:/qdrant/storage\n healthcheck:\n test: [\"CMD\", \"curl\", \"-sf\", \"http://localhost:6333/health\"]\n interval: 10s\n timeout: 5s\n retries: 5\n start_period: 10s\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ─── Backend ──────────────────────────────────────────\n backend:\n build:\n context: ./backend\n dockerfile: Dockerfile\n container_name: sentinelrag-backend\n restart: unless-stopped\n expose:\n - \"8000\"\n environment:\n DATABASE_URL: postgresql+asyncpg://sentinel:sentinel@postgres:5432/sentinelrag\n REDIS_URL: redis://redis:6379/0\n QDRANT_URL: http://qdrant:6333\n # Generate with: python -c \"import secrets; print(secrets.token_urlsafe(32))\"\n SECRET_KEY: ${SECRET_KEY:-}\n LOG_LEVEL: ${LOG_LEVEL:-INFO}\n BACKEND_CORS_ORIGINS: '[\"http://localhost:3000\",\"http://localhost\"]'\n UPLOAD_DIR: /data/uploads\n PROCESSED_DIR: /data/processed\n DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY:-}\n DEEPSEEK_BASE_URL: ${DEEPSEEK_BASE_URL:-https://api.deepseek.com/v1}\n LLM_MODEL: ${LLM_MODEL:-deepseek-chat}\n LLM_TEMPERATURE: ${LLM_TEMPERATURE:-0.1}\n volumes:\n - app_data:/data\n depends_on:\n postgres:\n condition: service_healthy\n redis:\n condition: service_healthy\n qdrant:\n condition: service_healthy\n healthcheck:\n test: [\"CMD\", \"curl\", \"-sf\", \"http://localhost:8000/api/v1/health\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 60s\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ─── Frontend ─────────────────────────────────────────\n frontend:\n build:\n context: ./frontend\n dockerfile: Dockerfile\n container_name: sentinelrag-frontend\n restart: unless-stopped\n expose:\n - \"3000\"\n environment:\n NEXT_PUBLIC_API_URL: \"\"\n depends_on:\n backend:\n condition: service_healthy\n healthcheck:\n test: [\"CMD\", \"wget\", \"--no-verbose\", \"--tries=1\", \"--spider\", \"http://localhost:3000\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 30s\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ─── NGINX Reverse Proxy ──────────────────────────────\n nginx:\n image: nginx:1.27-alpine\n container_name: sentinelrag-nginx\n restart: unless-stopped\n ports:\n - \"80:80\"\n volumes:\n - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro\n depends_on:\n backend:\n condition: service_healthy\n frontend:\n condition: service_healthy\n healthcheck:\n test: [\"CMD\", \"nginx\", \"-t\"]\n interval: 30s\n timeout: 5s\n retries: 3\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\nvolumes:\n postgres_data:\n qdrant_data:\n app_data:\n\nnetworks:\n sentinelrag:\n name: sentinelrag-network\n driver: bridge\n"}, "bc1038ecbb3959c8a70f5503838251312361b49f": {"t": 1785769558.7129428, "n": 4472, "h": "ebeba37a7cf7ed64", "c": "services:\n\n # ─── PostgreSQL ───────────────────────────────────────\n postgres:\n image: postgres:16-alpine\n container_name: sentinelrag-postgres\n restart: unless-stopped\n environment:\n POSTGRES_USER: sentinel\n POSTGRES_PASSWORD: sentinel\n POSTGRES_DB: sentinelrag\n ports:\n - \"5432:5432\"\n volumes:\n - postgres_data:/var/lib/postgresql/data\n healthcheck:\n test: [\"CMD-SHELL\", \"pg_isready -U sentinel -d sentinelrag\"]\n interval: 5s\n timeout: 5s\n retries: 5\n start_period: 10s\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ─── Redis ────────────────────────────────────────────\n redis:\n image: redis:7-alpine\n container_name: sentinelrag-redis\n restart: unless-stopped\n ports:\n - \"6379:6379\"\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 5s\n timeout: 5s\n retries: 5\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ─── Qdrant ───────────────────────────────────────────\n qdrant:\n image: qdrant/qdrant:v1.13.0\n container_name: sentinelrag-qdrant\n restart: unless-stopped\n ports:\n - \"6333:6333\"\n - \"6334:6334\"\n volumes:\n - qdrant_data:/qdrant/storage\n healthcheck:\n test: [\"CMD\", \"curl\", \"-sf\", \"http://localhost:6333/health\"]\n interval: 10s\n timeout: 5s\n retries: 5\n start_period: 10s\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ─── Backend ──────────────────────────────────────────\n backend:\n build:\n context: ./backend\n dockerfile: Dockerfile\n container_name: sentinelrag-backend\n restart: unless-stopped\n expose:\n - \"8000\"\n environment:\n DATABASE_URL: postgresql+asyncpg://sentinel:sentinel@postgres:5432/sentinelrag\n REDIS_URL: redis://redis:6379/0\n QDRANT_URL: http://qdrant:6333\n SECRET_KEY: ${SECRET_KEY:-change-me-in-production}\n LOG_LEVEL: ${LOG_LEVEL:-INFO}\n BACKEND_CORS_ORIGINS: '[\"http://localhost:3000\",\"http://localhost\"]'\n UPLOAD_DIR: /data/uploads\n PROCESSED_DIR: /data/processed\n DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY:-}\n DEEPSEEK_BASE_URL: ${DEEPSEEK_BASE_URL:-https://api.deepseek.com/v1}\n LLM_MODEL: ${LLM_MODEL:-deepseek-chat}\n LLM_TEMPERATURE: ${LLM_TEMPERATURE:-0.1}\n volumes:\n - app_data:/data\n depends_on:\n postgres:\n condition: service_healthy\n redis:\n condition: service_healthy\n qdrant:\n condition: service_healthy\n healthcheck:\n test: [\"CMD\", \"curl\", \"-sf\", \"http://localhost:8000/api/v1/health\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 60s\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ─── Frontend ─────────────────────────────────────────\n frontend:\n build:\n context: ./frontend\n dockerfile: Dockerfile\n container_name: sentinelrag-frontend\n restart: unless-stopped\n expose:\n - \"3000\"\n environment:\n NEXT_PUBLIC_API_URL: \"\"\n depends_on:\n backend:\n condition: service_healthy\n healthcheck:\n test: [\"CMD\", \"wget\", \"--no-verbose\", \"--tries=1\", \"--spider\", \"http://localhost:3000\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 30s\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ─── NGINX Reverse Proxy ──────────────────────────────\n nginx:\n image: nginx:1.27-alpine\n container_name: sentinelrag-nginx\n restart: unless-stopped\n ports:\n - \"80:80\"\n volumes:\n - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro\n depends_on:\n backend:\n condition: service_healthy\n frontend:\n condition: service_healthy\n healthcheck:\n test: [\"CMD\", \"nginx\", \"-t\"]\n interval: 30s\n timeout: 5s\n retries: 3\n networks:\n - sentinelrag\n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\nvolumes:\n postgres_data:\n qdrant_data:\n app_data:\n\nnetworks:\n sentinelrag:\n name: sentinelrag-network\n driver: bridge\n"}, "0a84af23a14fd9197cf225b1d5c75ed32b0a0567": {"t": 1785769560.6509018, "n": 2145, "h": "947dba678bcc1d44", "c": "services:\n\n postgres:\n image: postgres:16-alpine\n container_name: sentinelrag-postgres\n restart: unless-stopped\n environment:\n POSTGRES_USER: sentinel\n POSTGRES_PASSWORD: sentinel\n POSTGRES_DB: sentinelrag\n ports:\n - \"5432:5432\"\n volumes:\n - postgres_data:/var/lib/postgresql/data\n healthcheck:\n test: [\"CMD-SHELL\", \"pg_isready -U sentinel -d sentinelrag\"]\n interval: 5s\n timeout: 5s\n retries: 5\n\n redis:\n image: redis:7-alpine\n container_name: sentinelrag-redis\n restart: unless-stopped\n ports:\n - \"6379:6379\"\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 5s\n timeout: 5s\n retries: 5\n\n qdrant:\n image: qdrant/qdrant:v1.13.0\n container_name: sentinelrag-qdrant\n restart: unless-stopped\n ports:\n - \"6333:6333\"\n - \"6334:6334\"\n volumes:\n - qdrant_data:/qdrant/storage\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:6333/health\"]\n interval: 10s\n timeout: 5s\n retries: 5\n\n backend:\n build:\n context: ./backend\n dockerfile: Dockerfile\n container_name: sentinelrag-backend\n restart: unless-stopped\n ports:\n - \"8000:8000\"\n environment:\n DATABASE_URL: postgresql+asyncpg://sentinel:sentinel@postgres:5432/sentinelrag\n REDIS_URL: redis://redis:6379/0\n QDRANT_URL: http://qdrant:6333\n SECRET_KEY: ${SECRET_KEY:-change-me-in-production}\n LOG_LEVEL: INFO\n BACKEND_CORS_ORIGINS: '[\"http://localhost:3000\"]'\n UPLOAD_DIR: /data/uploads\n PROCESSED_DIR: /data/processed\n volumes:\n - app_data:/data\n depends_on:\n postgres:\n condition: service_healthy\n redis:\n condition: service_healthy\n qdrant:\n condition: service_healthy\n\n frontend:\n build:\n context: ./frontend\n dockerfile: Dockerfile\n container_name: sentinelrag-frontend\n restart: unless-stopped\n ports:\n - \"3000:3000\"\n environment:\n NEXT_PUBLIC_API_URL: http://localhost:8000\n depends_on:\n - backend\n\nvolumes:\n postgres_data:\n qdrant_data:\n app_data:\n"}, "2286881daf32357f7f79d78980301438c3457e30": {"t": 1785769562.9446328, "n": 2028, "h": "1d014454eb9d4f2f", "c": "services:\n\n postgres:\n image: postgres:16-alpine\n container_name: sentinelrag-postgres\n restart: unless-stopped\n environment:\n POSTGRES_USER: sentinel\n POSTGRES_PASSWORD: sentinel\n POSTGRES_DB: sentinelrag\n ports:\n - \"5432:5432\"\n volumes:\n - postgres_data:/var/lib/postgresql/data\n healthcheck:\n test: [\"CMD-SHELL\", \"pg_isready -U sentinel -d sentinelrag\"]\n interval: 5s\n timeout: 5s\n retries: 5\n\n redis:\n image: redis:7-alpine\n container_name: sentinelrag-redis\n restart: unless-stopped\n ports:\n - \"6379:6379\"\n healthcheck:\n test: [\"CMD\", \"redis-cli\", \"ping\"]\n interval: 5s\n timeout: 5s\n retries: 5\n\n qdrant:\n image: qdrant/qdrant:v1.13.0\n container_name: sentinelrag-qdrant\n restart: unless-stopped\n ports:\n - \"6333:6333\"\n - \"6334:6334\"\n volumes:\n - qdrant_data:/qdrant/storage\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:6333/health\"]\n interval: 10s\n timeout: 5s\n retries: 5\n\n backend:\n build:\n context: ./backend\n dockerfile: Dockerfile\n container_name: sentinelrag-backend\n restart: unless-stopped\n ports:\n - \"8000:8000\"\n environment:\n DATABASE_URL: postgresql+asyncpg://sentinel:sentinel@postgres:5432/sentinelrag\n REDIS_URL: redis://redis:6379/0\n QDRANT_URL: http://qdrant:6333\n SECRET_KEY: ${SECRET_KEY:-change-me-in-production}\n LOG_LEVEL: INFO\n BACKEND_CORS_ORIGINS: '[\"http://localhost:3000\"]'\n depends_on:\n postgres:\n condition: service_healthy\n redis:\n condition: service_healthy\n qdrant:\n condition: service_healthy\n\n frontend:\n build:\n context: ./frontend\n dockerfile: Dockerfile\n container_name: sentinelrag-frontend\n restart: unless-stopped\n ports:\n - \"3000:3000\"\n environment:\n NEXT_PUBLIC_API_URL: http://localhost:8000\n depends_on:\n - backend\n\nvolumes:\n postgres_data:\n qdrant_data:\n"}}}}