Files
qihuaiflow/docker-compose.yml
T
qihu-bot fd84fec5b1 #965 LiteLLM model sync - STORE_MODEL_IN_DB + API integration
docker-compose.yml +STORE_MODEL_IN_DB=True enables LiteLLM dynamic model management via REST API. models.py admin CRUD now syncs to LiteLLM via threading.
2026-08-11 15:27:57 +08:00

163 lines
6.0 KiB
YAML

# ============================================================
# Qihu-AIFlow 智能自动化PaaS平台 - Docker Compose 配置
# ============================================================
# 部署方式:
# docker compose up -d
# 或: docker compose up -d --build (重建镜像)
#
# 端口说明:
# 前端 (Nginx): 宿主机 12888 -> 容器内 8080
# 后端 (Uvicorn): 宿主机 18080 -> 容器内 18080
# ============================================================
services:
aiflow:
build:
context: .
dockerfile: Dockerfile
image: qihuaiflow:with-deps
container_name: qihu-aiflow
ports:
- "12888:8080"
- "18080:18080"
environment:
- DATABASE_URL=postgresql+psycopg://aiflow:pwd2026@qihu-aiflow-pg18:5432/aiflow
- POSTGRES_HOST=qihu-aiflow-pg18
- POSTGRES_PORT=5432
- POSTGRES_USER=aiflow
- POSTGRES_PASSWORD=pwd2026
- POSTGRES_DB=aiflow_vectors
- PG_HOST=qihu-aiflow-pg18
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_PASSWORD=pwd2026
- SECRET_KEY=aiflow-secret-key-change-in-production-2026
- APP_ACCESS_URL=http://210.16.161.218:12888
- DEBUG=false
- SILICONFLOW_API_KEY=sk-idsplzeccvmbtyqxcrbhaiwmkzwajmicliunkjkouivepaaz
- SILICONFLOW_BASE_URL=https://api.siliconflow.cn
- DEFAULT_MODEL=deepseek-ai/DeepSeek-V4-Flash
- SILICONFLOW_API_KEY=sk-idsplzeccvmbtyqxcrbhaiwmkzwajmicliunkjkouivepaaz
- SILICONFLOW_BASE_URL=https://api.siliconflow.cn
- DEFAULT_MODEL=deepseek-ai/DeepSeek-V4-Flash
- SILICONFLOW_API_KEY=sk-idsplzeccvmbtyqxcrbhaiwmkzwajmicliunkjkouivepaaz
- SILICONFLOW_BASE_URL=https://api.siliconflow.cn
- DEFAULT_MODEL=deepseek-ai/DeepSeek-V4-Flash
- SILICONFLOW_API_KEY=sk-idsplzeccvmbtyqxcrbhaiwmkzwajmicliunkjkouivepaaz
- SILICONFLOW_BASE_URL=https://api.siliconflow.cn
- DEFAULT_MODEL=deepseek-ai/DeepSeek-V4-Flash
- HTTP_PROXY=http://172.18.0.1:7890
- HTTPS_PROXY=http://172.18.0.1:7890
- NO_PROXY=localhost,127.0.0.1,::1,210.16.161.2,qihu-aiflow-litellm,qihu-aiflow-meilisearch,qihu-aiflow-pg18,qihu-aiflow-redis,qihu-aiflow-casdoor18,172.17.0.0/16,172.18.0.0/16,172.19.0.0/16,172.20.0.0/16,10.0.0.0/8,192.168.0.0/16,.svc,.local,casdoor,qihu-aiflow-mysql,qihu-aiflow-redis,qihu-aiflow-pgvector,qihu-aiflow-pg18,qihu-aiflow-casdoor,qihuyun.com,ai.qihuyun.com,docs.qihuyun.com,bot.qihuyun.com,siliconflow.cn,api.siliconflow.cn,deepseek.com,api.deepseek.com,volcengineapi.com,aliyun.com,aliyuncs.com,dysmsapi.aliyuncs.com,tencentcloudapi.com,baidubce.com,dashscope.com,qwen.ai,zhipuai.cn,moonshot.cn,minimax.chat,baichuan.com,chatglm.cn,xiaomimimo.com,token-plan-cn.xiaomimimo.com,mi.com,pypi.tuna.tsinghua.edu.cn,feishu.cn,open.feishu.cn,dingtalk.com,open.dingtalk.com,weixin.qq.com,developers.weixin.qq.com,qyapi.weixin.qq.com,ilinkai.weixin.qq.com,tencent.com
depends_on:
redis:
condition: service_started
restart: unless-stopped
networks:
- aiflow-network
volumes:
- ./data:/app/data
logging:
driver: json-file
options:
max-size: "50m"
max-file: "10"
redis:
image: redis:7-alpine
container_name: qihu-aiflow-redis
command: redis-server --requirepass pwd2026 --appendonly yes
ports:
- "6379:6379"
volumes:
- redis_data:/data
restart: unless-stopped
networks:
- aiflow-network
logging:
driver: json-file
options:
max-size: "20m"
max-file: "5"
# Phase 0B: LiteLLM Proxy - Unified AI Gateway
litellm:
image: ghcr.io/berriai/litellm:main-stable
container_name: qihu-aiflow-litellm
command: ["--config", "/app/config.yaml", "--port", "4000"]
ports:
- "14000:4000"
volumes:
- ./config/litellm_config.yaml:/app/config.yaml
environment:
- HTTP_PROXY=http://qyyfw:XHR521yhf@103.242.14.208:11495
- HTTPS_PROXY=http://qyyfw:XHR521yhf@103.242.14.208:11495
- NO_PROXY=localhost,127.0.0.1,qihu-aiflow-pg18
- LITELLM_MASTER_KEY=sk-litellm-master-key-aiflow-2026
- SILICONFLOW_API_KEY=sk-idsplzeccvmbtyqxcrbhaiwmkzwajmicliunkjkouivepaaz
- AGNES_API_KEY=sk-idsplzeccvmbtyqxcrbhaiwmkzwajmicliunkjkouivepaaz
- LITELLM_CONFIG=/app/config.yaml
- MIMO_API_KEY=sk-idsplzeccvmbtyqxcrbhaiwmkzwajmicliunkjkouivepaaz
- DATABASE_URL=postgresql://aiflow:pwd2026@qihu-aiflow-pg18:5432/litellm
- LITELLM_MODE=PRODUCTION
- STORE_MODEL_IN_DB=True
restart: unless-stopped
networks:
- aiflow-network
meilisearch:
image: getmeili/meilisearch:v1.11
container_name: qihu-aiflow-meilisearch
ports:
- "17700:7700"
volumes:
- meilisearch_data:/meili_data
environment:
- MEILI_MASTER_KEY=meili-master-key-aiflow-2026
- MEILI_ENV=production
- MEILI_NO_ANALYTICS=true
restart: unless-stopped
networks:
- aiflow-network
# MuMuAINovel - AI Novel Creation (Phase2 App Service #1)
mumuainovel:
image: mumujie/mumuainovel:latest
container_name: qihu-aiflow-mumuainovel
restart: unless-stopped
networks:
- aiflow-network
environment:
- OPENAI_BASE_URL=http://qihu-aiflow-litellm:4000/v1
- OPENAI_API_KEY=sk-litellm-master-key-aiflow-2026
- DEFAULT_AI_PROVIDER=openai
- DEFAULT_MODEL=deepseek-v4-flash
- POSTGRES_HOST=qihu-aiflow-pg18
- POSTGRES_DB=mumuainovel
- POSTGRES_USER=aiflow
- POSTGRES_PASSWORD=pwd2026
- LOCAL_AUTH_ENABLED=true
- LOCAL_AUTH_USERNAME=mumu_admin
- LOCAL_AUTH_PASSWORD=mumu_admin_2026
- LINUXDO_AUTH_ENABLED=false
# MuMuAINovel OIDC Sidecar (GPL compliance boundary)
mumuainovel-oidc:
image: nginx:alpine
container_name: qihu-aiflow-mumuainovel-oidc
restart: unless-stopped
networks:
- aiflow-network
volumes:
- ./config/nginx/mumuainovel-oidc.conf:/etc/nginx/conf.d/default.conf
depends_on:
- mumuainovel
volumes:
redis_data:
meilisearch_data:
networks:
aiflow-network:
driver: bridge