宝塔 WHMCS 快乐版 + 雷池WAF + CF + PVE 8 + Virtualizor 教程

创建时间
Mar 2, 2025 07:45 AM
编辑日期
Last updated March 18, 2025
属性
标签
PVE 8 + Virtualizor: 功能比VF多,有开心版,9刀无限制,更好的技术支持 Debian 12 + Virtfusion: 简单易用,暂无开心版,18刀无限制,小团队支持

1. 基本环境部署

部署环境:阿里云2C2G-Debian 12。新系统ssh登录后执行apt updateapt upgrade -y 之后,到宝塔官网执行一键脚本安装。
如何使用宝塔本文不会介绍,登录到宝塔管理页面进行基本的安全设置后,先下载Linux工具箱应用,添加SWAP。
接着安装LNMP环境,我的设置是:
Nginx 1.26.3/MySQL 8.0.36/PHP 8.1.31/phpMyAdmin 5.1
如果配置较低仅建议使用php 7.4和mysql 5.7的搭配。
雷池需要使用docker,在宝塔选择docker页面会提示没有安装,现在安装它(默认设置即可)。完成后到官网执行自动安装脚本。

1.1 宝塔PHP设置

notion image
首先在“禁用函数”删除putenv ,然后安装扩展ionCube
notion image

1.2 MySQL设置

由于内存有限,在优化方案手动选择一个相对合适的方案来限制内存占用。
notion image
如果了解参数作用可以自行修改。

2. 安装WHMCS

WHMCS的版本取决于开心版支持到什么。

2.1 创建站点

notion image
新建自己的站点顺便把数据库创建了,保存好账户密码,没存也可以在bt中找到。然后删除以下自动创建的文件:
notion image
由于宝塔9.4的远程下载没了,本地下载后将WHMCS的zip压缩包上传
notion image
接着右键解压,原zip可以删掉释放空间。

2.2 安装开心版License

参考Installation Guide,先进入目录/vendor/whmcs/whmcs-foundation/lib/ ,然后将下载的License8120.php重命名为License.php ,上传到这个目录下,操作正确会有以下提示,选择覆盖。
notion image

2.3 安装汉化包

项目地址:https://github.com/hostsoft/whmcs-chinese-langhttps://github.com/Rodots/WHMCS-zh-CN,下载对应版本/admin/lang里的chinese.php,上传到站点目录下相同路径的文件里。也可以直接点新建文件粘贴进去
notion image

2.4 设置WHMCS

此时可以访问域名开始设置过程。
notion image
系统检查通过即可,如果出现额外问题需自行排查。
 
notion image
接着填入Key和数据库用户名和密码。宝塔的数据库名一般是和用户名相同的,可以到侧边栏“数据库”查看。
notion image
接着是基本设置,管理账户的信息要保存好。
notion image
接着严格按照步骤操作,第一步删除install目录
notion image
notion image
第二步是安全操作(也可略过),参考https://go.whmcs.com/22/enhancing-securityhttps://hostloc.com/thread-1011706-1-1.html 建议操作前进行备份。
第三步添加计划任务:
notion image
在宝塔“计划任务”添加,按说明设置为每五分钟执行一次
notion image
手动执行一次查看日志,显示成功后安装完毕。
notion image
正确安装后访问域名/admin 出现登录界面就说明开心版安装成功了。如果whmcs选择8.12.1,license 8.12.0是不会生效的。
notion image

3. 雷池设置

正常安装好宝塔也会有显示,默认管理端口是9443。
notion image

3.1 设置站点SSL

配置好SSL后,将“强制HTTPS”选项关闭。
修改HTTPS端口为8443(不限制,空闲端口都行),http 80不用改。建议全程SSL。
按需设置,无需相同
域名管理那改端口不会把配置中全部修改,需手动。
notion image
如果雷池需要同时监听80端口,那么执行以下操作:
  1. 修改nginx默认监听端口
    1. 路径/www/server/panel/vhost/nginx 下phpfpm_status.conf和0.default.conf文件中将80修改为8080
      notion image
      notion image
  1. 重载Nginx配置
  1. 修改站点配置文件
    1. notion image
雷池——防护应用——应用管理,添加应用,只有额外操作后才可以在这里添加80端口。
notion image
我个人将其进行了分离。
notion image

4. CloudFlare

CF用来CDN和补充雷池WAF社区版没有提供的功能,例如地区限制和缓存。
A,AAAA启用代理,一般情况是正常使用的。SSL/TLS 加密:自动,正确配置SSL会是“完全(严格)”。
WAF可以添加规则限制能访问的国家/地区,例如:
notion image
意思是除了HK和TW以外都会阻断访问,可以减少爬虫和恶意访问。添加后可以在事件找到相当多的机器人。

4.0 端口安全说明

在配置好后把宝塔的IP访问关了(绑定自己的域名),端口不要使用CF能够代理的。

4.1 为宝塔添加鉴权访问

接下来的操作是在服务器上进行(非必要,若设置可以迁移到面板控制),可以在网页上创建tunnel,用一键脚本安装:
  1. 安装cloudflared
  1. 接着cloudflared tunnel login 服务器上操作出来的链接进行登录,选择对应域名。完成后会生成/root/.cloudflared/cert.pem
  1. cloudflared tunnel create bt-pannel 创建通道,会在/root/.cloudflared/下生成一个json,并获得通道id。
  1. cloudflared tunnel route dns bt-pannel tunnel.example.com 创建一个指向通道的子域名。
  1. 在服务器上创建一个目录,例如cftunnel
    1. 然后nano config.yml 新文件,改成自己的信息
notion image
tunnel: bt-pannel(隧道名) credentials-file: /root/.cloudflared/<TUNNEL-ID>.json ingress: - hostname: tunnel.example.com service: http://localhost:宝塔端口 # 必须改成无tls - service: http_status:404
无 TLS 验证选项启用,否则访问全是502。
notion image
  1. cloudflared tunnel --config config.yml run bt-pannel 可能会提示ping的警告,但不重要。
下一步在CF网页上操作:
Zero Trust开通服务,Access——策略,添加策略Owner Only:
notion image
添加策略Deny All Others:
notion image
接着Access——应用程序,添加应用程序——自托管,策略选择刚新建的。
notion image
顺序不能反。
notion image

4.2 正确设置的访问

访问URL形如:https://tunnel.example.com/宝塔安全入口 ,即应用程序URL。
notion image
只有输入了正确的email才能收到验证号码,完成后即可登录宝塔面板。

4.3 类似的添加雷池9443端口

在tunnels的bt-pannel里添加一个主机名指向https://localhost:9443/,关闭tls。
Access那添加的应用程序“鉴权访问”,添加主机名,子域名保持一致,不需要填路径。

5. 更简单的安全管理内网服务

使用tailscale组网,通过内网访问,将宝塔面板端口和雷池端口在防火墙放行那删除,如此一来公网就不能访问了。
此时需要在宝塔那删掉“绑定域名”,使用内网IP访问。
特别的,CF Tunnel也是组建了类似的网络,不需要公网访问宝塔和雷池端口,都可以关闭。

6. WHMCS安装Virtualizor

6.1 安装

Virtualizor官方文档 Download 标题下找到模组安装文件链接。下载的whmcs_v2.zip 上传到文件目录/站点域名/modules/servers/下解压得到virtualizor文件夹,然后删除压缩包即可。

6.2 检验

进入whmcs管理后台后,右上角小扳手——System Settings——General Settings 
notion image
然后在左侧栏找到Products/Services——Servers——Add New Server
notion image
在Module一栏可选择Virtualizor即安装成功。
notion image

7. 在Debian 12中安装PVE 8

目前官方文档仅提供了在Debian 12下的安装教程,Ubuntu等其它系统可能并不建议如此操作,应当使用ISO安装完整的系统。
现在我以DigitalOcean创建虚拟机为例子进行操作。对于实体硬件安装过程仅作参考。
提前说明:PVE管理口开放到公网不是一个明智的选择,应组建内网在安全的条件下进行远程操作。

7.1 获得合适的配置

Virtualizor关于PVE的文档中要求根目录在80-100G,SWAP 4G+,在DO创建的实例配置如下,其中额外的100G是用于测试创建KVM虚拟机的硬盘。如果硬盘的高可用的,建议选择XFS,如果是灵车二手盘,当断电或死机会非常麻烦,这种情况下EXT4反而是更好的选择(限系统盘,小小鸡LVM或ZFS)。
notion image
关于硬盘分区,文档中的Partition Scheme对Storage的要求有清晰说明,加入的新磁盘不要挂载操作。需要留意的是,Virtualizor仅使用配置好的存储池,它不会自动处理磁盘分区。
补充说明:使用ISO镜像安装能在最开始设置为全局zfs文件系统,并启用raid。实际生产环境不推荐从Debian安装。
notion image
将硬盘划分为多个分区也是有效的,当这是为了同时在一张硬盘使用LVM或ZFS等。正常情况下ZFS是对未划分硬盘的做raid。
notion image
可以使用lsblkfdisk -l 查看硬盘分区,现在可以知道是在vda里安装系统,附加卷是
sda并且已经挂在到/mnt/。PVE添加可用硬盘需要非挂载的状态umount /mnt/volume_sgp1_01
notion image
文件存储类型的设置一般在PVE中处理
notion image

7.2 安装PVE

直接参考文档的说明进行。
echo "deb [arch=amd64]http://download.proxmox.com/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list
wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
验证哈希
sha512sum /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
输出应该等于
7da6fe34168adc6e479327ba517796d4702fa2f8b4f0a9833f5ea6e6b48f6507a6da403a274fe201595edc86a84463d50383d07f64bdde2e3658108db7d6dc87 /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
apt update && apt full-upgrade
无错误开始安装PVE内核
apt install proxmox-default-kernel systemctl reboot
重启后安装必要的包
apt install proxmox-ve postfix open-iscsi chrony
下载完后检查当前系统内核
dpkg --list | grep linux-image
notion image
删除现有Debian默认的内核
apt remove linux-image-amd64 'linux-image-6.1*'
update-grub 更新GRUB2引导加载器。正常输出如下
notion image
官方推荐删除os-prober 包,根据说明按需操作 apt remove os-prober
再重启后,apt install net-tools 安装一下网络工具,netstat -tulnp 检查端口状态,可见8006端口已经被pve使用,现在只需要在防火墙端口打开8006就可以管理了。
notion image
检查当前防火墙规则iptables -L
notion image
简单起见,使用ufw管理,apt install ufw。分别执行ufw allow sshufw allow 8006ufw enable。(之后不要再用ufw管理了,直接用PVE面板里提供的进行配置,避免意外的优先级冲突)
到此时可能会发现https://ip:8006无法访问,首先检查云防火墙是否开放端口,其次nano /etc/hosts
notion image
这里第一行 10.104.0.3 是主机的内网ip,没修改前可能是127.0.1.1,将跟着的hostname改成形如hostname.proxmox.com hostname。PVE安装文档第一个操作部分有解释。改完hosts直接重启。
接着再用https://ip:8006 访问即可见到界面,此时PVE账户还没创建,需要PAM使用root账户登入。
notion image

7.3 添加硬盘

无挂载的硬盘sda,擦出磁盘再GPT初始化。
notion image
此时这里四种磁盘类型都能显示空盘sda,file/目录就是最基础的ext4或xfs。
notion image
存储类型的选择:
ZFS默认支持随着文件使用量动态分配空间,物理空间是固定的。LVM不行,但LVM-Thin可以。
考虑到硬盘性能,我选择不压缩的方案
notion image
成功后会显示所添加的硬盘,local根目录主要是放置系统镜像和设置等,这也与virtualizor描述的一致。下图也能发现Debian默认没有LVM池。
notion image
至此创建虚拟机时在磁盘部份就可以选择该新的存储设备
notion image

7.4 Tailscale组网-安全管理

首先需要将APT企业源关了,不然没法正常安装。/etc/apt/sources.list.d/pve-enterprise.list 里面的注释掉。
然后脚本安装curl -fsSL https://tailscale.com/install.sh | sh ,后续都跟前面一样。
完成后就可以把防火墙8006端口规则删去ufw delete allow 8006,使用tailscale的内网ip:8006访问。

8. 安装 Virtualizor

本文安装环境:Debian 12 —— PVE 8 —— Virtualizor,其它仅作参考。
默认的网卡不需要修改,创建桥接网卡即可。
notion image
官方文档提供的方法进行安装
echo "152.53.53.249 api.virtualizor.com" >> /etc/hosts #锁定hosts sudo chattr +i /etc/hosts
wget -N http://files.virtualizor.com/install.sh chmod 0755 install.sh ./install.sh email=your@email.com kernel=proxmox
静待一段时间,完成安装后保存输出的API和面板入口,最后重启。用root登录

9. 安装 Virtfusion

VF与第7/8独立,需要纯的Debian 12环境。https://docs.virtfusion.com/installation/hypervisor
对于有静态IP的服务器,可以把Control ServerHypervisor安装到一起,动态IP就需要另外准备一个VPS安装Control Server处理会更好。