Nextchat web的Docker部署

NextChat 是一个可以在 GitHub 上一键免费部署的私人 LLM 网页应用,支持 GPT3、GPT4 和 Gemini Pro 模型等。 部署简单,只需拉取 Docker 镜像,设置 API Key即可使用。

前段时间还在网上翻到官网教程的,不知道为啥又翻不出来了。写一下。

前言

NextChat 是一个可以在 GitHub 上一键免费部署的私人 LLM 网页应用,支持 GPT3、GPT4 和 Gemini Pro 模型等。 部署简单,只需拉取 Docker 镜像,设置 API Key即可使用。

下面是深色模式的截图。为什么是深色模式,因为截浅色模式的话 ,如果你在用深色模式浏览网页可能会闪你一下。

这个网页可以直接点进去看效果:NextChat。这是GitHub链接:ChatGPTNextWeb/NextChat: ✨ Light and Fast AI Assistant. Support: Web | iOS | MacOS | Android | Linux | Windows

右上角那个按钮点了就是全屏。感觉还挺好看的。

部署前准备

一台Linux服务器,一个域名。服务器自行安装docker,docker compose。域名没有应该也行,直接ip:port访问。但是你都有服务器了买个域名也不贵。

国内的服务器的话,域名未备案是没法访问的。自行备案或者购买香港服务器之类的。

部署操作

docker pull yidadaa/chatgpt-next-web

docker run -d -p 3000:3000 \
   -e OPENAI_API_KEY=sk-xxxx \
   -e CODE=页面访问密码 \
   yidadaa/chatgpt-next-web

docker pull yidadaa/chatgpt-next-web 拉取镜像。拉不过来检查网络,配置代理。

docker run -d -p 3000:3000 可以修改后面的3000来换本地端口,如果端口被占用的话

-e OPENAI_API_KEY=sk-xxxx 设置openai的key。这玩意得自己买。淘宝上买的中转需要加上PROXY_URL。后面说。

-e CODE=页面访问密码 设置页面的访问密码,如果你不设置的话谁都可以用你的apikey,设置了的话用户得先输密码,或者用自己的apikey。

更新就把原来的容器删了重来一遍。

下面是环境变量一览。github复制的。

环境变量

添加方式: -e + 环境变量名=值。例子:-e OPENAI_API_KEY=sk-xxxx

OPENAI_API_KEY (必填项)

OpenAI 密钥,你在 openai 账户页面申请的 api key,使用英文逗号隔开多个 key,这样可以随机轮询这些 key。

CODE (可选)

访问密码,可选,可以使用逗号隔开多个密码。

警告:如果不填写此项,则任何人都可以直接使用你部署后的网站,可能会导致你的 token 被急速消耗完毕,建议填写此选项。

BASE_URL (可选)

Default: https://api.openai.com

Examples: http://your-openai-proxy.com

OpenAI 接口代理 URL,如果你手动配置了 openai 接口代理,请填写此选项。

如果遇到 ssl 证书问题,请将 BASE_URL 的协议设置为 http。

OPENAI_ORG_ID (可选)

指定 OpenAI 中的组织 ID。

AZURE_URL (可选)

形如:https://{azure-resource-url}/openai

Azure 部署地址。

AZURE_API_KEY (可选)

Azure 密钥。

AZURE_API_VERSION (可选)

Azure Api 版本,你可以在这里找到:Azure 文档

GOOGLE_API_KEY (可选)

Google Gemini Pro 密钥.

GOOGLE_URL (可选)

Google Gemini Pro Api Url.

ANTHROPIC_API_KEY (可选)

anthropic claude Api Key.

ANTHROPIC_API_VERSION (可选)

anthropic claude Api version.

ANTHROPIC_URL (可选)

anthropic claude Api Url.

BAIDU_API_KEY (可选)

Baidu Api Key.

BAIDU_SECRET_KEY (可选)

Baidu Secret Key.

BAIDU_URL (可选)

Baidu Api Url.

BYTEDANCE_API_KEY (可选)

ByteDance Api Key.

BYTEDANCE_URL (可选)

ByteDance Api Url.

ALIBABA_API_KEY (可选)

阿里云(千问)Api Key.

ALIBABA_URL (可选)

阿里云(千问)Api Url.

IFLYTEK_URL (可选)

讯飞星火Api Url.

IFLYTEK_API_KEY (可选)

讯飞星火Api Key.

IFLYTEK_API_SECRET (可选)

讯飞星火Api Secret.

CHATGLM_API_KEY (可选)

ChatGLM Api Key.

CHATGLM_URL (可选)

ChatGLM Api Url.

DEEPSEEK_API_KEY (可选)

DeepSeek Api Key.

DEEPSEEK_URL (可选)

DeepSeek Api Url.

HIDE_USER_API_KEY (可选)

如果你不想让用户自行填入 API Key,将此环境变量设置为 1 即可。

DISABLE_GPT4 (可选)

如果你不想让用户使用 GPT-4,将此环境变量设置为 1 即可。

ENABLE_BALANCE_QUERY (可选)

如果你想启用余额查询功能,将此环境变量设置为 1 即可。

如果你想禁用从链接解析预制设置,将此环境变量设置为 1 即可。

WHITE_WEBDAV_ENDPOINTS (可选)

如果你想增加允许访问的webdav服务地址,可以使用该选项,格式要求:

  • 每一个地址必须是一个完整的 endpoint

https://xxxx/xxx

多个地址以,相连

CUSTOM_MODELS (可选)

示例:+qwen-7b-chat,+glm-6b,-gpt-3.5-turbo,gpt-4-1106-preview=gpt-4-turbo 表示增加 qwen-7b-chatglm-6b 到模型列表,而从列表中删除 gpt-3.5-turbo,并将 gpt-4-1106-preview 模型名字展示为 gpt-4-turbo。 如果你想先禁用所有模型,再启用指定模型,可以使用 -all,+gpt-3.5-turbo,则表示仅启用 gpt-3.5-turbo

用来控制模型列表,使用 + 增加一个模型,使用 - 来隐藏一个模型,使用 模型名=展示名 来自定义模型的展示名,用英文逗号隔开。

在Azure的模式下,支持使用modelName@Azure=deploymentName的方式配置模型名称和部署名称(deploy-name)

示例:+gpt-3.5-turbo@Azure=gpt35这个配置会在模型列表显示一个gpt35(Azure)的选项。 如果你只能使用Azure模式,那么设置 -all,+gpt-3.5-turbo@Azure=gpt35 则可以让对话的默认使用 gpt35(Azure)

在ByteDance的模式下,支持使用modelName@bytedance=deploymentName的方式配置模型名称和部署名称(deploy-name)

示例: +Doubao-lite-4k@bytedance=ep-xxxxx-xxx这个配置会在模型列表显示一个Doubao-lite-4k(ByteDance)的选项

DEFAULT_MODEL (可选)

更改默认模型

VISION_MODELS (可选)

默认值:空 示例:gpt-4-vision,claude-3-opus,my-custom-model 表示为这些模型添加视觉能力,作为对默认模式匹配的补充(默认会检测包含"vision"、"claude-3"、"gemini-1.5"等关键词的模型)。

在默认模式匹配之外,添加更多具有视觉能力的模型。多个模型用逗号分隔。

DEFAULT_INPUT_TEMPLATE (可选)

自定义默认的 template,用于初始化『设置』中的『用户输入预处理』配置项

STABILITY_API_KEY (optional)

Stability API密钥

STABILITY_URL (optional)

自定义的Stability API请求地址

ENABLE_MCP (optional)

启用MCP(Model Context Protocol)功能

SILICONFLOW_API_KEY (optional)

SiliconFlow API Key.

SILICONFLOW_URL (optional)

SiliconFlow API URL.

估计也没人看。能把这个看完的人估计都看官方文档去了。所以如果你是用的电商平台买的中转,这样配置:

docker pull yidadaa/chatgpt-next-web

docker run -d -p 3000:3000 \
   -e OPENAI_API_KEY=sk-xxxx \
   -e CODE=页面访问密码 \
   -e BASE_URL=商家给你的url\
   yidadaa/chatgpt-next-web

他会返回一串字符,这是这个docker进程的id。然后运行 docker ps查看运行情况

有就是正常的。

设置nginx

首先你得装好nginx。

sudo apt update
sudo apt install nginx
systemctl status nginx

running就是正常的。一般第一次下基本都是正常的,后期打不开大概率是你哪个配置写错了。

然后开始写配置。最后一层的nextchat改成啥都行。这是文件名。

sudo nano /etc/nginx/sites-available/nextchat

下面是配置文件,只有http的版本,没配https,自用懒得配证书。将 #你的域名 替换为你自己的域名。

server {
    listen 80;
    server_name #你的域名;

    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;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Ctrl+X 退出,然后输入Y保存,回车。

如果这里保存不了你看看你上面有没有用sudo。再不行换到root用户。

然后创建符号连接:

sudo ln -s /etc/nginx/sites-available/nextchat /etc/nginx/sites-enable/nextchat

然后运行nginx -t检查:

sudo nginx -t

返回

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

说明没啥问题。运行sudo systemctl reload nginx重启nginx。

sudo systemctl reload nginx

然后通过你的域名在浏览器里面应该能直接访问到。

网页设置

这是直接访问的页面。点击左下角的设置。

第一栏

主要是发送键,主题,Language和预览气泡。

发送键:默认是enter,换行是shift + enter。和大部分的操作是一致的,可以自己改。

主题:auto自动,dark深色,light浅色。

Language:页面的语言,不是llm回复的语言。回复这个你得自己写提示词。

预览气泡:nextchat默认是打开的状态,所以你输入的时候会是下面这样:

你的输入会在聊天位置提前显示。如果不习惯关了就是。

第二 三 四 五栏

主要是访问密码,自定义接口,自定义模型名。

访问密码:就是你docker运行的时候设置的那个。

自定义接口:如果你docker设置的时候设置了BASE_URL,这玩意不用管。自用自部署基本不管这个来着,如果你是用的一开始提到的预览网页:NextChat,那你得自行进行设置:

改接口地址为商家给你的url,改api key为商家给你的key。如果不是中转你就不用动这个url。再次提醒自部署不动自定义接口部分。

自定义模型名: 如果是中转商家购入,有些的模型名可能不是官方的。比如o3-mini,可能商家给的访问这个模型的名称是o3Mini,这个时候你就要自己在这里输入,选择模型的时候才会显示。不过一般没看见这种商家。

第六栏

这里的设置就偏深一些了。一般使用改下模型,附带历史消息数,历史摘要,对话摘要模型。

模型:这是开启一个新对话时候的默认模型。可以在对话里面改,所以可以不改这一项。

附带历史消息数:传给LLM消息的时候,附带的前文消息数量。换个说法可以简单理解为LLM的短期记忆,设置成4他就会记住最近的四条消息,记得不多但是记得牢一点。

历史摘要:传给LLM消息的时候,是否附带前文的摘要。换个说法可以简单理解为LLM的长期记忆,记得多,但是都只记得个大概。

对话摘要模型:附带历史消息数超过压缩阈值的时候,总结历史摘要的时候,需要一个模型来总结上下文。这里设置的就是总结用的模型。这个就不需要太高,3.5-trubo,4o-mini个人感觉就够用了。不至于上个什么o1,o3mini,还是省点token吧。

第七 八 九 栏

这个实时聊天和文本转语音没用过。后面这个重置设置和清除数据应该还是看得懂。

聊天设置

这一行你鼠标移上去会显示用途的。

对话设置

上面这个新增对话可以作为提示词。比如如下所示:

添加system对话,让LLM遵守该要求。

下面这个角色头像 名称应该都看得懂。这个使用全局设置,会使用我们在前文设置里面设置的模型。不选就是下面的设置,和前面的设置是一样的。

上传图片

如果你的模型能够识别图片,可以从这里上传。

模式切换

自动/浅色/深色模式切换。

快捷指令

看一眼就知道是个啥东西。然后你在输入框输入正斜杠也能调用这个出来。

切换面具

其实就是预设角色。

清除聊天

清除聊天记录。

切换模型

可以在这里改这个聊天的模型

插件

没用过。自行研究

键盘快捷键

就是给你展示个这东西。

其他

右上角的四个键。依次是刷新标题,修改聊天记录,导出,全屏。

左边的面具和发现,第一个就是预设,你可以导入导出自定义预设。右边的发现是插件,SD绘画(没用过),搜索聊天记录。

总结

还有其他功能 没写完 可以自己到处看看。

。a

?/

Comment