Livrare LOT 1 - Didi

This commit is contained in:
Dezvoltari Evotech 2026-06-25 14:13:25 -07:00
commit 5380c3fc63
990 changed files with 133308 additions and 0 deletions

View file

@ -0,0 +1,32 @@
# Catalog API Configuration
# =============================================================================
# Required Configuration (no defaults)
# =============================================================================
# External URL for OpenAPI spec - REQUIRED
# This is the URL that external clients will use to access the APIs
CATALOG_EXTERNAL_URL=http://10.11.10.42
# =============================================================================
# Optional Configuration (has defaults)
# =============================================================================
# Server settings
# CATALOG_HOST=0.0.0.0
# CATALOG_PORT=11000
# CATALOG_LOG_LEVEL=INFO
# Component URLs (Docker internal network)
# CATALOG_LLM_URL=http://didiAI-llm-api:14011
# CATALOG_AUDIO_URL=http://didiAI-audio-api:54300
# CATALOG_VIDEO_URL=http://didiAI-video-api:54600
# CATALOG_WEB_URL=http://didiAI-web-api:51100
# External ports for OpenAPI spec (match your docker-compose port mappings)
# CATALOG_LLM_EXTERNAL_PORT=14011
# CATALOG_AUDIO_EXTERNAL_PORT=54300
# CATALOG_VIDEO_EXTERNAL_PORT=54600
# CATALOG_WEB_EXTERNAL_PORT=51100
# HTTP client settings
# CATALOG_COMPONENT_TIMEOUT=10

View file

@ -0,0 +1,39 @@
# Catalog API - Dockerfile
FROM python:3.11.12-slim AS builder
# Install uv
COPY --from=ghcr.io/astral-sh/uv:0.10 /uv /usr/local/bin/uv
WORKDIR /app
# Copy dependency files
COPY pyproject.toml ./
# Copy source code
COPY src/ ./src/
# Install dependencies (no lockfile yet)
RUN uv sync --no-dev
# Final stage
FROM python:3.11.12-slim
WORKDIR /app
# Copy virtual environment from builder
COPY --from=builder /app/.venv /app/.venv
COPY src/ ./src/
# Set environment
ENV PATH="/app/.venv/bin:$PATH"
ENV PYTHONUNBUFFERED=1
ENV CATALOG_HOST=0.0.0.0
ENV CATALOG_PORT=11000
HEALTHCHECK --interval=30s --timeout=10s --retries=3 \
CMD python -c "import urllib.request; import os; urllib.request.urlopen(f'http://localhost:{os.environ.get(\"CATALOG_PORT\", 11000)}/health')" || exit 1
EXPOSE 11000
CMD python -m uvicorn catalog_api.app:app --host 0.0.0.0 --port ${CATALOG_PORT}

View file

@ -0,0 +1,99 @@
#!/usr/bin/env bash
#
# Docker Compose Startup Script for Catalog API
#
# Usage: ./deploy/deploy.sh [OPTIONS]
#
# Options:
# --detach, -d Run in detached mode
# --down Stop and remove containers
# --logs Show logs
# --help, -h Show this help message
#
# Required: Set environment variables in .env file or export them before running.
# See .env.example for the full list of required variables.
set -euo pipefail
# Script directory
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Load .env file if it exists
ENV_FILE=""
if [[ -f "$SCRIPT_DIR/.env" ]]; then
ENV_FILE="$SCRIPT_DIR/.env"
elif [[ -f "$SCRIPT_DIR/../.env" ]]; then
ENV_FILE="$SCRIPT_DIR/../.env"
fi
if [[ -n "$ENV_FILE" ]]; then
echo "Loading environment from: $ENV_FILE"
set -a
source "$ENV_FILE"
set +a
fi
DETACH=""
ACTION="up"
show_help() {
sed -n '2,16p' "$0" | sed 's/^# //' | sed 's/^#//'
exit 0
}
check_required_var() {
local var_name="$1"
if [[ -z "${!var_name:-}" ]]; then
echo "ERROR: Required environment variable $var_name is not set"
echo "Set it in .env file or export it before running this script"
exit 1
fi
}
# Parse arguments
while [[ $# -gt 0 ]]; do
case $1 in
--detach|-d)
DETACH="-d"
shift
;;
--down)
ACTION="down"
shift
;;
--logs)
ACTION="logs"
shift
;;
--help|-h)
show_help
;;
*)
echo "Unknown option: $1"
echo "Use --help for usage information"
exit 1
;;
esac
done
# Check required variables
check_required_var "CATALOG_EXTERNAL_URL"
cd "$SCRIPT_DIR"
case $ACTION in
up)
echo "Starting Catalog API"
echo " External URL: $CATALOG_EXTERNAL_URL"
echo ""
# shellcheck disable=SC2086
exec docker compose up $DETACH
;;
down)
echo "Stopping Catalog API containers..."
exec docker compose down
;;
logs)
exec docker compose logs -f
;;
esac

View file

@ -0,0 +1,64 @@
# Catalog API - Docker Compose Configuration
#
# Port Allocation (Production API Gateway: 11000):
# 11000 - Catalog API (main orchestrator gateway)
#
# Network:
# Uses deploy_default network (shared with other modules)
#
# Naming Convention: didiAI-{module}-{service}
networks:
didi-network:
external: true # single shared network for all DIDI + AI platform stacks
services:
catalog-api:
container_name: didiAI-catalog-api
image: didiai-catalog-api
build:
context: ..
dockerfile: deploy/Dockerfile
# No external port - accessible only via Gateway (:11000/catalog/)
expose:
- "11000"
networks:
- didi-network
environment:
# Server settings
- CATALOG_HOST=0.0.0.0
- CATALOG_PORT=11000
- CATALOG_LOG_LEVEL=${CATALOG_LOG_LEVEL:-INFO}
# External URL for OpenAPI spec (REQUIRED - no default)
- CATALOG_EXTERNAL_URL=${CATALOG_EXTERNAL_URL}
# Component URLs (Docker internal network)
- CATALOG_LLM_URL=${CATALOG_LLM_URL:-http://didiAI-llm-api:14011}
- CATALOG_AUDIO_URL=${CATALOG_AUDIO_URL:-http://didiAI-audio-api:54300}
- CATALOG_VIDEO_URL=${CATALOG_VIDEO_URL}
- CATALOG_WEB_URL=${CATALOG_WEB_URL:-http://didiAI-web-api:51100}
# External ports for OpenAPI spec (used when generating external URLs)
- CATALOG_LLM_EXTERNAL_PORT=${CATALOG_LLM_EXTERNAL_PORT:-14011}
- CATALOG_AUDIO_EXTERNAL_PORT=${CATALOG_AUDIO_EXTERNAL_PORT:-54300}
- CATALOG_VIDEO_EXTERNAL_PORT=${CATALOG_VIDEO_EXTERNAL_PORT:-54600}
- CATALOG_WEB_EXTERNAL_PORT=${CATALOG_WEB_EXTERNAL_PORT:-51100}
# HTTP client settings
- CATALOG_COMPONENT_TIMEOUT=${CATALOG_COMPONENT_TIMEOUT:-10}
# Runtime config polling
- CATALOG_DASHBOARD_URL=${CATALOG_DASHBOARD_URL:-http://didiAI-dashboard:51300}
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:11000/health')"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
restart: unless-stopped