新版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://dl.affvps.net/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, sodium
lnmp脚本会自动安装除“opcache、fileinfo、redis、gmp、sodium”以外的上述所需扩展,剩下这5个PHP扩展需要手动安装一下。如果不安装所需PHP扩展,在执行“Composer install”时会出现各种安装错误。
安装好扩展后检查一下是否启用,可以查看一下“php.ini”文件里相应的扩展前是否还有“;”符号
(一)一键脚本安装PHP扩展
进入lnmp完整安装包目录
cd /root/lnmp1.9-full ./addons.sh install opcache ./addons.sh install fileinfo ./addons.sh install redis ./addons.sh install sodium
(二)编译安装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”试试
(三)编译安装sodium扩展
如果一键脚本不能安装成功“sodium”扩展,可以手动编译安装,编译安装sodium扩展需要先安装libsodium软件包
apt-get install libsodium-dev
进入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/sodium /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config make && make install
执行上述步骤后无特殊情况即编译安装好sodium扩展,但未启用。
修改php配置“/usr/local/php/etc/php.ini”,删除第955行“extension=sodium”前面的“;”符号,即可启用“sodium”扩展。
(四)启用所需的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;
(三)其他说明
数据库名字“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
修复错误后,记得把错误展示关闭!
9.5.3 管理后台 500 错误
极有可能是日志文件 /tmp/nexus-202x-xx-xx.log 无法写入,可以尝试执行
chmod 777 /tmp/nexus-202x-xx-xx.log
或直接给tmp目录写入权限
chmod -R 777 /tmp/
9.5.4 数据备份
备份网站数据
php artisan backup:web
备份数据库
php artisan backup:database
或者一次性备份网站数据和数据库
php artisan backup:all
生成的数据在 /tmp 目录,下载并上传到新服务器上。
9.5.5 定时删除“sess_”开头的空文件
目前不知道php为什么会在tmp目录产生“sess_”开头的空文件,避免“sess_”开头的空文件太多导致服务器宕机,更有极端情况直接自动重启失败,crontab任务设置一下定时删除任务。
crontab -e
添加如下命令,即每小时的第5、20、35、50分钟执行删除tmp目录下的“sess_”开头文件
5,20,35,50 * * * * rm -rf /tmp/sess_*
9.5.6 版本升级
升级要用到rsync这个软件
apt-get install rsync
以1.8.8升级1.8.9为例
本次升级需要更新依赖,则需要删除composer.lock文件和composer.json文件
1.修改composer.json文件
rm /home/wwwroot/whax.net/composer.lock
nano /home/wwwroot/whax.net/composer.json
例如1.8.8升级到1.8.9需要在”require”处添加如下内容
“laravel/passport”: “^11.10,”
注:如果遇到某个版本升级时出现php扩展或函数错误,比如我之前没安装sodium扩展也能用低版本,但是在升级1.8.9时遇到错误,根据提示编译安装或启用一下即可,可以参考上文内容。
Starting php-fpm [01-May-2024 21:25:08] NOTICE: PHP message: PHP Warning: PHP Startup: Unable to load dynamic library 'sodium' (tried: /usr/local/php/lib/php/extensions/no-debug-non-zts-20200930/sodium (/usr/local/php/lib/php/extensions/no-debug-non-zts-20200930/sodium: cannot open shared object file: No such file or directory), /usr/local/php/lib/php/extensions/no-debug-non-zts-20200930
这种错误提示就是php的“sodium”扩展需要安装一下
安装好扩展之后记得检查下php是否启用扩展并重启一下php
nano /usr/local/php/etc/php.ini
/etc/init.d/php-fpm restart
2.检查升级环境
composer install
3.执行升级
php artisan nexus:update --tag=1.8.11
php artisan nexus:update
php artisan filament:upgrade
评论
评论关闭