type
status
date
slug
summary
tags
category
icon
password
前言
我用帐号/密码使用chatGPT已经有一段时间。但是,我有几个私交较密的朋友,他们并不具备使用chatGPT的条件;但又想体验一下这个神奇的工具。因此,最近我专门去了解了一波自建ChatGPT的相关项目。在这里,我总结一下在Linux系统中自建chatGPT的经验。大家有什么好项目也可以在评论区推荐下!
我使用的项目是Kerwin1202/chatgpt-web,基于MongoDB后端,支持API或Access Token模式。目前的功能包括:多用户登录/注册、数据库管理、对话云端保存和管理、敏感词管理、自定义提示词、多Key轮询、用户管理、自定义模型等(v2.13.0起)。最重要的是,该项目是完全开源和免费的!关于安全性,我只能说我暂时没有发现这个方案有主观恶意行为;API并没有异常扣费。
我的自建chatGPT(
gpt-3.5-turbo
)在PC端的界面大致如下(基于API)准备工作
- 有一台自己的vps,最好在国外
- 有一个自己的chatgpt账号
搭建的准备
文件夹与端口
首先,我们新建工作目录
work=~/docker/kerwin_chatgpt mkdir -p $work; cd $work
该目录用于保存docker stack的重要数据,便于迁移和备份。
如果你也使用了ufw,应该开放一下端口(没用防火墙的可以忽略此步):
sudo ufw allow 1004/tcp comment 'kerwin_chatgpt' && sudo ufw reload sudo ufw allow 1005/tcp comment 'kerwin_chatgpt GUI' && sudo ufw reload
如果你的VPS后台还有防火墙,也要相应开放(没用防火墙的可以忽略此步)
yml文件配置
这里有很多帐户和密码,大家多关注:
OPENAI_API_KEY
:OpenAI后台的API key。
SMTP
系列:这是给注册用户发送邮件时用的。
AUTH_SECRET_KEY
:源项目是登陆密钥。这里暂时不知道有什么用。注册过程似乎用不到AUTH_SECRET_KEY
选项,但必须要提供,否则可能报错。
MongoDB
:数据库名chatgpt
,用户名user01
,密码password01
。这里要注意mongodb url的书写格式——mongodb://user01:password01@database:27017
,其中database
是该stack中数据库的“小名”,而27017
是暴露于stack局域网中的端口号,是默认端口,我也没有改动。如果这两个参数你都使用了自定义,应该要做相应改动。
Mongo-Express
:用户名user02
,密码password02
。这是登陆MongoDB Express时用的。如果不设置,任何知道数据库网址的人都可以访问数据库——这是十分危险的!
无论什么时候,都不建议大家使用弱密码。我推荐使用自建bitwarden进行密码管理。希望大家要做好安全防护,不然被人扫描出来进行弱密码暴破甚至是直接登陆就不好了。除了密码外,基于Nginx Proxy Manager的https也是很关键的。
如果你用过
mongo
或mongo-express
镜像,可以改为自己正在使用的tag
,这样比较节省磁盘空间。有按需修改
提示的参数也要按自己的实际情况修改。上面的帐号/密码理清后,我们新建
docker-compose.yml
文件:vi $work/docker-compose.yml
docker-compose.yml如下
version: '3' services: app: image: kerwin1202/chatgpt-web:latest restart: unless-stopped ports: - 1004:3002 depends_on: - database environment: TZ: Asia/Shanghai # API or Access Token模式 OPENAI_API_MODEL: ChatGPTAPI # 在较新版本时可能需要该参数 # 默认模型。默认是gpt-3.5-turbo # OPENAI_API_MODEL: gpt-3.5-turbo-0613 # 从OpenAI后台里获得 OPENAI_API_KEY: sk-XXX # 按需修改 # 访问jwt加密参数,可选 不为空则允许登录 同时需要设置 MONGODB_URL AUTH_SECRET_KEY: 12345678abcdefg # 按需修改 # 超时,单位毫秒,可选 TIMEOUT_MS: 60000 # 网站名 SITE_TITLE: APIChat # 按需修改。写个自己喜欢的名字就行 # mongodb 的连接字符串 MONGODB_URL: 'mongodb://user01:password01@database:27017' # 按需修改 # 网站是否开启注册 REGISTER_ENABLED: true # 完成注册后,可以直接在前端页面关闭注册。 # 开启注册之后 网站注册允许的邮箱后缀 如果空 则允许任意后缀 REGISTER_MAILS: '@qq.com,@gmail.com,@163.com' # 按需修改 # 加密盐。算法: echo -n 'passwordsalt' | md5sum | cut -c 1-32 PASSWORD_MD5_SALT: tNJ%M&D # 按需修改 # 开启注册之后 超级管理员的邮箱 ROOT_USER: [email protected] # 按需修改 # 前面一定要有https://或http://,且末尾不含/。注册的时候发送验证邮箱使用。 SITE_DOMAIN: https://chatgpt.hwb0307.com # 按需修改 # 开启注册之后 发送验证邮箱配置 SMTP_HOST: smtp.qq.com SMTP_PORT: 465 # 也可以尝试587 SMTP_TSL: true SMTP_USERNAME: [email protected] # 按需修改 SMTP_PASSWORD: xxxxxxxx # 按需修改 links: - database database: # image: mongo:3.6 # 为了支持v2.13.0+版本,不再使用mongodb 3.x image: mongo:4.0 restart: unless-stopped expose: - '27017' volumes: - ./mongodb:/data/db environment: MONGO_INITDB_ROOT_USERNAME: user01 # 按需修改 MONGO_INITDB_ROOT_PASSWORD: password01 # 按需修改 MONGO_INITDB_DATABASE: chatgpt gui: image: mongo-express:1.0.0-alpha restart: unless-stopped ports: - "1005:8081" environment: # 选择主题。详见: http://codemirror.net/demo/theme.html ME_CONFIG_OPTIONS_EDITORTHEME: ambiance # 数据库信息 ME_CONFIG_BASICAUTH_USERNAME: user02 # 按需修改 ME_CONFIG_BASICAUTH_PASSWORD: password02 # 按需修改 ME_CONFIG_MONGODB_URL: 'mongodb://user01:password01@database:27017' ME_CONFIG_MONGODB_ENABLE_ADMIN: true # 可能不是必要的 ME_CONFIG_MONGODB_ADMINUSERNAME: user01 # 可能不是必要的 ME_CONFIG_MONGODB_ADMINPASSWORD: password01 # 可能不是必要的
请注意,
SITE_DOMAIN
参数中https://chatgpt.hwb0307.com
这个域名是不存在的,你应该改成自己的域名。另外,听说有小伙伴用http的时候存在新用户无法正常注册和验证。但出于安全性考虑,你应该使用https。最后直接上线即可
cd $work && docker-compose up -d
若想更新
chatgpt-web
,只要依次运行下列命令:docker-compose down # 下线 docker-compose pull # 拉取chatgpt-web latest镜像。mongo/mongo-express用的是固定tag,一般不会更新 docker-compose up -d # 重新上线
其它docker相关操作和一般的docker应用是类似,这里就不细说了。
截图
总结
- 作者:悟然
- 链接:https://notion.zyqn.site/article/chat2
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。