对于这个项目或者说这个程序,我就一句话概况一下:技术用的很前卫也很新颖,但是性能稀烂,前端更稀烂。。。不过依旧很有潜力,毕竟是PT程序,要知道现在市面上没有什么像样的PT程序。。。
这里记录一下我的折腾过程。以下操作请使用CentOS7X64,并且机器内存大于2GB。
为了更方便,这里我们使用宝塔,首先安装一下宝塔:
代码语言:javascript复制yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && bash install.sh
然后在宝塔内安装LNMP环境,注意PHP版本要7.2,MySQL必须5.7,这也就是为什么我说内存要大于2G的原因,MySQL5.7必要要内存大于1.5G才能正常工作,再加上其他的一些东西2G可能都还少了。
除此之外,你还需要在宝塔后台的“软件管理”安装Redis。
完事之后回到终端,安装Node.js:
代码语言:javascript复制curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
yum -y install nodejs
安装supervisord,这个待会用来管理程序的各种进程:
代码语言:javascript复制yum -y install supervisor
先启动并设置开机启动:
代码语言:javascript复制systemctl start supervisord
systemctl enable supervisord
回到宝塔面板内新建一个站点,并添加Nginx伪静态规则:
代码语言:javascript复制location / {
try_files $uri $uri/ /index.php$is_args$args;
}
接着你需要把站点的运行目录修改为public,这个很重要Laravel框架的特性。
然后打开phpMyAdmin新建一个数据库,命名为:pt。
现在回到终端内CD到你的站点目录:
代码语言:javascript复制cd /www/wwwroot/你的站点目录
拉取项目文件并把配置文件重命名:
代码语言:javascript复制git clone https://github.com/HDInnovations/UNIT3D.git tmp && mv tmp/.git . && rm -rf tmp && git reset --hard
cp .env.example .env
安装作曲家:
代码语言:javascript复制curl -sS https://getcomposer.org/installer | php
安装laravel-echo-server:
代码语言:javascript复制npm install -g laravel-echo-server
然后执行如下命令开始配置:
代码语言:javascript复制laravel-echo-server init
在这个向导内,我们先暂时按下面的操作来,待会再来修改,这个配置文件随时都可以改的:
代码语言:javascript复制? Do you want to run this server in development mode? (y/N)
A:N
? Which port would you like to serve from? (6001)
A:回车
? Which database would you like to use to store presence channel members? (Use arrow keys)
A:选择Redis
? Enter the host of your Laravel authentication server. (http://localhost)
A:输入你的站点域名,需要加上http://
? Will you be serving on http or https?
A:暂时选择http
? Do you want to generate a client ID/Key for HTTP API? (y/N)
A:Yes
? Do you want to setup cross domain access to the API? (y/N)
A:No
走完这个向导后,就会在你的站点目录生成出一个appid和key,复制这些内容待会需要用到。
现在回到面板中,找到“软件管理”-“PHP7.2设置”-“禁用函数”,把下面的这几个函数删除了:
代码语言:javascript复制popen
proc_open
接着点击安装扩展,安装:fileinfo
现在回到终端内,使用作曲家安装项目所需依赖:
代码语言:javascript复制composer install
composer require predis/predis
然后再安装node.js依赖:
代码语言:javascript复制npm install
npm install --save-dev socket.io-client
npm run prod
全部完成之后,你需要编辑这个程序的配置文件:
代码语言:javascript复制vi .env
vi config/api-keys.php
vi config/app.php
vi config/other.php
1.env这个配置文件内,你需要填写之前生成出来的key/你的站点域名/MySQL数据库信息/SMTP发信设置/管理员账号密码。
2.api-keys.php,如果你没有申请这些key的话,就不用配置这个文件了,这是用来自动显示电影的IMDB等信息的。
3.app.php,在这个配置文件内,你需要填写你的站点名/站点域名,其他都不需要改动。
4.other.php,在这个配置文件内,你可以根据自己的需要修改站点标题/站点主题/以及一些其他设置。
接着我们配置计划任务:
代码语言:javascript复制crontab -e
写入:
代码语言:javascript复制* * * * * php /www/wwwroot/你的站点目录/artisan schedule:run /dev/null 2 &1
然后回到你的站点根目录的上级目录:
代码语言:javascript复制cd ..
把你的站点根目录下的所有文件所有者进行一次修改,修改为宝塔面板所需的www用户:
代码语言:javascript复制chown -R www:www 你的站点目录
接着再回到你的站点根目录:
代码语言:javascript复制cd /www/wwwroot/你的站点目录
导入程序的数据库信息:
代码语言:javascript复制php artisan key:generate
php artisan migrate --seed
成功之后现在就可以配置supervisord了:
代码语言:javascript复制vi /etc/supervisord.conf
在文件的尾部写入:
代码语言:javascript复制[program:unit3d-queue]
process_name=%(program_name)s_%(process_num)02d
command=php /www/wwwroot/你的站点目录/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=www
numprocs=2
[program:unit3d-socket-io]
process_name=%(program_name)s_%(process_num)02d
command=/usr/bin/node /usr/bin/laravel-echo-server start --dir=/www/wwwroot/你的站点目录
autostart=true
autorestart=true
user=root
numprocs=1
重启supervisord并更新配置:
代码语言:javascript复制systemctl restart supervisord
supervisorctl update
使用如下命令查看进程运行清空,如果一切正常,你应该可以看到三个进程在RUNNING:
代码语言:javascript复制supervisorctl
打开你的站点域名应该可以看到这个程序的登录界面了:
如果无法正常访问,排查是否把防火墙关闭了(宝塔会默认启动防火墙):
代码语言:javascript复制systemctl stop firewalld.service
systemctl disable firewalld.service
现在我们这个站点是通过HTTP访问的,如果我们要把UNIT3D放到HTTPS中运行呢?该如何配置?
之前我们通过laravel-echo-server在站点根目录下生成了一个名为laravel-echo-server.json的配置文件,现在你应该首先利用宝塔的SSL证书申请功能为你的站点域名申请一个Let’s Encrypt的SSL证书,并开启强制SSL。然后你申请的这个证书路径,应该如下:
代码语言:javascript复制/etc/letsencrypt/live/你的域名/cert.pem
/etc/letsencrypt/live/你的域名/privkey.pem
现在编辑laravel-echo-server.json:
1.”authHost”修改你的域名为https,例如:https://www.zalou.cn
2.”sslCertPath”填写你的证书路径
3.”sslKeyPath”填写你的私钥路径
回到终端重启UNIT3D:
代码语言:javascript复制supervisorctl reload
另外该程序使用socket.io来实现实时消息推送等功能,比如在线聊天什么的,这个会占用6001端口,众所周知PT站容易被DDCC,一般搞PT都把站放到CloudFlare下面,但是CloudFlare对WebSocket的端口支持没有6001,会导致这个程序的某些功能失效,所以我们需要修改这个程序的WebSocket端口号,下面我们把这个程序的端口修改成CloudFlare支持的8443(前提是你按照上面的要求配置了SSL)
首先你还是需要编辑laravel-echo-server.json这个配置文件,把里面的:
代码语言:javascript复制"port": "6001"
改为
代码语言:javascript复制"port": "8443"
接着你需要编辑这个文件的第60行:
代码语言:javascript复制vi resources/assets/js/bootstrap.js
把里面的:
代码语言:javascript复制host: window.location.hostname ':6001'
改为:
代码语言:javascript复制host: window.location.hostname ':8443'
重载supervisord配置
代码语言:javascript复制supervisorctl reread
supervisorctl update
supervisorctl reload
重新构建程序:
代码语言:javascript复制npm run prod
清理缓存:
代码语言:javascript复制php artisan clear:all
别急,你还应该按照要求配置Nginx的伪静态规则,让程序能够获取到用户的真实IP,否则Tracker服务器都是连接的CDNIP,那用户还下个J8的种子。所以你现在应该在宝塔的伪静态设置加入:
代码语言:javascript复制set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 104.16.0.0/12;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2c0f:f248::/32;
set_real_ip_from 2a06:98c0::/29;
real_ip_header CF-Connecting-IP;
以上配置你应该加到location下面。现在这个UNIT3D应该就算是配置的完完全全了,不过由于作者自己都说了其实UNIT3D是不支持CloudFlare的,所以很有可能会出现一些七七八八的小问题,比如我用Deluge一开始可以连接上Tracker,但是过几秒钟后就会出现连接超时。不过这并不影响其他Peer,因为实际上是连接成功了的。
另外,此项目目前正处于急速更新状态,如果想更新自己的版本,可以使用下面的命令:
代码语言:javascript复制php artisan git:update
php artisan up
注意:更新前,你应该仔细浏览项目主页的修订记录,避免更新后会出现一些不必要的麻烦。
我非常期待有哪位dalao能够使用这款程序开一个小姐姐PT站,顺带送给我一个炒鸡VIP会员~