diff --git a/.env.example b/.env.example index 71d00ed..8479073 100644 --- a/.env.example +++ b/.env.example @@ -1,6 +1,7 @@ CLIPROXY_API_KEY=replace-with-the-key-from-cliproxyapi-config GEMINI_API_KEY=replace-with-your-gemini-api-key JUPYTER_TOKEN=replace-with-a-strong-random-token +OPEN_TERMINAL_API_KEY=replace-with-a-strong-random-key WEBUI_AUTH=true ENABLE_LOGIN_FORM=true diff --git a/cliproxyapi/config.example.yaml b/cliproxyapi/config.example.yaml index d1fa388..4663555 100644 --- a/cliproxyapi/config.example.yaml +++ b/cliproxyapi/config.example.yaml @@ -30,4 +30,4 @@ oauth-model-alias: - name: 'gpt-5.5' alias: 'GPT 5.5' fork: true - force-mapping: true \ No newline at end of file + force-mapping: true diff --git a/docker-compose-online.yml b/docker-compose-online.yml new file mode 100644 index 0000000..eaf9f2f --- /dev/null +++ b/docker-compose-online.yml @@ -0,0 +1,116 @@ +name: ai_stack + +services: + cli-proxy-api: + image: eceasy/cli-proxy-api:latest + container_name: cli-proxy-api + pull_policy: always + ports: + - '0.0.0.0:8317:8317' + - '0.0.0.0:8085:8085' + - '0.0.0.0:1455:1455' + - '0.0.0.0:54545:54545' + - '0.0.0.0:51121:51121' + - '0.0.0.0:11451:11451' + volumes: + - ./cliproxyapi/config.yaml:/CLIProxyAPI/config.yaml:ro + - ./cliproxyapi/auths:/root/.cli-proxy-api + - ./cliproxyapi/logs:/CLIProxyAPI/logs + restart: unless-stopped + litellm: + image: docker.litellm.ai/berriai/litellm:main-stable + container_name: litellm + ports: + - '18003:4000' + environment: + - GEMINI_API_KEY=${GEMINI_API_KEY} + - CLIPROXY_API_KEY=${CLIPROXY_API_KEY} + volumes: + - ./litellm:/app/litellm:ro + env_file: + - .env + depends_on: + - cli-proxy-api + command: > + --config /app/litellm/config.yaml + --port 4000 + restart: unless-stopped + + jupyter: + image: quay.io/jupyter/datascience-notebook:latest + container_name: ai-chat-jupyter + environment: + - JUPYTER_TOKEN=${JUPYTER_TOKEN} + command: > + start-notebook.py + --ServerApp.token=${JUPYTER_TOKEN} + --ServerApp.password= + --ServerApp.allow_origin=* + volumes: + - jupyter-work:/home/jovyan/work + restart: unless-stopped + + open-terminal: + image: ghcr.io/open-webui/open-terminal:latest + container_name: open-terminal + environment: + - OPEN_TERMINAL_API_KEY=${OPEN_TERMINAL_API_KEY:?OPEN_TERMINAL_API_KEY is required} + volumes: + - open-terminal:/home/user + restart: unless-stopped + + open-webui: + image: ghcr.io/open-webui/open-webui:main + container_name: open-webui + pull_policy: always + ports: + - '18004:8080' + environment: + - OPENAI_API_BASE_URLS=http://litellm:4000/v1;http://cli-proxy-api:8317/v1 + - OPENAI_API_KEYS=dummy;${CLIPROXY_API_KEY} + - >- + TERMINAL_SERVER_CONNECTIONS=[{"id":"open-terminal","url":"http://open-terminal:8000","key":"${OPEN_TERMINAL_API_KEY}","name":"Open Terminal","auth_type":"bearer","config":{"access_grants":[]}}] + - WEBUI_AUTH=true + - WEBUI_NAME=棋洋 + - OAUTH_ALLOWED_DOMAINS=${OAUTH_ALLOWED_DOMAINS} + - DEFAULT_USER_ROLE=pending + - ENABLE_CODE_INTERPRETER=false + - ENABLE_CODE_EXECUTION=true + - CODE_INTERPRETER_ENGINE=jupyter + - CODE_INTERPRETER_JUPYTER_URL=http://jupyter:8888 + - CODE_INTERPRETER_JUPYTER_AUTH=token + - CODE_INTERPRETER_JUPYTER_AUTH_TOKEN=${JUPYTER_TOKEN} + - CODE_INTERPRETER_JUPYTER_TIMEOUT=120 + - ENABLE_IMAGE_GENERATION=true + - ENABLE_IMAGE_PROMPT_GENERATION=true + - IMAGE_GENERATION_ENGINE=openai + - IMAGE_GENERATION_MODEL=gpt-image-2 + - IMAGE_SIZE=1024x1024 + - IMAGES_OPENAI_API_BASE_URL=http://cli-proxy-api:8317/v1 + - IMAGES_OPENAI_API_KEY=${CLIPROXY_API_KEY} + + - ENABLE_IMAGE_EDIT=true + - IMAGE_EDIT_ENGINE=openai + - IMAGE_EDIT_MODEL=gpt-image-2 + - IMAGE_EDIT_SIZE=1024x1024 + - IMAGES_EDIT_OPENAI_API_BASE_URL=http://cli-proxy-api:8317/v1 + - IMAGES_EDIT_OPENAI_API_KEY=${CLIPROXY_API_KEY} + + # --- 以下是新增的网页搜索相关环境变量 --- + - ENABLE_WEB_SEARCH=true + - WEB_SEARCH_ENGINE=ddgs + - WHISPER_WEB_SEARCH_RESULT_COUNT=5 + - WEB_SEARCH_TRUSTED_PROXY=true + # ------------------------------------ + volumes: + - open-webui:/app/backend/data + depends_on: + - litellm + - cli-proxy-api + - jupyter + restart: unless-stopped + +volumes: + open-webui: + jupyter-work: + open-terminal: