From 4b1cc6878ceae8b1c58d40305fdc58bb9496e188 Mon Sep 17 00:00:00 2001 From: archer <545436317@qq.com> Date: Wed, 26 Apr 2023 16:41:58 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=AD=E8=BD=AC=E5=AE=89=E5=85=A8?= =?UTF-8?q?=E5=87=AD=E8=AF=81;perf:=20=E9=83=A8=E7=BD=B2=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.template | 8 +++-- README.md | 24 ++++++-------- deploy/docker-compose.yml | 66 ++++++++++++++++++++++++++++++++++++++ deploy/nginx/nginx.conf | 49 ++++++++++++++++++++++++++++ deploy/pg/init.sql | 19 +++++++++++ deploy/run.sh | 19 +++++++++++ src/service/utils/tools.ts | 7 +++- 7 files changed, 174 insertions(+), 18 deletions(-) create mode 100644 deploy/docker-compose.yml create mode 100644 deploy/nginx/nginx.conf create mode 100644 deploy/pg/init.sql create mode 100644 deploy/run.sh diff --git a/.env.template b/.env.template index 83c440724..a33d2433b 100644 --- a/.env.template +++ b/.env.template @@ -1,6 +1,9 @@ # proxy -AXIOS_PROXY_HOST=127.0.0.1 -AXIOS_PROXY_PORT=7890 +# AXIOS_PROXY_HOST=127.0.0.1 +# AXIOS_PROXY_PORT=7890 +# OPENAI_BASE_URL=https://api.openai.com/v1 +# OPENAI_BASE_URL_AUTH=可选的安全凭证 +# 是否开启队列任务。 1-开启,0-关闭(请求parentUrl去执行任务,单机时直接填1) queueTask=1 parentUrl=https://hostname/api/openapi/startEvents # email @@ -15,7 +18,6 @@ aliTemplateCode=SMS_xxx TOKEN_KEY=xxx # openai OPENAIKEY=sk-xxx -OPENAI_BASE_URL=https://api.openai.com/v1 # db MONGODB_URI=mongodb://username:password@0.0.0.0:27017/test?authSource=admin PG_HOST=0.0.0.0 diff --git a/README.md b/README.md index 039934956..f066c1270 100644 --- a/README.md +++ b/README.md @@ -6,14 +6,15 @@ Fast GPT 允许你使用自己的 openai API KEY 来快速的调用 openai 接 ![KBProcess](docs/imgs/KBProcess.jpg?raw=true "KBProcess") ## 开发 -复制 .env.template 成 .env.local ,填写核心参数 +复制 .env.template 成 .env.local ,填写核心参数。可选内容不需要可留空或去掉。 ```bash -# proxy(不需要代理可忽略) +# proxy(可选) AXIOS_PROXY_HOST=127.0.0.1 AXIOS_PROXY_PORT=7890 -# 中转方案,修改 openai 的 base url +# openai 中转连接(可选) OPENAI_BASE_URL=https://api.openai.com/v1 +OPENAI_BASE_URL_AUTH=可选的安全凭证 # 是否开启队列任务。 1-开启,0-关闭(请求parentUrl去执行任务,单机时直接填1) queueTask=1 parentUrl=https://hostname/api/openapi/startEvents @@ -90,17 +91,10 @@ nohup ./clash-linux-amd64-v1.10.0 -d ./ & echo "Restart clash" ``` -### 本地 docker 打包 -```bash -docker build -t imageName:tag . -docker push imageName:tag -# 或者直接拉镜像,见下方 -``` - -### 准备初始化文件 +### 准备初始化文件,需要自己创建 +可以直接把 deploy 里内容复制过去 **/root/fast-gpt/pg/init.sql** ```sql -#!/bin/bash set -e psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL @@ -183,8 +177,10 @@ services: restart: always container_name: fast-gpt environment: - - AXIOS_PROXY_HOST=127.0.0.1 - - AXIOS_PROXY_PORT=7890 + # - AXIOS_PROXY_HOST=127.0.0.1 + # - AXIOS_PROXY_PORT=7890 + # - OPENAI_BASE_URL=https://api.openai.com/v1 + # - OPENAI_BASE_URL_AUTH=可选的安全凭证 - MY_MAIL=xxxx@qq.com - MAILE_CODE=xxxx - aliAccessKeyId=xxxx diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml new file mode 100644 index 000000000..9e47a2141 --- /dev/null +++ b/deploy/docker-compose.yml @@ -0,0 +1,66 @@ +version: '3.3' +services: + fast-gpt: + image: c121914yu/fast-gpt:latest + network_mode: host + restart: always + container_name: fast-gpt + environment: + # - AXIOS_PROXY_HOST=127.0.0.1 + # - AXIOS_PROXY_PORT=7890 + # - OPENAI_BASE_URL=https://api.openai.com/v1 + # - OPENAI_BASE_URL_AUTH=可选的安全凭证 + - MY_MAIL=xxxx@qq.com + - MAILE_CODE=xxxx + - aliAccessKeyId=xxxx + - aliAccessKeySecret=xxxx + - aliSignName=xxxxx + - aliTemplateCode=SMS_xxxx + - TOKEN_KEY=xxxx + - queueTask=1 + - parentUrl=https://hostname/api/openapi/startEvents + - MONGODB_URI=mongodb://username:passsword@0.0.0.0:27017/?authSource=admin + - MONGODB_NAME=xxx + - PG_HOST=0.0.0.0 + - PG_PORT=8100 + - PG_USER=xxx + - PG_PASSWORD=xxx + - PG_DB_NAME=xxx + - OPENAIKEY=sk-xxxxx + nginx: + image: nginx:alpine3.17 + container_name: nginx + restart: always + network_mode: host + volumes: + - /root/fast-gpt/nginx/nginx.conf:/etc/nginx/nginx.conf:ro + - /root/fast-gpt/nginx/logs:/var/log/nginx + - /root/fast-gpt/nginx/ssl/docgpt.key:/ssl/docgpt.key + - /root/fast-gpt/nginx/ssl/docgpt.pem:/ssl/docgpt.pem + pg: + image: ankane/pgvector + container_name: pg + restart: always + ports: + - 8100:5432 + environment: + - POSTGRES_USER=xxx + - POSTGRES_PASSWORD=xxx + - POSTGRES_DB=xxx + volumes: + - /root/fast-gpt/pg/data:/var/lib/postgresql/data + - /root/fast-gpt/pg/init.sql:/docker-entrypoint-initdb.d/init.sh + - /etc/localtime:/etc/localtime:ro + mongodb: + image: mongo:4.0.1 + container_name: mongo + restart: always + ports: + - 27017:27017 + environment: + - MONGO_INITDB_ROOT_USERNAME=username + - MONGO_INITDB_ROOT_PASSWORD=password + volumes: + - /root/fast-gpt/mongo/data:/data/db + - /root/fast-gpt/mongo/logs:/var/log/mongodb + - /etc/localtime:/etc/localtime:ro diff --git a/deploy/nginx/nginx.conf b/deploy/nginx/nginx.conf new file mode 100644 index 000000000..bae160c0c --- /dev/null +++ b/deploy/nginx/nginx.conf @@ -0,0 +1,49 @@ +user nginx; +worker_processes auto; +worker_rlimit_nofile 51200; + +events { + worker_connections 1024; +} + +http { + access_log off; + server_names_hash_bucket_size 512; + client_header_buffer_size 32k; + large_client_header_buffers 4 32k; + client_max_body_size 50M; + + gzip on; + gzip_min_length 1k; + gzip_buffers 4 8k; + gzip_http_version 1.1; + gzip_comp_level 6; + gzip_vary on; + gzip_types text/plain application/x-javascript text/css application/javascript application/json application/xml; + gzip_disable "MSIE [1-6]\."; + + open_file_cache max=1000 inactive=1d; + open_file_cache_valid 30s; + open_file_cache_min_uses 8; + open_file_cache_errors off; + + server { + listen 443 ssl; + server_name docgpt.ahapocket.cn; + ssl_certificate /ssl/docgpt.pem; + ssl_certificate_key /ssl/docgpt.key; + ssl_session_timeout 5m; + + location / { + proxy_pass http://localhost:3000; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + } + server { + listen 80; + server_name docgpt.ahapocket.cn; + rewrite ^(.*) https://$server_name$1 permanent; + } +} \ No newline at end of file diff --git a/deploy/pg/init.sql b/deploy/pg/init.sql new file mode 100644 index 000000000..3841e3c2b --- /dev/null +++ b/deploy/pg/init.sql @@ -0,0 +1,19 @@ +set -e +psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL + +CREATE EXTENSION vector; +-- init table +CREATE TABLE modelData ( + id BIGSERIAL PRIMARY KEY, + vector VECTOR(1536), + status VARCHAR(50) NOT NULL, + user_id VARCHAR(50) NOT NULL, + model_id VARCHAR(50) NOT NULL, + q TEXT NOT NULL, + a TEXT NOT NULL +); +-- create index +CREATE INDEX modelData_status_index ON modelData USING HASH (status); +CREATE INDEX modelData_userId_index ON modelData USING HASH (user_id); +CREATE INDEX modelData_modelId_index ON modelData USING HASH (model_id); +EOSQL \ No newline at end of file diff --git a/deploy/run.sh b/deploy/run.sh new file mode 100644 index 000000000..e8fa46203 --- /dev/null +++ b/deploy/run.sh @@ -0,0 +1,19 @@ +#!/bin/bash +docker-compose pull +docker-compose up -d + +echo "Docker Compose 重新拉取镜像完成!" + +# 删除本地旧镜像 +images=$(docker images --format "{{.ID}} {{.Repository}}" | grep fast-gpt) + +# 将镜像 ID 和名称放入数组中 +IFS=$'\n' read -rd '' -a image_array <<<"$images" + +# 遍历数组并删除所有旧的镜像 +for ((i=1; i<${#image_array[@]}; i++)) +do + image=${image_array[$i]} + image_id=${image%% *} + docker rmi $image_id +done \ No newline at end of file diff --git a/src/service/utils/tools.ts b/src/service/utils/tools.ts index 3ed656880..05cac36e4 100644 --- a/src/service/utils/tools.ts +++ b/src/service/utils/tools.ts @@ -86,7 +86,12 @@ export const authOpenApiKey = async (req: NextApiRequest) => { /* openai axios config */ export const axiosConfig = { - httpsAgent: global.httpsAgent + httpsAgent: global.httpsAgent, + headers: process.env.OPENAI_BASE_URL_AUTH + ? { + auth: process.env.OPENAI_BASE_URL_AUTH + } + : {} }; /* delete invalid symbol */