云服务器搭建实现学术优化chatgpt
1 服务器准备
一个可以访问openAI的服务器,内地配置具体见我上篇文章:
这里用的是腾讯云服务器,OpenCloud centos 8.6系统
2 云服务器配置
2.0 FTP配置
上一篇文章写了如何配置FTP用于与linux云服务器的文件传输
云函数搭建内地可用的OpenAI代理中的第二章节
2.1 python虚拟环境
云服务器好像是自带python3.6.8的,由于项目所需环境比较新,所以要重新安装,越新越好,不然会有很多莫名其妙的问题,或者首先你就会被虚拟环境宰了。比如:
卸载 Python 3.6.8:
sudo yum remove python=3.6.8
或卸载 Python(建议这个,全卸了,避免某些还给你保留了python2):
sudo yum remove python
2.1.1 python3.9安装配置
- 安装 Python 3.9:
sudo yum -y install python=3.9
- 检查 Python 3.9 是否成功安装:
python --version
- 若安装不成功,可以尝试先安装 EPEL 仓库,再重复进行1和2
sudo yum -y install epel-release
如果你不是centos,可能自带的第三方软件包就不是yum,可以换成apt-get试试
2.1.2 下载python项目
- 找一个文件夹放项目,确认自己找得到这个路径。
git clone https://github.com/binary-husky/chatgpt_academic.git
如果你没有安装git,还是要安装git,但是我觉得安装git太麻烦了,再加上从github上下载可能速度较慢,我直接自己本地下载完利用ftp传输上来的。
而且本地下载的话修改比较方便,我想你也不想用那个可恶的vim吧?
- 复制config.py到一个config_private.py文件,修改里面的API_URL指为上篇文章弄到的那个香港代理地址加上后面这段/v1/chat/completions
因为香港代理地址仅仅表示的是https://api.openai.com
-
因为是直接映射的,所以就不需要代理了,
USE_PROXY = False
-
API_KEY填自己的key
-
另外在main.py文件里的最后一段话里面记得加个参数
share=True
,否则不生成外部链接(不仅在局域网中可以访问)啊。
demo.queue(concurrency_count=CONCURRENT_COUNT).launch(server_name="0.0.0.0", share=True, server_port=PORT, auth=AUTHENTICATION, favicon_path="docs/logo.png")
2.1.3 创建python虚拟环境
如果你的linux是带图形界面的,可以考虑用pycharm,在里面装python环境比较友好一些,摆脱命令行。
要在Python中创建一个虚拟环境,
找个文件夹放虚拟环境,我是就放在项目目录下的,
可以按照以下步骤进行操作:
-
安装
virtualenv
模块:pip install virtualenv
-
在命令行中,导航到要创建虚拟环境的目录,创建虚拟环境:
virtualenv env_name
其中,
env_name
是您要为虚拟环境指定的名称。请注意,这将会在当前目录中创建一个名为env
的新文件夹,并将虚拟环境安装到其中。 -
激活虚拟环境。要在命令行中激活虚拟环境,请执行以下命令:
source env_name/bin/activate
在Windows系统上,要激活虚拟环境,请运行以下命令:
env_name\Scripts\activate
-
现在就处于虚拟环境中,可以自行安装相应的安装包了。本项目中,
python -m pip install -r requirements.txt
要注意,此时所在目录一定要是项目的目录,不然找不到这个requirements.txt文件,你可以pwd
看看当前目录路径,也可以ls
看看当前路径下有哪些文件。
-
有了环境,有了项目就可以直接运行了,
python main.py
如果你2.1.2节中的修改没有问题,这时已经好了,并且会生成两个链接。输出大概是这样:
这时候就已经好了。确实可以通过public URL 来打开,
至于能不能回答问题,这取决于你的APIkey是否正确以及代理地址是否正确。
but,有个很尴尬的问题,当你退出python程序后,程序就退出了,链接就失效了。
而当你本地主机关闭与云服务器的连接时,python程序也就退出了,
若不关闭连接就不能脱离本地主机运行,那上云的意义何在?
那么,如何永驻?
3 项目“服务化”(后台运行python项目)
为了让上云有意义,
第一反应就是将程序“服务化”
想了下关键词,是后台运行。
在先前的项目目录中;在先前的虚拟环境中
nohup python -u main.py > logfile.log 2>&1 &
解释:
-
nohup 不是指定的在后台运行,但是这个nohup是让程序永久运行下去,和前后台没关系(这个不用改)
-
“-u”表示不启用缓存,实时输出打印信息到日志文件(如果不加-u,则会导致日志文件不会实时刷新代码中的print函数的信息)
但程序还是运行滴,但总体还是不舒服的,不在掌控中。就是你感觉程序好像崩了。 -
main.py 这个是项目的主程序,就是想要运行的程序
-
“> logfile.log” 这个右括号是把你的输出的日志到后边的logfile.log日志文件中
-
2>&1 这个2表示的当出错的时候输出的错误信息 >& 这个表示重定向;1表示标准输出 ,所以结合起来就是把错误信息重定向到标准输出
-
& 这个表示在后台运行
然后具体的输出信息就可以在logfile.log文件里面看到,查看的命令是:
cat logfile.log
localURL和publicURL都在里面,包括你的web端口,代理信息等等。虽然publicURL说的是72小时有效,但是经过我的实测,是无限期的,开心吧。
如果没搞好,nohup命令也会给你个进程号,如果你发现有地方不对,记得杀进程再重新搞(毕竟nohup这命令是要永久后台运行!)
kill -9 PID
-9应该是一种属性比如不顾一切地杀了(千万别觉得这是进程号,我当初就是这么把自己玩崩了);PID是指进程号,就是上述命令返回的那个值。
如果你后台运行完觉得万事大吉了,然后关了,然后发现不对劲,但是找不到进程了,怎么找进程?
ps aux |grep main
That’s all.
但是这个经过huggingface转发的链接会导致加载比较慢。而且如果你想要通过你的公网ip访问或者是通过你的域名访问,
考虑localURL
4 localURL访问(公网ip访问,域名访问)
要直接通过localURL来访问的话,需要给云服务器添加防火墙规则,并在云服务器系统中放开端口。
4.1 云服务器添加防火墙规则
4.2 云服务器系统防火墙放开端口
不用iptables,用firewalld
- 开启防火墙服务firewalld
# 开启防火墙服务
sudo service firewalld start
或者
sudo systemctl start firewalld
# 重启防火墙服务
sudo service firewalld restart
# 关闭防火墙服务
sudo service firewalld stop
- 查看防火墙服务状态
# 查看防火墙服务状态
sudo systemctl status firewalld
# 查看防火墙状态
sudo firewall-cmd --state
- running状态下,向firewall添加需要的端口
# 查看防火墙服务状态
sudo firewall-cmd --permanent --zone=public --add-port=666/tcp
或者
sudo firewall-cmd --zone=public --add-port=5151/tcp --permanent
# 重新加载配置
sudo firewall-cmd --reload
命令的作用是以管理员身份对公开域永久开放tcp协议的666和5151端口,即允许这两个端口的tcp流量通过。
自己要哪些端口就加那些。
如果加错了想删除,把add-port改成remove-port就行,比如google禁用了一些不安全端口:
google限制端口
其中6666就在里面,
sudo firewall-cmd --permanent --zone=public --remove-port=6666/tcp
- 查看已经放开的端口
# 查看对公开域永久放开的端口
sudo firewall-cmd --permanent --zone=public --list-ports
或者
# 列出所有的firewalld规则
sudo firewall-cmd --list-all
如果你是先后台运行了python项目,找到了随机的web端口,然后加了防火墙规则,这时候已经可以通过公网ip+端口访问这个web应用了。
如果你想固定这个放开的端口,以免每次运行都要重新放开端口,那就修改python配置文件设置固定端口。
4.3 修改python项目中的端口
到python项目路径下修改config_private.py配置文件中的端口,WEB_PORT = -1
表示每次开机的端口都是随机的,比较麻烦,所以我改成自己想放开的端口,对应上前面的防火墙规则。
然后像第三章那样重新运行就可以了。
5 域名访问
5.1 备案
搞了几天,极其麻烦,要求还严格,心态崩了。
5.2 修改DNS解析(不想备案那就Cloudflare)
Cloudflare dashboard
注册账号开始免费使用就行了。
- Cloudflare dashboard注册账号开始免费使用。
- 添加站点(Add site),输入你的域名。
- 然后按着说明操作就行了,不会就按照默认的来,一路保存到最后,保存他给出的DNS server(待会要修改到云服务器的DNS服务器)。提交完后续24小时内会收到Cloudflare解析完的邮件:
- 在自己买的域名的云产品里面找到域名注册,然后选择管理域名,在DNS解析里修改DNS服务器,换上刚才保存的地址。
5. 等他生效,
https解析,,,待写。