Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: allow baseUrl for one-api #1576

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open

Conversation

haobibo
Copy link

@haobibo haobibo commented Jun 27, 2024

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" (可以使用下面的命令进行:jq ".homepage=\"${REACT_APP_BASE_URL}\"" package.json > tmp.json && mv tmp.json package.json)

Why

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

Validation

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

@haobibo
Copy link
Author

haobibo commented Jun 28, 2024

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

@songquanpeng
Copy link
Owner

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

@LeoQuote
Copy link
Contributor

LeoQuote commented Jul 3, 2024

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

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

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

@haobibo haobibo changed the title allow baseUrl for one-api feat: allow baseUrl for one-api Jul 4, 2024
@haobibo
Copy link
Author

haobibo commented Jul 4, 2024

Thank you @LeoQuote !

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

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

@LeoQuote
Copy link
Contributor

LeoQuote commented Jul 4, 2024

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

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

@haobibo
Copy link
Author

haobibo commented Jul 4, 2024

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

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

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

@LeoQuote
Copy link
Contributor

LeoQuote commented Jul 4, 2024

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

@haobibo
Copy link
Author

haobibo commented Jul 4, 2024

image

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

另一方面,这并不是一个“不是一个主流”的需求,例如:

@haobibo
Copy link
Author

haobibo commented Jul 4, 2024

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

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

@LeoQuote
Copy link
Contributor

LeoQuote commented Jul 4, 2024

谢谢你的解释👍🏿

@haobibo
Copy link
Author

haobibo commented Jul 5, 2024

@songquanpeng could you please assign reviewers to proceed?

@Laisky
Copy link
Collaborator

Laisky commented Jul 10, 2024

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

@haobibo
Copy link
Author

haobibo commented Jul 11, 2024

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.

Copy link

codecov bot commented Jul 11, 2024

Codecov Report

Attention: Patch coverage is 0% with 20 lines in your changes missing coverage. Please review.

Project coverage is 1.21%. Comparing base (6ad1699) to head (4fd2460).

Files Patch % Lines
router/web.go 0.00% 8 Missing ⚠️
router/main.go 0.00% 7 Missing ⚠️
common/embed-file-system.go 0.00% 2 Missing ⚠️
router/api.go 0.00% 1 Missing ⚠️
router/dashboard.go 0.00% 1 Missing ⚠️
router/relay.go 0.00% 1 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff            @@
##            main   #1576      +/-   ##
========================================
- Coverage   1.22%   1.21%   -0.01%     
========================================
  Files        137     137              
  Lines       9917    9923       +6     
========================================
  Hits         121     121              
- Misses      9782    9788       +6     
  Partials      14      14              

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@Laisky
Copy link
Collaborator

Laisky commented Jul 22, 2024

这个 PR 我一直没跑通

构建

cd web/default
REACT_APP_BASE_URL="one-api" DISABLE_ESLINT_PLUGIN='true' REACT_APP_VERSION=$(cat VERSION) npm run build

cd -
BASE_URL="/one-api" go run -race .

CleanShot 2024-07-22 at 09 54 08@2x

@haobibo
Copy link
Author

haobibo commented Aug 6, 2024

@Laisky Thank you for your patience!

  1. 请尝试执行下面的命令来构建:
# clear existing variable, if any
unset REACT_APP_SERVER REACT_APP_BASE_URL

cd web/default
export REACT_APP_BASE_URL='/one-api'

jq ".homepage=\"${REACT_APP_BASE_URL}\"" package.json > tmp.json && mv tmp.json package.json

DISABLE_ESLINT_PLUGIN='true' REACT_APP_VERSION=$(cat VERSION) npm run build

cd -
BASE_URL="/one-api" go run -race .

请留意其中:1) REACT_APP_BASE_URL的值,需要以/开头;2)为了构建以REACT_APP_BASE_URL为prefix的webpage,需要修改package.json文件中的homepage字段,使其值与REACT_APP_BASE_URL一致。

  1. 为了便于上上述过程(用jq修改package.json文件)体现在构建过程中,我已经提交了新的commit,补充修改了web/build.sh文件,并在最新的main branch上跑通了。

如果还有问题,请留言,我尽快修改。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants