WHMCS和开心授权文件下载:https://whmcsfull.com/,目前的最新版是8.13.1。
由于WHMCS官方不推荐使用NGINX,所以这篇文章中使用的Web服务器软件是Apache2。其实要用NGINX应该也没什么问题,就是要转换一下.htaccess里面的规则,主要还是考虑到安全问题,NGINX规则没写好可能会泄漏一些敏感目录和数据。。
另外由于Debian13官方存储库内的PHP版本已经是8.4了,而WHMCS目前最高只支持到8.3,所以我添加了SURY的存储库来安装PHP8.3。这波属于是反向升级了=-=我其实不喜欢WHMCS,我更看好目前开源的Paymenter,奈何周边生态还不太行,像什么模块、支付接口都没什么人开发=-=
安装PHP8.3:
apt install curl apt-transport-https ca-certificates lsb-release curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb dpkg -i /tmp/debsuryorg-archive-keyring.deb sh -c 'echo "deb [signed-by=/usr/share/keyrings/debsuryorg-archive-keyring.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list' apt update apt install php8.3 php8.3-{common,fpm,cli,curl,gd,imap,mysql,xml,bcmath,gmp,intl,mbstring,soap,zip}
由于我这个系统内原本就安装了PHP8.4,所以这里还需要切换一下版本:
update-alternatives --config php
输入对应数字即可切换:
WHMCS还需要用到ionCube,首先下载ionCube:
wget https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz tar -xzvf ioncube_loaders_lin_x86-64.tar.gz cd ioncube/
查找PHP8.3的扩展目录:
php -i | grep extension_dir
回显类似内容:
extension_dir => /usr/lib/php/20230831 => /usr/lib/php/20230831
将对应PHP版本的ionCube扩展复制到刚才的目录内:
cp ioncube_loader_lin_8.3.so /usr/lib/php/20230831
编辑PHP-FPM的php.ini配置文件:
nano /etc/php/8.3/fpm/php.ini
新增如下内容,注意是新增不要把现有的zend_extension配置删除或者替换掉:
zend_extension = /usr/lib/php/20230831/ioncube_loader_lin_8.3.so
WHMCS官方不建议在运行环境中使用OPcache,所以顺便还是在这个配置文件内关闭OPcache:
opcache.enable=0
[可选]也可以顺便在这个配置文件内修改一下如下配置,优化WHMCS运行时的性能:
date.timezone=Asia/Shanghai memory_limit = 256M max_execution_time = 300 upload_max_filesize = 50M post_max_size = 50M
别忘了还有PHP-CLI的php.ini配置:
nano /etc/php/8.3/cli/php.ini
也是一样新增如下内容:
zend_extension = /usr/lib/php/20230831/ioncube_loader_lin_8.3.so
关闭OPcache:
opcache.enable=0
重启PHP-FPM服务使更改生效:
systemctl restart php8.3-fpm.service
验证ionCube模块是否正常加载:
php -m | grep ionCube
有类似回显说明正常:
ionCube Loader the ionCube PHP Loader
安装Apache2/Certbot/Mariadb数据库:
apt install apache2 python3-certbot-apache mariadb-server unzip
检查当前的Apache2运行模式,有两种模式:Event、Prefork,前者性能更好:
a2query -M
如果回显是Event就不用管了,如果回显是Prefork则执行如下命令进行切换:
a2dismod mpm_prefork a2enmod mpm_event
配置Apache2使用FPM与PHP进行通信,同时启用伪静态重写功能:
a2enmod proxy_fcgi setenvif rewrite
Debian的Apache打包维护者非常贴心啊,自带了Apache2可用的PHP-FPM配置文件,只需要使用下面的命令启用一下即可:
a2enconf php8.3-fpm
重启Apache2使更改生效:
systemctl restart apache2
检查模块是否正常加载:
a2query -m
正常的话应该列出包含proxy_fcgi、rewrite的模块信息:
setenvif (enabled by maintainer script) ssl (enabled by site administrator) status (enabled by maintainer script) mpm_event (enabled by maintainer script) proxy_fcgi (enabled by site administrator) socache_shmcb (enabled by site administrator) env (enabled by maintainer script) authz_user (enabled by maintainer script) proxy (enabled by site administrator) mime (enabled by maintainer script) authz_core (enabled by maintainer script) authn_file (enabled by maintainer script) negotiation (enabled by maintainer script) authn_core (enabled by maintainer script) alias (enabled by maintainer script) dir (enabled by maintainer script) autoindex (enabled by maintainer script) auth_basic (enabled by maintainer script) rewrite (enabled by site administrator) reqtimeout (enabled by maintainer script) deflate (enabled by maintainer script) access_compat (enabled by maintainer script) authz_host (enabled by maintainer script) filter (enabled by maintainer script)
刚才虽然启用了rewrite模块,但是Apache2的默认配置是不允许使用.htaccess文件的,为了后续WHMCS提供的.htaccess能够正常工作,我们可以在conf-available目录内新建一个覆盖配置:
nano /etc/apache2/conf-available/allow-override.conf
写入如下内容:
<Directory "/var/www"> AllowOverride all </Directory>
启用这个配置:
a2enconf allow-override
重载Apache2使配置生效:
systemctl reload apache2
登录到Mariadb:
mysql -u root -p
创建数据库和用户并授权允许访问:
CREATE USER 'whmcs'@'127.0.0.1' IDENTIFIED BY 'yourpassword'; CREATE DATABASE whmcs; GRANT ALL PRIVILEGES ON whmcs.* TO 'whmcs'@'127.0.0.1' WITH GRANT OPTION;
下载WHMCS源码解压:
mkdir /var/www/whmcs && cd /var/www/whmcs wget https://whmcsfull.com/download.whmcs.com/latestVersion/whmcs-8.13.1-release.1.zip unzip whmcs-8.13.1-release.1.zip rm whmcs-8.13.1-release.1.zip
进入vendor/whmcs/whmcs-foundation/lib目录,备份原始的授权文件:
cd vendor/whmcs/whmcs-foundation/lib mv License.php License.php.bak
从这里下载开心版授权文件:https://whmcsfull.com/#license,将开心版授权文件重命名为License.php上传到这个路径下即可完成开心,后续输入授权key的时候随意输入即可。
设置正确的所有者权限:
chown -R www-data:www-data /var/www/whmcs/
新建Apache2的Vhost(站点)配置文件:
nano /etc/apache2/sites-available/whmcs.conf
写入如下内容:
<VirtualHost *:80> ServerName whmcs.example.com ServerAdmin webmaster@localhost DocumentRoot /var/www/example ErrorLog ${APACHE_LOG_DIR}/example_error.log CustomLog ${APACHE_LOG_DIR}/example_access.log combined </VirtualHost>
启用站点:
a2ensite whmcs
重载Apache2使其生效:
systemctl reload apache2
签发SSL证书:
certbot --apache
访问whmcs.example.com,如果正常应该可以看到如下页面:
检查环境,确保满足WHMCS的条件:
配置数据库连接信息,授权Key可以随意输入:
创建管理员账号:
安装完成后,还需要按照WHMCS的提示进行善后工作。删除WHMCS程序的安装目录:
rm -rf /var/www/whmcs/install/
修改configuration.php的文件权限为400:
chmod 400 configuration.php
配置计划任务:
crontab -u www-data -e
写入如下内容:
*/5 * * * * /usr/bin/php -q /var/www/whmcs/crons/cron.php