记一次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/$1last; break;
}
}
```
文件直接解压到网站目录
![图片-记录一次安装cdnfly开心版-THsInk](https://www.thsink.com/wp-content/uploads/2023/10/%E6%88%AA%E5%B1%8F2023-10-17-16.31.09-1024x105.jpg)
备注:
> 监控默认是使用云端服务器去请求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中设置防火墙规则:
![图片-记录一次安装cdnfly开心版-THsInk](https://www.thsink.com/wp-content/uploads/2023/10/%E6%88%AA%E5%B1%8F2023-10-17-16.52.45-1024x506.jpg)
## 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节点服务器(被控)执行
安装成功后会有提示:
![图片-记录一次安装cdnfly开心版-THsInk](https://www.thsink.com/wp-content/uploads/2023/10/%E6%88%AA%E5%B1%8F2023-10-17-17.59.59-1024x700.png)
### 4.5 在控制台添加cdn节点
在 节点管理>节点管理 新增节点,输入ip后确认,节点会自动配置
![图片-记录一次安装cdnfly开心版-THsInk](https://www.thsink.com/wp-content/uploads/2023/10/%E6%88%AA%E5%B1%8F2023-10-17-18.19.48-1024x287.jpg)
添加完成后,点击节点名称,选择节点设置,可以修改带宽限制和缓存上限。
![图片-记录一次安装cdnfly开心版-THsInk](https://www.thsink.com/wp-content/uploads/2023/10/%E6%88%AA%E5%B1%8F2023-10-18-09.14.23.png)
添加完成后,可以在系统升级中看见节点。
如果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不支持线路设置权重和分运营商解析**
![图片-记录一次安装cdnfly开心版-THsInk](https://www.thsink.com/wp-content/uploads/2023/10/%E6%88%AA%E5%B1%8F2023-10-17-18.31.22.png)
### 5.2 设置分线路解析
通常国内dns服务商才支持分(运营商)线路解析。
![图片-记录一次安装cdnfly开心版-THsInk](https://www.thsink.com/wp-content/uploads/2023/10/%E6%88%AA%E5%B1%8F2023-10-17-19.18.55-1024x233.png)
在设置解析里可以设置分线路解析以及主备节点、节点权重
### 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’,这样就可以成功访问了
![图片-记录一次安装cdnfly开心版-THsInk](https://www.thsink.com/wp-content/uploads/2023/10/image-16-1024x376.png)
## 7. 备份和恢复
复制自blog.tanglu.me
### 7.1 备份
主控默认会每两小时备份数据库,备份默认保留7天(可以自行修改保留天数),备份文件在 `/data/backup/cdn/`
除了备份数据库,还需要备份 `/opt/cdnfly/master/conf` 文件夹下的 `config.py` 文件(其实记住AES_KEY和LOG_PWD就行了)
恢复时只需要用到这两个文件,为了防止主控失联,建议每天上传备份
![图片-记录一次安装cdnfly开心版-THsInk](https://www.thsink.com/wp-content/uploads/2023/10/image-17-1024x836.png)
### 7.2 恢复
#### 此操作参考(https://www.thsink.com/?golink=aHR0cDovL2RvYy5jZG5mbHkuY24vRkFRLmh0bWwjJUU2JTk3JUE3JUU0JUI4JUJCJUU2JThFJUE3JUU2JTk3JUEwJUU2JUIzJTk1JUU2JTg5JTkzJUU1JUJDJTgwJUU3JTlBJTg0JUU2JTgzJTg1JUU1JTg2JUI1),亲测有效
**旧主控:**
将旧主控 `/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 教程还可以 失效了吧? 感谢分享
页:
[1]