用VPS云服务器部署ChatGPT前言

chatgpt做为近期爆火的人工智能服务,其账号和api接口的价格水涨船高。这里给出一个粗略的api部署方法,仅供参考。

文章结构:

  • 注册ChatGPT

  • 安装nginx

  • 安装flask

  • 安装gunicorn

  • 设计html页面

Nginx 和 Gunicorn 及 Flask 的关系?

最终成品页面:

ChatGPT注册

参考视频

云服务器环境准备

说明:服务器版本centos7,莫斯科服务器,为了能够确保能够正常访问ChatGPT的api接口,请使用国外服务器

安装nginx

安装依赖

 yum install -y gcc gcc-c++ make libtool wget pcre pcre-devel zlib zlib-devel openssl openssl-devel

nginx下载

wget http://nginx.org/download/nginx-1.18.0.tar.gz

解压

tar -zxvf nginx-1.18.0.tar.gz

安装

cd nginx-1.18.0./configuremake && make install

最终nginx会安装在/usr/local目录下

nginx基础命令

普通启动服务:

/usr/local/nginx/sbin/nginx

配置文件启动:

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

重新加载进程:

/usr/local/nginx/sbin/nginx -s reload

查看相关进程:

ps -ef | grep nginx

nginx启动服务提示98: Address already in use错误:

查看80端口

netstat -tnulp|grep 80

杀掉占用80端口的进程

kill -9 xxxx

最后启动nginx

无法打开网页情况:

检查nginx是否正常运行

ps aux|grep nginx

检查80端口是否分配给nginx

netstat -ntlp

设置80防火墙

firewall-cmd --zone=public --add-port=80/tcp --permanent

重启防火墙

systemctl restart firewalld.service

说明:

firewall-cmd --reload # 配置nginx环境时,此命令无法生效

配置flask

安装flask

pip install flask

安装flask-cors

目的是为了实现XHR跨域拿到后端的python数据

pip install flask-cors

为方便管理,建议在nginx的文件夹内放置flask的.py文件

该文件配置如下

from flask import Flaskfrom flask import requestfrom flask_cors import CORSimport openaiopenai.api_key = "chatgpt的api"app = Flask(__name__)CORS(app, resource=r'/*')@app.route("/post_test", methods=["POST"])def chat():    if request.method == "POST":        name = request.form.get("name")        completion = openai.ChatCompletion.create(            model="gpt-3.5-turbo",            messages=[                {"role": "user", "content": name}            ]        )        return completion['choices'][0]['message']['content']if __name__ == "__main__":    app.run(host='0.0.0.0', port=81)

记得把81端口打开

安装和配置gunicorn

pip install gunicorn

在与flask同目录下创建一个gunicorn的python文件,并写入

bind = "0.0.0.0:81"daemon = True# 端口须和flask一致

用gunicorn启动flask

gunicorn -c gunicorn的python文件 flask的python文件名称:app

示例:

gunicorn -c gunicorn_test.py flask_test:app

参考文章:

通过Nginx部署flask项目 – 神雕爱大侠 – 博客园

flask+Gunicorn部署外网无法访问 – 简书

前端设计

由于设计仓促,有些变量只是随便声明,有空再修改

                ChatGPT            .talk_con{            width:600px;            height:700px;            border:1px solid #666;            margin:50px auto 0;            background:#f9f9f9;        }        .talk_show{            width:580px;            height:620px;            border:1px solid #666;            background:#fff;            margin:10px auto 0;            overflow:auto;        }        .talk_input{            width:580px;            margin:10px auto 0;        }        .whotalk{            width:80px;            height:30px;            float:left;            outline:none;        }        .talk_word{            width:420px;            height:26px;            padding:0px;            float:left;            margin-left:10px;            outline:none;            text-indent:10px;        }        .talk_sub{            width:56px;            height:30px;            float:left;            margin-left:10px;        }        .atalk{           margin:10px;        }        .atalk span{            display:inline-block;            background:#0181cc;            border-radius:10px;            color:#fff;            padding:5px 10px;        }        .btalk{            margin:10px;            text-align:right;        }        .btalk span{            display:inline-block;            background:#ef8201;            border-radius:10px;            color:#fff;            padding:5px 10px;        }        
您好,我是ChatGPT,请输入您想查询的问题。
document.getElementById('submit').onclick=()=>{ //获取问题并清空问题框 var b = document.getElementById('talkwords').value //添加问题到对话 const d=document.createElement('div'); Ques = '
'+b+'' d.innerHTML=Ques; const chatbox = document.getElementById('words') chatbox.insertBefore(d, chatbox.nextSiblings) const d2=document.createElement('div'); think = '
我正在思考,大约需要一分钟,请稍等一会...' d2.innerHTML=think; chatbox.insertBefore(d2, chatbox.nextSiblings) //xhr var ajax = null; if(window.XMLHttpRequest){ ajax = new XMLHttpRequest(); }else{ ajax = new ActiveXObject("Mincrosoft.XMLHTTP"); }; ajax.open("POST","http://harl02.top:81/post_test"); ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded") ajax.send('name='+document.getElementById('talkwords').value) document.getElementById('talkwords').value='' ajax.onreadystatechange = function(){ if(ajax.readyState == 4&& ajax.status ==200){ //左边的对话 a = ajax.responseText const d=document.createElement('div'); ih = '
'+a+'' d.innerHTML=ih; const kk = document.getElementById('words') kk.insertBefore(d, kk.nextSiblings) } } };

参考的文章:

JQuery实现聊天对话框 – 腾讯云开发者社区-腾讯云