ChatGPT-academic是一款科研工作专用ChatGPT拓展,具有Paper润色,代码解析等多种功能。最近我想把它部署在远程的服务器上,方便多人使用。在这里记录一下整个部署过程。
环境
除了代理的节点信息外,搭建还需要用到的工具和版本如下:
主机环境
- Docker
- Nginx
容器环境
Ubuntu 20.04.5 LTS
python = 3.8.10
- Pip 镜像源
index-url = https://mirrors.aliyun.com/pypi/simple/
gradio = 3.24.1
ssr-command-client
为了不影响主机的网络状态,我是在容器中部署ChatGPT-academic
服务。具体来说,我通过
docker run --name=gpt -p 1080:someport0 -p someport1:someport1 ubuntu
- 将容器中的
1080
端口(代理,访问外网)和someport0
绑定,用来走科学上网的代理 - 将容器中的
someport1
和主机的someport2
绑定,这样访问主机的someport2
就可以接受web
服务
整体的配置思路如下:
- 配置容器内的代理
- 配置容器内的chatgpt-academic服务
- 配置主机的nginx设置,进行反向代理
容器代理
加密算法库
我所使用的节点,使用了chacha20
加密算法,这个在docker hub
拉去的ubuntu
是没有的,我手动编译的
wget https://github.com/jedisct1/libsodium/releases/download/1.0.18-RELEASE/libsodium-1.0.18.tar.gz
tar xf libsodium-1.0.18.tar.gz && cd libsodium-1.0.18
configure && make -j2 && make install
ldconfig
也可以
sudo apt-get install -y libsodium-dev
Shadowsocksr客户端
容器中,我使用了基于python
命令行式的代理客户端ssr-command-client,来控制代理的解析、开启和关闭。
配置过程见shadowsocks-cli。
可能出现的问题
我安装过程中出现最多的问题就是
create encryptor fail at port 1080
这个错误就是算法库缺失,检查一下libsodium
是否成功安装
还需要注意的是当前工具shadowsocksr-cli
在python
版本高的时候会报错,见issue 52。
ChatGPT-academic配置
在安装依赖的时候,确保gradio
库不低于3.23
,不然的话无法登录。
另外,参考gradio issue#3716来修改gradio
的代码。
主机nginx
配置
在当前的nginx
的config下面创建一个子文件夹,来进行反向代理。
我的
nginx
路径是/usr/local/nginx/conf/
这样,创建/usr/local/nginx/conf/vhost/
路径并添加代理设置
upstream mychat {
server localhost:someport1;
}
server {
listen 80;
server_name your_domain; # 请填入你设定的域 名
rewrite ^/(.*) https://$server_name/$1 permanent;
location / {
proxy_pass http://127.0.0.1:someport1; # 注意 端口号
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 Upgrade $http_upgrade; # Websocket配置
proxy_set_header Connection $connection_upgrade; #Websocket配置
proxy_max_temp_file_size 0;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
server {
listen 443 ssl;
server_name chat.conscien.top;
ssl_certificate pem path;
ssl_certificate_key key path;
location / {
proxy_pass http://mychat;
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 Upgrade $http_upgrade; # Websocket配置
proxy_set_header Connection $connection_upgrade; #Websocket配置
}
}
在/usr/local/nginx/conf/nginx.conf
的http中添加
include mime.types;
default_type application/octet-stream;
map $http_upgrade $connection_upgrade {
default keep-alive;
'websocket' upgrade;
}
include /usr/local/nginx/conf/vhost/*.conf
重新nginx -s reload
加载配置进行域名访问。