自建VPS独享IP被ChatGPT封禁怎么办?ChatGPT会员不如买Token(某好友:谁TM用ChatGPT Plus! ChatGPT Api永生!)
title: 自建VPS独享IP被ChatGPT封禁怎么办?ChatGPT会员不如买Token(某好友:谁TM用ChatGPT Plus! ChatGPT Api永生!)
以前ChatGPT只是在登录验证页面进行IP检测,现在登录后的每次请求都会进行IP检测,我购买的阿里云新加坡独享IP被封禁了,在亚马逊美国区的独享IP也封禁了,然后我在Vultr连续试了十几个区的IP,居然没一个能用的!封IP这件事的诡异之处在于,即使是ChatGPT Plus也无法幸免,而且封禁IP的策略也完全不透明。
我一直推荐的机场还能用 http://i.v2fy.com/vpn 但大量的人挤少量可用的IP, 就要时不时刷新页面才能持续问答。
好在天无绝人之路,我在Github找到一个很棒的开源项目 https://github.com/Yidadaa/ChatGPT-Next-Web/ ,可以私有化部署到自己的服务器,使用ChatGPT售卖的api 稳定使用,私有化部署完成后效果如图所示
首先向ChatGPT获取token
进入 https://platform.openai.com/account/ 注册账号登录成功后,为保证可以长期使用,建议绑定海外银行卡,我用的 depay , 目前ChatGPT连续三个月扣费很稳定,depay 邀请链接 https://depay.depay.one/web-app/register-h5?invitCode=620375&lang=zh-cn
绑定银行卡,需要填写地址,填写地址的过程中,建议使用美国地址生成器,选择免税州,生成地址,阿拉斯加免税州生成链接 https://www.meiguodizhi.com/usa-address/alaska
在绑定银行卡界面提交时,要使用美国IP, 我是直接用的亚马逊云的Virginia美国服务器,亚马逊前三个月免费,等于白嫖, 详细开通教程我做了记录,可以前往 https://github.com/zhaoolee/pilog/wiki/Buy-Amazon-Lightsail-as-Raspberry-Pi-frp-server 查看
绑定成功后,就可以在Billing 的Payment methods中查看到支付方式了 https://platform.openai.com/account/billing/payment-methods,以后只要保证这张卡有余额,就能一直稳定使用ChatGPT了
通过USER -> API keys 获取token , token为 sk
开头
搭建chatgpt-next-web私有化服务
如果你恰好有一台新加坡服务器(也可以直接买 https://common-buy.aliyun.com/?commodityCode=swas®ionId=ap-southeast-1 ),而这台服务器的3000端口也恰好空着,你只需一行命令,就能直接用Docker 运行私有化服务
docker run -d -p 3000:3000 \
-e OPENAI_API_KEY="sk-xxxx" \
-e CODE="页面访问密码" \
yidadaa/chatgpt-next-web
私有化服务在服务器3000端口运行成功后,打开设置
输入docker运行时的访问密码,关闭设置即可自动生效
如果你想在国内服务器部署,并添加https,请继续往下看
国内服务器是无法直接访问海外OpenAi 服务器的,我的方案是在阿里云7890端口配置代理,详细方案可参考 如何让国内的阿里云服务器可以高速下载Github代码 https://www.v2fy.com/p/2021-06-06-clash-wordpress-1622973106000/
但 如何让国内的阿里云服务器可以高速下载Github代码 里面自建的方案有些过时了,更新的自建方案在这里 通过新加坡阿里云访问ChatGPT https://www.v2fy.com/p/2023-03-01-v2ray-1677654246000/ , 另外,狡兔三窟,我验证vultr大量被ban的ip时,发现了这个脚本 source <(curl -sL https://multi.netlify.app/v2ray.sh) --zh
一键安装,很爽,甚至支持多用户,来源教程 https://iyideng.net/black-technology/cgfw/vmess-v2ray-server-building-and-using-tutorial.html
如何验证国内阿里云的某个端口已成功配置代理
我们可以用一次性docker容器来验证,docker容器是否可以通过某个端口的代理访问外网
docker run -it --rm --network host curlimages/curl curl -x http://172.17.0.1:7890 https://www.youtube.com
这里为什么是172.17.0.1
, 而不是127.0.0.1
? 因为对于Docker容器而言,127.0.0.1 会指向自己,而不是物理机;
这里的172.17.0.1
是怎么来的? 我是通过ifconfig | grep inet
获得的
此刻,我们已经验证,对于docker容器,可以通过配置代理 172.17.0.1:7890
顺利访问外网
其实我这里并不严谨,能顺利访问youtube.com 并不代表能顺利访问openai的服务器,但openai的api服务器好像并没有做ip的限制,因为我的新加坡阿里云服务器无法访问ChatGPT的网页服务(即使我交了20美刀每月的会员),但新加坡阿里云能顺利访问openai的api服务器,或许openai没有对开发者token请求的来源做限制(枪口抬高了一寸)
然后我们在国内服务器物理机3008端口(端口自己定,不和其他服务起冲突就好)起一个服务
docker run -d -p 3008:3000 \
-e OPENAI_API_KEY="sk-****" \
-e CODE="*****" \
-e PROXY_URL="http://172.17.0.1:7890" \
yidadaa/chatgpt-next-web
此刻我们的国内服务器就可以通过3008端口对外提供服务了。
将3008端口的服务,通过nginx,映射到一个独立域名,并添加https
重复的内容我就不写了,可以参考这篇文章
另外,还有一些nginx配置的细节,全在配置文件里,我直接把配置文件贴出来, 我的域名是 chat.v2fy.com
配置文件的位置为
/etc/nginx/conf.d/chat.v2fy.com.conf
配置文件chat.v2fy.com.conf的内容为
server {
listen 80;
server_name chat.v2fy.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name chat.v2fy.com;
ssl_certificate "/etc/nginx/ssl/chat.v2fy.com/fullchain.cer";
ssl_certificate_key "/etc/nginx/ssl/chat.v2fy.com/chat.v2fy.com.key";
location / {
proxy_pass http://127.0.0.1:3008/;
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_cache off;
proxy_buffering off;
chunked_transfer_encoding on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 300;
}
}
大家可以根据自己的域名进行替换~
小结
ChatGPT 本身是很优秀的产品,作为一个程序员,ChatGPT为我省了大量时间,但ChatGPT近期的操作,显然不想给免费用户太多使用量,早点转为买token 进行私有化部署,或许是少折腾的最优解。
银行卡是国外的银行卡吗?
银行卡是国外的银行卡吗?
枪口抬高一寸:因为api从vps访问很正常,但是web从vps访问显然哈要杀
因为api的每个请求都是收费的,但web版免费用户居多