说明
本站有一个友链朋友圈 页面,使用的是Rock-Candy-Tea/hexo-circle-of-friends 项目。这个项目会尝试解析你的hexo博客友链页面,并去扫描你的友链们的hexo博客,获取到他们最新的博客文章,展示一个汇总页面:
但是从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_core和fcircle_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端口太常用了,不推荐)
一切正常的话,后端服务就启动成功了,可以用如下命令检查一下是否在运行
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的原始配置文件
需把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" ; proxy_hide_header Access-Control-Allow-Origin; proxy_hide_header Access-Control-Allow-Credentials; set $cors_origin "" ; if ($http_origin ~* "^https?://(.*\.)?musnow\.top$") { set $cors_origin $http_origin ; } 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" ; 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" ; return 204 ; } }
修改了以后,在博客页面确认能够请求成功,浏览器控制台没有报错,就OK了。
The end
有的时候免费的就是麻烦,vercel这部署的好好的突然就崩了,结果就是天天收到部署失败的邮件,又暂时没时间处理。
还是改成自己的服务器部署了,省事,后续没有遇到无法运行的bug也不用去考虑更新。如果继续用vercel,这个bug被修复之后我还得去更新一下vercel的配置才能恢复使用。
另外,如果最开始和慕雪一样用的是github+vercel的方式部署的,转成服务器部署之后,要记得把github的action给disable掉,不然还是会一直执行action的。