diff --git a/README.md b/README.md index f066c1270..8503d25c6 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,7 @@ Fast GPT 允许你使用自己的 openai API KEY 来快速的调用 openai 接 ![KBProcess](docs/imgs/KBProcess.jpg?raw=true "KBProcess") ## 开发 -复制 .env.template 成 .env.local ,填写核心参数。可选内容不需要可留空或去掉。 - +**配置环境变量** ```bash # proxy(可选) AXIOS_PROXY_HOST=127.0.0.1 @@ -15,24 +14,25 @@ AXIOS_PROXY_PORT=7890 # openai 中转连接(可选) OPENAI_BASE_URL=https://api.openai.com/v1 OPENAI_BASE_URL_AUTH=可选的安全凭证 -# 是否开启队列任务。 1-开启,0-关闭(请求parentUrl去执行任务,单机时直接填1) +# 是否开启队列任务。 1-开启,0-关闭(请求 parentUrl 去执行任务,单机时直接填1) queueTask=1 parentUrl=https://hostname/api/openapi/startEvents -# email,参考 nodeMail 获取参数 +# 发送邮箱验证码配置。参考 nodeMail 获取参数,自行百度。 MY_MAIL=xxx@qq.com MAILE_CODE=xxx -# 阿里短信服务 +# 阿里短信服务(邮箱和短信至少二选一) aliAccessKeyId=xxx aliAccessKeySecret=xxx aliSignName=xxx aliTemplateCode=SMS_xxx -# token(随便填,登录凭证) +# token(随便填,作为登录凭证) TOKEN_KEY=xxx # openai key OPENAIKEY=sk-xxx # mongo连接地址 MONGODB_URI=mongodb://username:password@0.0.0.0:27017/test?authSource=admin -MONGODB_NAME=xxx # mongo数据库名称 +# mongo数据库名称 +MONGODB_NAME=xxx # pg 数据库相关内容,和 docker-compose 对上 PG_HOST=0.0.0.0 PG_PORT=8102 @@ -40,13 +40,20 @@ PG_USER=xxx PG_PASSWORD=xxx PG_DB_NAME=xxx ``` -```bash +**运行** +``` pnpm dev ``` -## docker 部署 +## 部署 -### 安装 docker 和 docker-compose +### 代理环境(国外服务器可忽略) +1. [clash 方案](./docs/proxy/clash.md) - 仅需一台服务器(需要有 clash) +2. [nginx 方案](./docs/proxy/nginx.md) - 需要一台国外服务器 +3. [cloudflare 方案](./docs/proxy/cloudflare.md) - 需要有域名(每日免费 10w 次代理请求) + +### docker 部署 +#### 1. 安装 docker 和 docker-compose 这个不同系统略有区别,百度安装下。验证安装成功后进行下一步。下面给出一个例子: ```bash # 安装docker @@ -60,39 +67,10 @@ docker -v docker-compose -v ``` -### 安装 clash 代理(选) -```bash -# 下载包 -curl https://glados.rocks/tools/clash-linux.zip -o clash.zip -# 解压 -unzip clash.zip -# 下载终端配置⽂件(改成自己配置文件路径) -curl https://update.glados-config.com/clash/98980/8f30944/70870/glados-terminal.yaml > config.yaml -# 赋予运行权限 -chmod +x ./clash-linux-amd64-v1.10.0 -# 记得配置端口变量: -export ALL_PROXY=socks5://127.0.0.1:7891 -export http_proxy=http://127.0.0.1:7890 -export https_proxy=http://127.0.0.1:7890 -export HTTP_PROXY=http://127.0.0.1:7890 -export HTTPS_PROXY=http://127.0.0.1:7890 -# 运行脚本: 删除clash - 到 clash 目录 - 删除缓存 - 执行运行. 会生成一个 nohup.out 文件,可以看到 clash 的 logs -OLD_PROCESS=$(pgrep clash) -if [ ! -z "$OLD_PROCESS" ]; then - echo "Killing old process: $OLD_PROCESS" - kill $OLD_PROCESS -fi -sleep 2 -cd **/clash -rm -f ./nohup.out || true -rm -f ./cache.db || true -nohup ./clash-linux-amd64-v1.10.0 -d ./ & -echo "Restart clash" -``` +#### 2. 创建3个初始化文件 +手动创建或者直接把 deploy 里内容复制过去 -### 准备初始化文件,需要自己创建 -可以直接把 deploy 里内容复制过去 **/root/fast-gpt/pg/init.sql** ```sql set -e @@ -115,6 +93,7 @@ CREATE INDEX modelData_userId_index ON modelData USING HASH (user_id); CREATE INDEX modelData_modelId_index ON modelData USING HASH (model_id); EOSQL ``` + **/root/fast-gpt/nginx/nginx.conf** ```conf user nginx; @@ -167,6 +146,7 @@ http { } } ``` + **/root/fast-gpt/docker-compose.yml** ```yml version: "3.3" @@ -236,7 +216,9 @@ services: - /root/fast-gpt/mongo/logs:/var/log/mongodb - /etc/localtime:/etc/localtime:ro ``` -### 辅助运行脚本 + +#### 3. 运行 docker-compose +下面是一个辅助脚本,也可以直接 docker-compose up -d **run.sh 运行文件** ```bash #!/bin/bash @@ -260,10 +242,15 @@ do done ``` -## Mac 可能的问题 -> 因为教程有部分镜像不兼容arm64,所以写个文档指导新手如何快速在mac上面搭建fast-gpt[如何在mac上面部署fastgpt](./docs/mac.md) -## Git Action 配置 +## 其他优化点 +### Git Action 自动打包镜像 +.github里拥有一个 git 提交到 main 分支时自动打包 amd64 和 arm64 镜像的 actions。你仅需要提前在 git 配置好 session。 + 1. 创建账号 session: 头像 -> settings -> 最底部 Developer settings -> Personal access tokens -> tokens(classic) -> 创建新 session,把一些看起来需要的权限勾上。 2. 添加 session 到仓库: 仓库 -> settings -> Secrets and variables -> Actions -> 创建secret -3. 填写 secret: Name-GH_PAT, Secret-第一步的tokens \ No newline at end of file +3. 填写 secret: Name-GH_PAT, Secret-第一步的tokens + +## 其他问题 +### Mac 可能的问题 +> 因为教程有部分镜像不兼容arm64,所以写个文档指导新手如何快速在mac上面搭建fast-gpt[如何在mac上面部署fastgpt](./docs/mac.md) diff --git a/docs/proxy/clash.md b/docs/proxy/clash.md new file mode 100644 index 000000000..7819a4fef --- /dev/null +++ b/docs/proxy/clash.md @@ -0,0 +1,68 @@ +# 安装 clash + +clash 会在本机启动代理。对应的,你需要配置项目的两个环境变量: + +``` +AXIOS_PROXY_HOST=127.0.0.1 +AXIOS_PROXY_PORT=7890 +``` + +需要注的是,在你的 config.yaml 文件中,最好仅指定 api.openai.com 走代理,其他请求都直连。 + +**安装clash** +```bash +# 下载包 +curl https://glados.rocks/tools/clash-linux.zip -o clash.zip +# 解压 +unzip clash.zip +# 下载终端配置⽂件(改成自己配置文件路径) +curl https://update.glados-config.com/clash/98980/8f30944/70870/glados-terminal.yaml > config.yaml +# 赋予运行权限 +chmod +x ./clash-linux-amd64-v1.10.0 +``` + +**runClash.sh** +```sh +# 记得配置端口变量: +export ALL_PROXY=socks5://127.0.0.1:7891 +export http_proxy=http://127.0.0.1:7890 +export https_proxy=http://127.0.0.1:7890 +export HTTP_PROXY=http://127.0.0.1:7890 +export HTTPS_PROXY=http://127.0.0.1:7890 + +# 运行脚本: 删除clash - 到 clash 目录 - 删除缓存 - 执行运行. 会生成一个 nohup.out 文件,可以看到 clash 的 logs +OLD_PROCESS=$(pgrep clash) +if [ ! -z "$OLD_PROCESS" ]; then + echo "Killing old process: $OLD_PROCESS" + kill $OLD_PROCESS +fi +sleep 2 +cd **/clash +rm -f ./nohup.out || true +rm -f ./cache.db || true +nohup ./clash-linux-amd64-v1.10.0 -d ./ & +echo "Restart clash" +``` + +**config.yaml配置例子** +```yaml +mixed-port: 7890 +allow-lan: false +bind-address: '*' +mode: rule +log-level: warning +dns: + enable: true + ipv6: false + nameserver: + - 8.8.8.8 + - 8.8.4.4 + cache-size: 400 +proxies: + - +proxy-groups: + - { name: '♻️ 自动选择', type: url-test, proxies: [香港V01×1.5], url: 'https://api.openai.com', interval: 3600} +rules: + - 'DOMAIN-SUFFIX,api.openai.com,♻️ 自动选择' + - 'MATCH,DIRECT' +``` \ No newline at end of file diff --git a/docs/proxy/cloudflare.md b/docs/proxy/cloudflare.md new file mode 100644 index 000000000..ef130a207 --- /dev/null +++ b/docs/proxy/cloudflare.md @@ -0,0 +1,46 @@ +# cloudflare 代理配置 + +[来自 "不做了睡觉" 教程](https://gravel-twister-d32.notion.site/FastGPT-API-ba7bb261d5fd4fd9bbb2f0607dacdc9e) + +**workers 配置文件** + +```js +const TELEGRAPH_URL = 'https://api.openai.com'; + +addEventListener('fetch', (event) => { + event.respondWith(handleRequest(event.request)); +}); + +async function handleRequest(request) { + // 安全校验 + if (request.headers.get('auth') !== 'auth_code') { + return new Response('UnAuthorization', { status: 403 }); + } + + const url = new URL(request.url); + url.host = TELEGRAPH_URL.replace(/^https?:\/\//, ''); + + const modifiedRequest = new Request(url.toString(), { + headers: request.headers, + method: request.method, + body: request.body, + redirect: 'follow' + }); + + const response = await fetch(modifiedRequest); + const modifiedResponse = new Response(response.body, response); + + // 添加允许跨域访问的响应头 + modifiedResponse.headers.set('Access-Control-Allow-Origin', '*'); + + return modifiedResponse; +} +``` + +**对应的环境变量** +务必别忘了填 v1 + +``` +OPENAI_BASE_URL=https://xxxxxx/v1 +OPENAI_BASE_URL_AUTH=auth_code +``` diff --git a/docs/nginxProxy.md b/docs/proxy/nginx.md similarity index 90% rename from docs/nginxProxy.md rename to docs/proxy/nginx.md index e7f795af1..e8d445dba 100644 --- a/docs/nginxProxy.md +++ b/docs/proxy/nginx.md @@ -1,4 +1,5 @@ # nginx 反向代理 openai 接口 +如果你有国外的服务器,可以通过配置 nginx 反向代理,转发 openai 相关的请求,从而让国内的服务器可以通过访问该 nginx 去访问 openai 接口。 ```conf user nginx;