记录一次安装cdnfly开心版

之前用的是goedge免费版,goedge资源占用比较少,对环境和硬件配置要求比较少,且有官方免费版。但cdnfly的分线路解析很方便,且操作逻辑上更直观、符合直觉。因此打算用开心版先体验一下。

0. 环境要求

  • 主控和被控均不能在已安装nginx的情况下执行安装命令
  • 系统必须为centos7或ubuntu16.04
  • 主控需开放80 88 443 9200端口
  • 节点需要开放 80 443 5000端口
  • 主控需要至少4G内存(我装完后占用4.33G,可能至少6-8G内存比较合适)
  • 被控建议2G内存起步,我囊中羞涩,使用0.5G和1G小鸡开swap测试

1. 搭建授权服务器(自建云端)

使用用以下源码搭建一个站点(在随便另一个服务器)

https://vkceyugu.cdn.bspapp.com/VKCEYUGU-10b3891b-be67-4103-a60f-9da1d057470c/b46c7891-1c1a-486e-96f5-a47daa1f8535.zip

绑定域名

auth.cdnfly.cn
monitor.cdnfly.cn

伪静态

location / {
	if (!-e $request_filename){
		rewrite  ^(.*)$  /index.php/$1  last;   break;
	}
}

文件直接解压到网站目录

图片[1]-记录一次安装cdnfly开心版-THsInk

备注:

监控默认是使用云端服务器去请求CDN节点,因此要保持云端和CDN节点之间的网络畅通。另外如果是用宝塔面板,php不要安装bt_safe扩展,否则无法使用tcp类型监控;如果要用ping类型监控,还需要允许exec函数。
支持多节点监控(和官方一样),要添加其它监控节点,可以编辑config.php配置文件,根据里面的注释说明添加。

2. 安装CDN主控

2.1 开放相关端口

主控需要开放 80 88 443 9200端口,并且主控和节点机不能安装在同一机器上,会导致80端口冲突

主控若未开启9200 88端口 会导致程序大量占用CPU直至死机,如有任何问题 建议重置elasticsearch

要查看指定端口是否在 CentOS 上开放,可以使用以下命令:

# 安装FirewallD
yum install firewalld
# 启动FirewallD
systemctl start firewalld
# 设置开机启动FirewallD
systemctl enable firewalld
# 检查是否开启FirewallD
systemctl is-enabled firewalld
# 检查指定端口是否开启
sudo firewall-cmd --zone=public --query-port=<port_number>/tcp

如果端口开放,将返回 yes,如果端口关闭,则返回 no

要在 CentOS 上开放指定端口,并重新加载防火墙配置以使更改生效,可以使用以下命令:

#  开启 80 88 443 9200 端口
firewall-cmd --zone=public --add-port=80/tcp --add-port=88/tcp --add-port=443/tcp --add-port=9200/tcp

# 重新加载防火墙配置以使更改生效
sudo firewall-cmd --reload

2.2 修改主控服务器的hosts文件

修改主控vps的hosts文件,将 auth.cdnfly.cn、monitor.cdnfly.cn 这2个域名指向刚才的自建云端服务器IP

vim /etc/hosts
#添加以下内容,记得替换为你自己搭建的IP
<你的自建云端ip> auth.cdnfly.cn monitor.cdnfly.cn

检查hosts是否生效

ping auth.cdnfly.cn
ping monitor.cdnfly.cn

如果都返回 <你的自建云端ip> 说明hosts修改已经生效

2.3 安装cdnfly控制面板

更新centos源

yum update -y

控制面板占用3GB内存,内存不足会安装失败

curl -fsSL https://github.com/Steady-WJ/cdnfly-kaixin/raw/main/master.sh -o master.sh && chmod +x master.sh && ./master.sh --es-dir /home/es

安装完成后可以直接访问ip登录,这里为了方便后续配置,把要绑定的域名直接通过cloudflare解析到主控ip,然后通过域名访问。

初始密码:

管理员账号和密码: wenjian/wenjian
普通用户账号和密码: ceshi/ceshi

3. 禁用API以阻止提权漏洞

cdnfly5.1.13存在重大漏洞,虽然官方最新版早已修复,但未更改授权方式,能够开心的版本仍存在此漏洞。普通用户生成的API通过某些方法可以拿到管理员权限,这里通过禁用api解决。

首先在 cdnfly控制台 > 系统设置 > 系统设置 > 用户相关 > 限制普通用户只能从此域名登录 和限制管理员只能从此域名登录

填写之前绑定的域名。

再禁止路径中含有 /v1/ 的所有请求。因为5.1.13版本的 /v1/ 路径是执行api的必要路径。

在clouflare中设置防火墙规则:

图片[2]-记录一次安装cdnfly开心版-THsInk

4. 添加CDN节点

为了使不同运营商尽可能直连,我添加了三个测试节点

  • Centos 7 新加坡节点 0.5G 内存,接管联通流量
  • Centos 7 首尔节点 1G 内存,接管联通流量
  • Centos 7 东京节点 1G 内存,接管移动、电信流量

我发现最近日本直连越来越多了,没必要去挤香港

中国大陆以外流量通过使用saas解析给cloudflare,具体参考这篇文章 https://www.thsink.com/notes/541/

4.1 更新centos7源

yum update -y

4.2 添加SWAP虚拟内存

1GB内存及以下的小鸡必须添加SWAP否则会报错,2GB以上内存的vps可自行决定是否添加SWAP

# 检查系统上是否已经存在swap分区, 如果没有任何输出,表示系统当前没有启用swap分区

swapon --show

# 使用dd命令创建/home/swap这么一个分区文件。文件的大小是1024000个block,一般情况下1个block为1K,所以这里空间是1000MB

dd if=/dev/zero of=/home/swap bs=1024 count=1024000

# 接着再把这个分区变成swap分区

/sbin/mkswap /home/swap

# 设置文件的权限,以防止非特权用户访问:

sudo chmod 600 /home/swap

# 使用这个swap分区,使其成为有效状态

/sbin/swapon /home/swap


# 现在再用 free -m 命令查看一下内存和swap分区大小

swapon --show

# 让系统在启动时自动启用swap分区, 需要将swap文件的信息添加到`/etc/fstab`文件中。打开该文件并在末尾添加以下行:
#vim /etc/fstab

/home/swap swap swap defaults 0 0

4.3 开启bbr

很早前收藏的脚本了,不知道有没有新版,建议开启bbr原版+fq

wget -N --no-check-certificate "https://github.000060000.xyz/tcp.sh" && chmod +x tcp.sh && ./tcp.sh

4.4 安装被控服务

开启端口

# 安装FirewallD
yum install firewalld
# 启动FirewallD
systemctl start firewalld
# 设置开机启动FirewallD
systemctl enable firewalld
# 检查是否开启FirewallD
systemctl is-enabled firewalld

#  开启 80 443 5000 端口
firewall-cmd --zone=public --add-port=80/tcp --add-port=443/tcp --add-port=5000/tcp

# 重新加载防火墙配置以使更改生效
sudo firewall-cmd --reload

进入cdnfly管理员控制台>>系统管理>>系统升级,复制节点安装命令并在CDN节点服务器(被控)执行

安装成功后会有提示:

图片[3]-记录一次安装cdnfly开心版-THsInk

4.5 在控制台添加cdn节点

在 节点管理>节点管理 新增节点,输入ip后确认,节点会自动配置

图片[4]-记录一次安装cdnfly开心版-THsInk

添加完成后,点击节点名称,选择节点设置,可以修改带宽限制和缓存上限。

图片[5]-记录一次安装cdnfly开心版-THsInk

添加完成后,可以在系统升级中看见节点。

如果1G内存小鸡出现同步cc_filter nginx openresty等错误,很有可能是内存不足,检查是否开启了swap。我这里测试使用512MB内存小鸡开启1G swap后可以正常同步。

部分服务商的centos7系统会报错 “重载resty配置失败:set-dict接口错误,可能节点未初始化成功,请尝试禁用启用节点”,一直是配置中,如果重启仍报错的话就是系统问题,这时候需要自行DD centos7

4.6 卸载节点

如果节点想换到另一台主控或者不想占用80 443 ,可以执行这条命令卸载节点

cd /tmp/ && curl -m 5 http://dl2.cdnfly.cn/cdnfly/agent_uninstall.sh -o agent_uninstall.sh || curl -m 5 http://us.centos.bz/cdnfly/agent_uninstall.sh && chmod +x agent_uninstall.sh && ./agent_uninstall.sh 

5. 控制台配置

5.1 DNS设置

参考官方说明 http://doc.cdnfly.cn/DNSshezhi.html

使用cloudfaredns不支持线路设置权重和分运营商解析

图片[6]-记录一次安装cdnfly开心版-THsInk

5.2 设置分线路解析

通常国内dns服务商才支持分(运营商)线路解析。

图片[7]-记录一次安装cdnfly开心版-THsInk

在设置解析里可以设置分线路解析以及主备节点、节点权重

5.3 添加套餐

名称 - 套餐名称,用户端也会显示这个
描述 - 套餐的说明,也会显示到用户端的套餐购买列表
分配给用户 - 输入用户的id,表示指定该套餐为该用户的专属套餐,只有这个用户能购买此套餐
线路分组 - 上一步添加的线路组,或其它分组,决定网站绑定此套餐后网站配置分发到的节点,以及cname解析的IP
套餐分组 - 为套餐分组,分组也会显示到用户端的套餐购买页面,方便归类购买
CNAME域名 - 生成网站cname使用的域名,默认为之前dns设置中的主域名,可以输入其它的域名,但此域名必须跟主域名在同一个dns账号下。
月流量 - G为单位,限制该套餐一个自然月内使用流量的上限
域名数 - 该套餐允许的域名数量,域名数量包括裸域名及各级域名,如www.cdnfly.cn cdnfly.cn算两域名
HTTP非80,443端口数 - http可以输入非80,443的端口,此项可以限制非标端口的数量,不允许的话设置为0
四层转发端口数 - 四层转发允许的端口数
自定义CC规则 - 如果此项为允许,用户则可以创建自己的cc规则,并绑定到网站使用。如果为禁止,则用户只允许选择系统内置的规则
排序 - 默认100,小值排在前面
带宽为负值表示无限制
连接数为负值表示不限制连接数

5.4 添加网站

网站管理-所有网站-新增

添加网站并将域名cname解析后可以使用cdnfly申请ssl,也可以自己上传证书开启。

6. 其他配置

按需设置缓存规则和cc规则,配置邮件通知,调整日志保存天数

cdnfly设置反代

这个功能就是指定回源host,实现反代的功能

比如想给R2套第三方CDN就需要在第三方CDN配置回源host指向R2的绑定域名

举个指定CDN回源host,实现反代的功能的例子:

源站 blog.tanglu.me,现在用 blog.tang.lu 反代源站 ,如果直接给blog.tang.lu配置普通CDN CDN设置回源站点是 blog.tanglu.me,CDN解析出blog.tanglu.me的IP 2.2.2.2 然后发送http请求为 ‘’域名blog.tang.lu IP2.2.2.2’,因为源站点没有配置blog.tang.lu这个站点 访问就会报错。但是CDN设置指定回源HOST为blog.tanglu.me,CDN设置回源请求就是 ‘IP是2.2.2.2 回源域名是 blog.tanglu.me’,这样就可以成功访问了

图片[8]-记录一次安装cdnfly开心版-THsInk

7. 备份和恢复

复制自blog.tanglu.me

7.1 备份

主控默认会每两小时备份数据库,备份默认保留7天(可以自行修改保留天数),备份文件在 /data/backup/cdn/

除了备份数据库,还需要备份 /opt/cdnfly/master/conf 文件夹下的 config.py 文件(其实记住AES_KEY和LOG_PWD就行了)

恢复时只需要用到这两个文件,为了防止主控失联,建议每天上传备份

图片[9]-记录一次安装cdnfly开心版-THsInk

7.2 恢复

此操作参考cdnfly官网,亲测有效

旧主控:

将旧主控 /data/backup/cdn/ 下的某个时间的数据库备份包 如 mysql-20230724-010931.sql.gz 下载到本地,重命名为 cdn.sql.gz

将旧主控的 /opt/cdnfly/master/conf/config.py 文件也下载下来

关闭旧主控,这里记得关闭,如果不关闭的话新旧主控同时运行会出现后台任务只创建但不执行,导致新主控无法正常运行

新主控:

首先正常执行安装主控命令:

如果有需要自授权请先搭建云端 修改hosts

curl -fsSL https://github.com/Steady-WJ/cdnfly-kaixin/raw/main/master.sh -o master.sh && chmod +x master.sh && ./master.sh --es-dir /home/es

然后ssh连接新主控,恢复备份和config.py,初始化es

#进入主控root目录
cd /root

#将上节备份的数据库文件 cdn.sql.gz 上传到root目录

#在root目录下执行以下两条命令 恢复数据库
curl http://us.centos.bz/cdnfly/restore_master.sh -o restore_master.sh && chmod +x restore_master.sh

./restore_master.sh

#将上节备份的旧主控 /opt/cdnfly/master/conf/config.py 上传新主控相同位置,实现替换掉新主控的config.py文件

#依次执行以下四条命令初始化elasticsearch
cd /tmp

wget us.centos.bz/cdnfly/int_es.sh -O int_es.sh && chmod +x int_es.sh

./int_es.sh /home/es

supervisorctl -c /opt/cdnfly/master/conf/supervisord.conf restart all

#至此主控设置完成,通过旧主控的账号密码进入可以发现 节点 用户 网站 日志 dns等都恢复了
#接下来只需要对旧节点更换IP即可

旧节点

需要将旧节点的旧主控IP替换为新主控的IP

#依次在ssh登录每个节点并执行下面命令即可
#将 your_new_ip 替换为你自己的新主控IP

wget -qO change_ip.sh https://file.1323123.xyz/cdnfly/backup/shell/change_ip.sh && chmod +x change_ip.sh && bash change_ip.sh your_new_ip

或选择手动操作

new_master_ip="这里替换为主控IP"
sed -i "s/ES_IP =.*/ES_IP = \"$new_master_ip\"/" /opt/cdnfly/agent/conf/config.py
sed -i "s/MASTER_IP.*/MASTER_IP = \"$new_master_ip\"/g" /opt/cdnfly/agent/conf/config.py
sed -i "s/hosts:.*/hosts: [\"$new_master_ip:9200\"]/" /opt/cdnfly/agent/conf/filebeat.yml
sed -i "s#http://.*:88#http://$new_master_ip:88#" /usr/local/openresty/nginx/conf/listen_80.conf /usr/local/openresty/nginx/conf/listen_other.conf 
ps aux | grep [/]usr/local/openresty/nginx/sbin/nginx | awk '{print $2}'  | xargs kill -HUP ||  true
supervisorctl -c /opt/cdnfly/agent/conf/supervisord.conf restart filebeat
supervisorctl -c /opt/cdnfly/agent/conf/supervisord.conf restart agent
supervisorctl -c /opt/cdnfly/agent/conf/supervisord.conf restart task

新节点:

新节点安装方式和旧节点安装方式一样,只需要将旧主控IP修改为新主控IP 密码修改为旧主控密码即可

旧主控密码忘记了可以在 /opt/cdnfly/master/conf/config.py 可以找到

参考

http://doc.cdnfly.cn/

https://hostloc.com/thread-1044609-1-1.html

https://github.com/Steady-WJ/cdnfly-kaixin

https://blog.tanglu.me/cdnfly

© 版权声明
THE END
喜欢就支持一下吧
点赞0分享
评论 共5条
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片
    • 头像飞机哥0
    • 头像marsganten0
    • 头像jingrui0