WEB-DL

新版NexusPHP手动搭建PT站

一、准备工作

(一)准备一台vps或者专用服务器

问了新版NexusPHP的作者,回复说“建议2核CPU, 4G内存起步”,但是我实测“1核CPU,1G内存”也可以成功运行,不过随着后续站点人数和peer数增加,肯定要更高配置。

(二)名词释义

本教程参考新版NexusPHP的文档,直接照搬专有名词含义,具体可以直接访问https://doc.nexusphp.org/start.html

ROOT_PATH,指部署应用的根目录,如 “/home/wwwroot/demo.nexusphp.org”

RUN_PATH,指入口文件所在目录,在这里为“ROOT_PATH/public”,注意要配置到 public 目录!!!注意要配置到 public 目录!!!注意要配置到 public 目录!!!

PHP_USER,指运行 PHP 的用户,一般为 www 或 www-data,以具体为准。

DOMAIN, 指网站域名,如 demo.nexusphp.org

(三)环境要求

PHP: 8.0|8.1|8.2,必须扩展:bcmath, ctype, curl, fileinfo, json, mbstring, openssl, pdo_mysql, tokenizer, xml, mysqli, gd, redis, pcntl, sockets, posix, gmp, opcache

Mysql: 推荐 5.7 最新版或以上

Redis: 2.6.12 或以上

Composer:推荐最版本

(四)常用软件和环境

wget、curl、screen、net-tools、ca-certificates、supervisor这些都是日常必备的,建议提前安装了。

apt-get install -y wget curl screen net-tools ca-certificates supervisor

wget或者curl会因为识别证书错误而不能下载文件情况,此情况下wget必须加上“–no-check-certificate”才能下载,每次都要加下载参数挺烦人的,当然本教程能方便加上的地方都给你加上了。

(五)其他说明

本教程在Debian 9 x64系统、lnmp环境下测试运行成功,除特别方便的一键脚本外,不借助其他第三方管理面板或软件。

本教程基于新版NexusPHP官网文档介绍,个别地方如有表述不清,请自行查看官网新版NexusPHP官网文档。

其实可以可以尝试自己手动编译安装Nginx、MySQL、PHP软件,不用lnmp一键脚本创建lnmp环境,但能省事就省事点。

二、安装纯净的系统并安全加固

(一)一键DD纯净的Debian9 64位系统

bash <(wget --no-check-certificate -qO- 'https://moeclub.org/attachment/LinuxShell/InstallNET.sh') -d 9 -v 64 -a

DD好之后默认密码为“MoeClub.org”,登录系统后尽快修改默认密码,建议8位数以上包含字母大小写、数字以及特殊字符。

其他版本的系统,请根据你自己的喜好,参考脚本内容,修改一键脚本的运行参数。

(二)修改SSH默认端口

SSH默认端口为22,这样导致了暴力登录脚本会直接通过22端口暴力破解密码,为了相对安全一点,建议改成其他不常见的端口号。

nano /etc/ssh/sshd_config
/etc/init.d/ssh restart

(三)SSH多次登录失败后限制IP

wget --no-check-certificate https://web-dl.cc/share/ssh_secure.sh
cp ssh_secure.sh /home/ssh_secure.sh
crontab -e
*/1 * * * * sh /home/ssh_secure.sh

三、安装lnmp环境

如果你用lnmp一键脚本,请注意检查文件md5m,原因参见此文https://mp.weixin.qq.com/s/OT7C1l5rjBNCawFXRIUJOQ

(一)下载lnmp完整安装包

lnmp1.9完整安装包 md5: 09020777f9ce981a01b1fdd229f6f427

wget --no-check-certificate https://lnmp.club/lnmp1.9-full.tar.gz
md5sum lnmp1.9-full.tar.gz

检查一下下载的文件md5是否和早期无污染的文件一致。

(二)screen后台一键安装lnmp环境

请提前确定是否有screen软件,如果没有,根据你的系统安装一下。

screen -S lnmp
tar zxf lnmp1.9-full.tar.gz && cd lnmp1.9-full && ./install.sh lnmp

新版的NexusPHP根据作者介绍,有如下环境要求

PHP:8.0|8.1|8.2
Mysql: 推荐 5.7 最新版或以上
Redis: 2.6.12 或以上

本人在1G内存的VPS成功搭建PT站,PHP:8.0.20,Mysql:5.7,Redis:最新版。

四、PHP扩展安装

查看当前lnmp一键脚本安装的php包含哪些扩展

/usr/local/php/bin/php -m

必须包含如下扩展:

bcmath, ctype, curl, fileinfo, json, mbstring, openssl, pdo_mysql, tokenizer, xml, mysqli, gd, redis, pcntl, sockets, posix, gmp, opcache

lnmp脚本会自动安装除“opcache、fileinfo、redis、gmp”以外的上述所需扩展,剩下这4个PHP扩展需要手动安装一下。如果不安装所需PHP扩展,在执行“Composer install”时会出现各种安装错误。

(一)一键脚本安装PHP扩展

进入lnmp完整安装包目录

cd /root/lnmp1.9-full
./addons.sh install opcache
./addons.sh install fileinfo
./addons.sh install redis

(二)编译安装gmp扩展

进入lnmp完整安装包的src目录,解压PHP8.0(根据你安装的php版本解压)

cd /root/lnmp1.9-full/src
tar -jxvf php-8.0.20.tar.bz2
cd php-8.0.20/ext/gmp
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

执行上述步骤后无特殊情况即编译安装好gmp扩展,但未启用。

修改php配置“/usr/local/php/etc/php.ini”,删除第929行“extension=gmp”前面的“;”符号,即可启用“gmp”扩展。如果重启php后还没有“gmp”扩展,直接追加“extension=gmp.so”试试

(三)启用所需的php函数

修改“/usr/local/php/etc/php.ini”文件,找到“disable_functions”这一行,把以下几个函数从禁用名单里移除即可,否则在Composer安装网站运行环境时会出现错误。

“symlink,proc_open,proc_get_status,exec”

在网页安装过程检查环境时也会提醒你缺失PHP函数

(四)其他说明

对于第一次手动安装PHP扩展的网友,可以直接参考网上的一些教程比如这一篇
https://www.jianshu.com/p/c6dfe6af740c

也可以直接进入此网站搜扩展进行编译安装。
https://pecl.php.net/package-stats.php

五、安装Composer

https://docs.phpcomposer.com/00-intro.html

本人多年前(大概2015年)尝试搭建老版本的NexusPHP,当时菜鸡一个(现在也算是菜鸡),卡在了Composer和Memcache这上面,现在想想丢人啊。

(一)下载composer并设置为全局环境

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

(二)其他说明

记录一次composer安装失败的案例
https://learnku.com/articles/76013

Composer 安装与使用
https://www.runoob.com/w3cnote/composer-install-and-usage.html

六、创建数据库

(一)登录Mysql

mysql -u root -p

此步会要求你输入数据库root账号的密码,即lnmp一键脚本安装环境时你输入的数据库密码。

(二)新建一个数据库

字符集(charset)及排序规则(collate)选择 utf8 + utf8_general_ci 或 utf8mb4 + utf8mb4_general_ci ,后者支持存储 emoji 表情,前者不支持。

create database nexusphp default charset=utf8mb4 collate utf8mb4_general_ci;
quit

(三)其他说明

数据库名字“nexusphp”可以改成自己想要的名字,但后续操作记得别用教程介绍的默认“nexusphp”。

七、添加网站及配置网站程序文件

进入你要设置网站目录的文件夹

cd /home/wwwroot

(一)下载并解压NexusPHP源码

wget https://github.com/xiaomlove/nexusphp/archive/refs/tags/v1.8.8.zip
unzip v1.8.8.zip

(二)复制所有文件到你的网站根目录

mkdir DOMAIN 
#此处“DOMAIN”目录只是为了方便分类网站,你可以自定义一个目录名字,但我还是建议你直接创建一个域名名字的目录,因为本教程后续的RUM_PATH就是包含了这样的目录名字#
cp -r nexusphp-1.8.8/. ROOT_PATH

(三)进入网站根目录安装

cd ROOT_PATH
composer install

(四)复制网页安装文件

cp -R ROOT_PATH/nexus/Install/install ROOT_PATH/public/

注意“ROOT_PATH/public/c/install”目录及其下面的install.php是否有www权限,一般来说上述操作后没权限问题。

(五)设置网站根目录所有者

nexusphp运行需要设置网站根目录所有者为运行PHP的用户“www”或者“www-data”,lnmp一键脚本安装的php为“www”用户。

chown -R www:www ROOT_PATH

如果后续仍然遇到写入失败问题,直接赋予网站根目录777权限

chmod -R 0777 ROOT_PATH

(六)配置网站

7.6.1 直接创建不启用https的网站配置

以 nginx 为例,只需要最基本的配置即可。在 nginx 配置目录(lnmp脚本安装的在 /usr/local/nginx/)下新增一个DOMAIN.conf

wget --no-check-certificate https://web-dl.cc/share/DOMAIN.conf
mv DOMAIN.conf /usr/local/nginx/conf/vhost/demo.nexusphp.org.conf
nano /usr/local/nginx/conf/vhost/demo.nexusphp.org.conf
server {
# 以实际为准
root RUN_PATH; 

server_name DOMAIN;

location / {
    index index.html index.php;
    try_files $uri $uri/ /nexus.php$is_args$args;
}

# Filament
location ^~ /filament {
    try_files $uri $uri/ /nexus.php$is_args$args;
}

location ~ \.php {
    # 以实际为准
    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

access_log /var/log/nginx/DOMAIN.access.log;
error_log /var/log/nginx/DOMAIN.error.log;
}

需要修改“RUN_PATH”和“DOMAIN”为你自己的运行目录和域名。

7.6.2 用LNMP创建网站配置

不推荐,毕竟用LNMP程序添加新版NexusPHP网站后,仍然需要手动添加PHP监听端口“location ~ .php”、“location ^~ /filament”以及指定“nexus.php”,徒增烦恼,但你搭建其他非新版NexusPHP网站时可能用lnmp程序更方便。

lnmp vhost add

根据提示设置网站即可,不需要用lnmp添加数据库,因为上一步已经设定好。其实我觉得可以直接在此步创建数据库,但是没进行测试,所以暂时不能详细介绍如何修改,希望有人能参考此文 https://www.jianshu.com/p/1a2145001fa2 测试一下。

没特殊安全处理情况下,SSL证书会泄露你源站IP,建议进行特殊处理后再设置ssl证书,此步先不要设置任何证书,后续我会详细介绍设置网站强制https访问。

修改网站配置

/usr/local/nginx/conf/vhost/demo.nexusphp.org.conf

按照上面的网站配置,添加指定“nexus.php”、Filament(location ^~ /filament)、PHP监听端口(location ~ .php)

7.6.3 配置SSL

以后再单独写教程。

(七)修改php监听地址

php监听地址和网站的nginx配置对不上会出现“Nginx 502 Bad Gateway错误”

查看错误日志为“connect() failed (111: Connection refused) while connecting to upstream, client:, server: , request: “GET / HTTP/1.1”, upstream: “fastcgi://127.0.0.1:9000”, host: ”,本人被这个502错误坑大了,网上搜了半天502错误解决方法,对1G内存机器的php和nginx配置进行各种调整,但仍然没用,便以为是内存和CPU都太低原因,换了台2C4G的机器还是这个错误,后来经朋友提醒可能lnmp的php配置不一样,于是搜了一下“fastcgi”,发现只是php 5.2以上版本的监听地址问题,大意了,居然忽略了这么明显的问题。

7.7.1 方案1-直接修改php-fpm

lnmp一键脚本创建的php-fpm配置“/usr/local/php/etc/php-fpm.conf”默认是“listen = /tmp/php-cgi.sock”,需要修改php-fpm.conf文件的第7行为

listen = 127.0.0.1:9000

7.7.1 方案2-设置php-fpm多pool池

cd /usr/local/php/etc/php-fpm.d
wget --no-check-certificate https://web-dl.cc/share/php-fpm-pt.conf

修改php-fpm.conf配置,追加一行“include = etc/php-fpm.d/*.conf”

nano /usr/local/php/etc/php-fpm.conf

重启php-fpm生效配置

/etc/init.d/php-fpm restart

查看一下是否成功设置php-fpm多pool池

ps aux|grep php-fpm

(八)删除网站防跨目录

上述步骤7.1如果用了lnmp命令来配置网站,会自动生成一个“.user.ini”访问跨目录文件,因为NexusPHP运行目录是“ROOT_PATH/public”,这个防跨站文件也会影响后面使用,建议直接删除。

chattr -i ROOT_PATH/.user.ini
rm -f ROOT_PATH/.user.ini

(九)重启所需软件

对上述所有步骤操作后,需要重启一下php、mysql、nginx,否者一些配置修改不会生效。

七、网页配置网站

上述操作都无误且没有提示错误后,打开浏览器访问你的网站,会进入网页配置网站,此步安装网页上提示即可。

(一)检查环境

(二)设置时区及数据库等

(三)建立数据表

(四)导入配置等

(五)建立SYSOP管理员账号

(六)访问网站

提示配置完成后即可重新打开网站进入登录页面了,登录你刚才创建的管理员账号

安全警告

网页安装完成后,必须删除 “ROOT_PATH/public/install” 目录,安装日志包含敏感数据,不要泄露。

八、辅助任务

(一)创建后台任务

创建用户 PHP_USER 的定时任务,执行:crontab -u PHP_USER -e,在打开的界面输入以下:

 * * * * cd ROOT_PATH && php artisan schedule:run >> /tmp/schedule_DOMAIN.log
 * * * * cd ROOT_PATH && php include/cleanup_cli.php >> /tmp/cleanup_cli_DOMAIN.log 

如果没有生效,查看 /etc 下是否有 crontab 文件,如果有,在里边编辑亦可:

 * * * * PHP_USER cd ROOT_PATH && php artisan schedule:run >> /tmp/schedule_DOMAIN.log
 * * * * PHP_USER cd ROOT_PATH && php include/cleanup_cli.php >> /tmp/cleanup_cli_DOMAIN.log 

可通过查看重定向文件(也就是 >> 后面指向的那个文件)是否有内容输出确定是否生效。

(二)创建队列守护进程(>=1.8需要)

安装好 supervisor,在其配置目录(一般为 /etc/supervisor/conf.d/)下新增一个配置文件 nexus-queue.conf,注意替换 ROOT_PATH, PHP_USER,其中 numprocs 是启动的进程数,一般为自己 CPU 核心数即可。

[program:nexus-queue]
process_name=%(program_name)s_%(process_num)02d
command=php ROOT_PATH/artisan queue:work --tries=3 --max-time=3600
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=PHP_USER
numprocs=2
redirect_stderr=true
stopwaitsecs=3600
stdout_logfile=/tmp/nexus-queue.log

保存好后执行以下命令启动之:

启动

supervisord -c /etc/supervisor/supervisord.conf

重新读取配置文件

supervisorctl reread

更新进程组

supervisorctl update

启动

supervisorctl start nexus-queue:*

九、错误及常见问题

(一)缺失php函数

“Required functions true These functions are Disabled: symlink,proc_open,proc_get_status,exec”

(二)出现502错误

php没有正常启动或者php与nginx之间设置不对应

/etc/init.d/php-fpm restart

检查php进程状况

netstat -anpo | grep “php-cgi” | wc -l

修改php和nginx配置

PHP配置文件:/usr/local/php/etc/php.ini
php-fpm配置文件:/usr/local/php/etc/php-fpm.conf

(三)不知道lnmp各软件启动命令和软件位置

/etc/init.d/nginx {start|stop|reload|restart}
/etc/init.d/php-fpm {start|stop|quit|restart|reload|logrotate}
Nginx 目录 : /usr/local/nginx/
MySQL 目录 : /usr/local/mysql/
MySQL 目录 :/usr/local/mysql/var/
PHP 目录 : /usr/local/php/
Nginx主配置(默认虚拟主机)文件:/usr/local/nginx/conf/nginx.conf
添加的虚拟主机配置文件:/usr/local/nginx/conf/vhost/域名.conf
MySQL配置文件:/etc/my.cnf
PHP配置文件:/usr/local/php/etc/php.ini
php-fpm配置文件:/usr/local/php/etc/php-fpm.conf
PureFtpd配置文件:/usr/local/pureftpd/pure-ftpd.conf 1.3及更高版本:/usr/local/pureftpd/etc/pure-ftpd.conf
PureFtpd MySQL配置文件:/usr/local/pureftpd/pureftpd-mysql.conf
Proftpd配置文件:/usr/local/proftpd/etc/proftpd.conf 1.2及之前版本为/usr/local/proftpd/proftpd.conf
Proftpd 用户配置文件:/usr/local/proftpd/etc/vhost/用户名.conf
Redis 配置文件:/usr/local/redis/etc/redis.conf

(四)查看日志

具体以你自己设置的日志位置为准,比如:

cat /home/wwwlogs/DOMAIN.error.log
cat /var/log/nginx/DOMAIN.access.log

(五)不能正常跳转安装界面

查看 Nginx 错误日志

cat /home/wwwlogs/nginx_error.log

9.5.1 看不到错误

可能是 php-fpm 错误没有输出到 nginx error log。打开 www.conf(不知道在哪尝试 whereis php-fpm,能看到基本目录),找到 catch_workers_out 及 php_admin_flag[log_errors],保证其为打开状态。

修改重启 php-fpm 生效。

catch_workers_out = yes
php_admin_flag[log_errors] = on

9.5.2 依然看不到Nginx 错误

修改 include/core.php 约第 18 行,把 0 改为 1,把错误展示到页面上。

ini_set('display_errors', 1);

WARNING
修复错误后,记得把错误展示关闭!

码字很辛苦,转载请注明来自非WEB-DL资源站《新版NexusPHP手动搭建PT站》

评论