慕雪的小助手正在绞尽脑汁···
慕雪小助手的总结
DeepSeek & LongCat

说明

本站有一个友链朋友圈页面,使用的是Rock-Candy-Tea/hexo-circle-of-friends项目。这个项目会尝试解析你的hexo博客友链页面,并去扫描你的友链们的hexo博客,获取到他们最新的博客文章,展示一个汇总页面:

image.png

但是从2025年11月24日开始,vercel的部署就一直处于失败状态,具体问题我提交了一个issue:https://github.com/Rock-Candy-Tea/hexo-circle-of-friends/issues/179

服务器部署

既然vercel的问题解决不了,那就只能换服务器部署喽,不再白嫖了。

服务器部署的教程参考:https://fcircle-doc.yyyzyyyz.cn/docs/deployment/backend.html

首先需要在服务器上git克隆这个项目,这就不多描述了。

然后,在https://github.com/Rock-Candy-Tea/hexo-circle-of-friends/releases里面下载最新的二进制可执行文件,注意选择和你服务器架构相同的可执行文件,比如我的ubuntu服务器就是下载linux-x86_64-unknown-linux-gnu.zip这个文件。

将zip上传到服务器上,解压得到fcircle_corefcircle_api这两个可执行文件,放到hexo-circle-of-friends项目的根目录下。

1
2
3
4
5
6
~/code-tx/hexo-circle-of-friends
❯ ls
api CHANGELOG.md data_structures fcircle_core pyproject.toml stop.sh uv.lock
api_dependence core db fc_settings.yaml README.md tests vercel.json
Cargo.lock css_rules.yaml downloader fc_settings.yaml.bak requirements.txt tools
Cargo.toml data.db fcircle_api logs start.sh update_version.py

搞定了之后,直接执行start.sh就可以运行项目了。

这个脚本会使用可视化的方式带你设置整个项目,首先是输入你的友链地址(比如本站的https://blog.musnow.top/link/),然后输入要绑定后端的端口号(选一个没被占用的端口就行了,默认的8000端口太常用了,不推荐)

image.png

一切正常的话,后端服务就启动成功了,可以用如下命令检查一下是否在运行

1
2
3
4
❯ netstat -ntlp | grep 10001
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:10001 0.0.0.0:* LISTEN 2630423/./fcircle_a

然后还可以测试一下是否能获取到数据

1
curl -v http://127.0.0.1:10001/all

只要这个接口有返回json结果,那就是一切ok了。

反代设置

服务器部署完成之后,需要开放端口的防火墙,并设置反代。

这里需注意的是,自部署的版本反代里面需要加上正确的跨域请求头,否则会导致无法正常跨域访问(浏览器会拦截)

1
fcircle/:1  Access to fetch at 'https://hexo-friend-article.musnow.top/all' from origin 'https://blog.musnow.top' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header contains multiple values '*, https://blog.musnow.top', but only one is allowed. Have the server send the header with a valid value.

以1panel的反代设置为例,找到设置好的反向代理,点击源文就可以看到nginx的原始配置文件

image.png

需把location修改成如下的设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
location ^~ / {
proxy_pass http://127.0.0.1:10001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_http_version 1.1;
add_header X-Cache $upstream_cache_status;
add_header Cache-Control no-cache;
proxy_ssl_server_name off;
proxy_ssl_name $proxy_host;
add_header Strict-Transport-Security "max-age=31536000";

# 隐藏后端返回的CORS头,避免冲突
proxy_hide_header Access-Control-Allow-Origin;
proxy_hide_header Access-Control-Allow-Credentials;

# 匹配musnow.top主域名+所有子域名
set $cors_origin "";
if ($http_origin ~* "^https?://(.*\.)?musnow\.top$") {
set $cors_origin $http_origin;
}

# 动态设置CORS头
add_header Access-Control-Allow-Origin $cors_origin;
add_header Access-Control-Allow-Credentials "true";
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, DELETE";
add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization";

# 专门处理OPTIONS预检请求
if ($request_method = OPTIONS) {
add_header Access-Control-Allow-Origin $cors_origin;
add_header Access-Control-Allow-Credentials "true";
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, DELETE";
add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization";
add_header Access-Control-Max-Age "3600"; # 预检结果缓存1小时
return 204; # 直接返回204,无需转发到后端
}
}

修改了以后,在博客页面确认能够请求成功,浏览器控制台没有报错,就OK了。

The end

有的时候免费的就是麻烦,vercel这部署的好好的突然就崩了,结果就是天天收到部署失败的邮件,又暂时没时间处理。

还是改成自己的服务器部署了,省事,后续没有遇到无法运行的bug也不用去考虑更新。如果继续用vercel,这个bug被修复之后我还得去更新一下vercel的配置才能恢复使用。


另外,如果最开始和慕雪一样用的是github+vercel的方式部署的,转成服务器部署之后,要记得把github的action给disable掉,不然还是会一直执行action的。

image.png