From 76ebe2c991e186c1a6ece3c1a516e07ad81ab4f0 Mon Sep 17 00:00:00 2001 From: alook Date: Tue, 18 Aug 2026 11:13:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=8E=AF=E5=A2=83=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E9=85=8D=E7=BD=AE=EF=BC=8C=E6=B7=BB=E5=8A=A0=20OPEN?= =?UTF-8?q?=5FTERMINAL=5FAPI=5FKEY=EF=BC=8C=E5=B9=B6=E5=88=9B=E5=BB=BA=20d?= =?UTF-8?q?ocker-compose=20=E6=96=87=E4=BB=B6=E4=BB=A5=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E9=83=A8=E7=BD=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 1 + cliproxyapi/config.example.yaml | 2 +- docker-compose-online.yml | 116 ++++++++++++++++++++++++++++++++ 3 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 docker-compose-online.yml 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: