Menu

#1576 feat: allow baseUrl for one-api

open
nobody
None
2024-07-11
2024-06-27
Anonymous
No

Originally created by: haobibo

What:

允许通过系统环境变量为one-api的服务URL加上前缀,下面的例子将允许把原来的/api/status路径变更至/one-api/api/status

BASE_URL="/one-api" PORT=3000 one-api

如果不设置BASE_URL则默认为空,保持原有的URL pattern。

与之相对应,如果前端进行构建,则进行两处修改:
- REACT_APP_BASE_URL="one-api"
- package.json中的homepage字段改为"/one-api"

Why

一些模块中需要对one-api中进行集成,希望在同一个domain下的不同URL prefix下用nginx或其他网关反向代理不同的应用。
应用允许加上baseUrl的话会对反向代理的配置更加简单,包括前端部分。

Validation

我已确认该 PR 已自测通过,相关截图如下:
image

Discussion

  • Anonymous

    Anonymous - 2024-06-28

    Originally posted by: haobibo

    @songquanpeng
    Please cnosider this PR and see if more work is expected.

     
  • Anonymous

    Anonymous - 2024-07-01

    Originally posted by: songquanpeng

    好的,我最近尽量尽快处理,谢谢 PR~

     
  • Anonymous

    Anonymous - 2024-07-03

    Originally posted by: LeoQuote

    这个需求实际上用反代就可以完成了, 我比较建议在 oneapi 内部内置一个nginx 或者caddy, 这样修改特别方便, 根本不需要改代码.

    另外你当前的实现, 前端部分是在编译时注入环境变量才可实现, 对于想用到这个功能的人来说, 必须重新编译前端, 才可以使用.

    所以综合以上的情况, 我个人觉得直接加反代配置是更为可行更为方便的方案.

     
  • Anonymous

    Anonymous - 2024-07-04

    Originally posted by: haobibo

    Thank you @LeoQuote !

    1. 后端部分在反向代理中做URL Rewrite确实比较容易,改写api URL即可。现在这样改动,是期望one-api可以顺带作为一个静态服务器,例如同时去serve NextChat 这样的静态应用,一站式打包相关的应用,在轻量的场景下不用额外再搭建nginx之类的反向代理。

    2. 前端部分,如果用nginx的话有什么好的实现建议吗,我看案例一般都需要在前端代码当中做一些修改然后进行重新构建。

     
  • Anonymous

    Anonymous - 2024-07-04

    Originally posted by: LeoQuote

    后端方面将 one-api 顺便做一个静态服务器,我个人觉得不是一个主流的需求,nginx 本身就是相当轻量的,而将serve静态文件这个功能塞给one api 反而增加了不必要的事情。

    前端方面应该可以使用SSR,这种运行方式的话,一般可以直接在运行时改变 base url。

     
  • Anonymous

    Anonymous - 2024-07-04

    Originally posted by: haobibo

    后端方面将 one-api 顺便做一个静态服务器,我个人觉得不是一个主流的需求,nginx 本身就是相当轻量的,而将serve静态文件这个功能塞给one api 反而增加了不必要的事情。

    前端方面应该可以使用SSR,这种运行方式的话,一般可以直接在运行时改变 base url。

    @LeoQuote 前端方面的SSR可以提供更多的方案和资料吗?尤其是在不需要在服务端使用NodeJS serve的情况下。

     
  • Anonymous

    Anonymous - 2024-07-04

    Originally posted by: LeoQuote

    不好意思,我说的ssr就是使用nodejs serve,如果想使用静态生成 HTML 的方式确实只有改代码重新编译才可以

     
  • Anonymous

    Anonymous - 2024-07-04

    Originally posted by: haobibo

    image

    一方面对于后端,如果额外安装一个nginx的话,以ubuntu的镜像为例,需要额外的大约6MB的磁盘空间。
    如果按这个PR的代码的话,用户只需要加一个环境变量。

    另一方面,这并不是一个“不是一个主流”的需求,例如:
    - JupyterServer (常用的jupyter lab/notebook)ServerApp.base_url就是用来应对用户在proxy后运行是需要在jupyter的应用前端加上一个prefix来设置的。

     
  • Anonymous

    Anonymous - 2024-07-04

    Originally posted by: haobibo

    不好意思,我说的ssr就是使用nodejs serve,如果想使用静态生成 HTML 的方式确实只有改代码重新编译才可以

    如果后端还需要一个nodejs的话,需要的磁盘空间、计算成本就更高了,比在build时加上一个配置进行一次性的构建整体的复杂性可能更高了。

     
  • Anonymous

    Anonymous - 2024-07-04

    Originally posted by: LeoQuote

    谢谢你的解释👍🏿

     
  • Anonymous

    Anonymous - 2024-07-05

    Originally posted by: haobibo

    @songquanpeng could you please assign reviewers to proceed?

     
  • Anonymous

    Anonymous - 2024-07-10

    Originally posted by: Laisky

    @haobibo 建议合并一下提交,同时修改一下提交格式,格式参考 https://www.conventionalcommits.org/en/v1.0.0/

     
  • Anonymous

    Anonymous - 2024-07-11

    Ticket changed by: haobibo

    • status: open --> closed
     
  • Anonymous

    Anonymous - 2024-07-11

    Ticket changed by: haobibo

    • status: closed --> open
     
  • Anonymous

    Anonymous - 2024-07-11

    Originally posted by: haobibo

    Thank you @Laisky .
    1. all the commits now follows Conventional Commits
    2. The commits are re-organized into two commits - one for frontend and anthoer one for backend.
    3. The PR is now catch up with main branch and has not conflicts.

     

Log in to post a comment.

MongoDB Logo MongoDB