PT-Gen 0.4.4 版,相比于之前的 0.3.5 版,有很大的改动:

  1. 增加了数据库缓存,所以服务器必须要安装 sqlite3。
  2. 5月13日豆瓣电影的公共API下线,导致 PT-Gen v0.4.2 及之前的版本无法获取电影数据,现在通过在前端页面和后端程序加入 apikey 才解决这个问题。
  3. 修改了 API 路径,由原来的 /movieinfo/gen 改为 /infogen
  4. 去掉了 run.py

建议之前使用 v0.3.5 的朋友按此教程升级到 v0.4.5,同时前端页面也要注意更新。


服务器必备的软件环境:

  • nginx
  • python3.5 或者更高
  • pip3
  • uWSGI
  • sqlite3

我使用的是 lnmp 安装环境,nginx 安装过程不再赘述。


如果你的 vps 系统是比较新的,例如 Debian 9 ,可能已经预置了 python3.5 和 sqlite3。可以通过下面的命令查看_sqlite3.so情况,如果有类似 /usr/lib/python3.5/lib-dynload/_sqlite3.cpython-35m-x86_64-linux-gnu.so这样的文件,则不需要再编译安装 sqlite3 和 python3。

find / -name _sqlite*.so

编译安装 sqlite3

  1. 下载源码
  2. 解压
  3. 进入目录
  4. 编译
  5. 安装
wget https://www.sqlite.org/2019/sqlite-autoconf-3280000.tar.gz
tar xzvf sqlite-autoconf-3280000.tar.gz
cd sqlite-autoconf-3280000
./configure --prefix=/usr/local/sqlite
make -j
make install

安装成功后,会出现类型下面的提示


编译安装 python 3

之前有编译安装 python3 的重新进入源码目录编译安装,没有的需下载源码。

下载 python 源码

用 wget 从官网下载源码,最低可选择版本 python3.5。

cd ~
wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz

解压,配置

下载完成后解压,然后修改setup.py

tar -xzvf Python-3.6.4.tgz
cd Python-3.6.4
vim setup.py

查找 sqlite_inc_paths 新增

'/usr/local/sqlite/include',
'/usr/local/sqlite/include/sqlite3',

完成后如下

保存并退出。

编译,安装

./configure --enable-loadable-sqlite-extensions --prefix=/usr/local/python3
make -j
make install

建立软链

建立 python3 和 pip3 的软链(安装过 python3 的不需要再建软链)。

ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

建立软链后输入 python3 即可进入 python3 解释器,同时你还可以输入 python 或 python2 进入 python2 解释器,二者可以共存。


下载 PT-Gen

lnmp 新建主机,设置网站根目录和配置文件

lnmp vhost add

进入网站根目录并下载程序源码, v0.3.5 用户先杀掉uwsig进程和删除网站目录里面的 PT-Gen。

cd /home/wwwroot/api.example.com
wget https://github.com/BFDZ/PT-Gen/archive/0.4.5.tar.gz
tar xzvf 0.4.5.tar.gz
mv PT-Gen*/* ./

修改数据库文件权限,使 www 用户可以读写数据库。

chmod -R 777 database/

安装依赖库

pip3 install -r requirement.txt

安装,配置 uWSGI

pip3  install uwsgi

新建配置文件

vim config.ini

填入此配置文件内容并保存

[uwsgi]
# 采用sock方式通信,程序在启动时会自己创建这个文件
socket = /tmp/uwsgi.sock
pidfile = /tmp/uwsgi.pid
vacuum = true
# 指向网站目录
chdir = /home/wwwroot/api.example.com
# python 启动程序文件
wsgi-file = app.py
# python 程序内用以启动的 application 变量名
callable = app
# 进程数,可按服务器配置和负载情况调高
processes = 1
# 线程数
threads = 8
# 开启master,程序会进入后台运行模式
master = true
# 最大请求数,在指定数量的管理请求后重载worker
max-requests = 6000
# 指定启动用户
uid = 1001
# 指定用户组
gid = 1001
# 日志路径
daemonize = /var/log/uwsgi.log
disable-logging = true
vacuum = true

建议不要使用 root 用户启动 uwsgi,保持和 nginx 的启动用户一样。lnmp 中 nginx 进程是属于www ,所以 uwsgi 的 uid/gid 也要指定为 www 用户。


配置 nginx

修改 nginx 网站配置文件

vim /usr/local/nginx/conf/vhost/api.example.com.conf

location / 段添加 uwsgi 相关配置, v0.3.5 用户将 run:app 改成 app

location / 
{
    include      uwsgi_params;
    uwsgi_pass   unix:/tmp/uwsgi.sock;
    uwsgi_param  UWSGI_CHDIR  /home/wwwroot/api.example.com;
    uwsgi_param  UWSGI_SCRIPT app;
}

加载配置文件

lnmp nginx reload

运行后端

uwsgi --ini config.ini

这时访问 api 的域名,会出现提示 Hello world~ ,表示程序已成功运行。

其他操作:

  • 重载:uwsgi --reload /tmp/uwsgi.pid
  • 停止:uwsgi --stop /tmp/uwsgi.pid

自动更新

后台自动更新数据库需要在 crontab 中添加,建议10分钟更新5个。

crontab -e

最后一行添加

*/10 * * * * cd /home/wwwroot/api.example.com/ && /usr/local/bin/flask update_infogen

修改前端页面 api

PT-Gen 的 api 的路径为 api.example.com/infogen ,前端页面修改此处的api网址为自己的即可。