【Hexo】鱼塘朋友圈部署全攻略
【Hexo】鱼塘朋友圈部署全攻略
時光一、介绍
初始项目:**hexo-circle-of-friends**
改进版:**Friend-Circle-Lite**
- 轻量化:对比原版友链朋友圈的功能,该友圈功能简洁,去掉了设置和fastAPI的臃肿,仅保留关键内容。
- 无数据库:因为内容较少,我采用json直接存储文章信息,减少数据库操作,提升action运行效率。
- 部署简单:原版友链朋友圈由于功能多,导致部署较为麻烦,本方案仅需简单的部署action即可使用,vercel
- 用于部署前端静态页面和实时获取最新内容。
- 文件占用:对比原版4MB的bundle.js文件大小,本项目仅需要5.50KB的fclite.min.js文件即可轻量的展示到前端。
- 前端分离: 将前后端分离,前端文件放在page分支,后端文件放在主分支
二、实操
方案一
后端采用最新的 Friend-Circle-Lite 项目进行部署,效果如下:
前端
1、友圈json生成
在博客根目录创建link.js
,复制下面的代码(原项目地址说明文档没有定义blacklist
会执行出错)
1 | const YML = require('yamljs') |
在博客根目录下运行
1 | node link.js |
生成friend.json
文件,可以把这个文件移动到一个你喜欢的目录,比如我放到了/api/friends
目录下
2、创建新页面
创建一个新的页面,尽量不要和主题默认朋友圈页面页面相同,比如安知鱼
主题默认页面为fcircle
此处我直接用之前创建好的页面flink
1 | hexo new page flink |
页面 Front-matter
配置如下
1 |
|
继续粘贴以下内容:
1 | <div id="friend-circle-lite-root"></div> |
其中private_api_url
是要修改后端服务地址,这里可以先不填注意尾部带/
,不要遗漏。
执行命令三连部署一次,因为后面要用到friend.json
文件
1 | hexo cl && hexo g && hexo d |
3、文章定时抓取
可以借助1Panel获取宝塔面板创建定时任务,实现文章定时抓取
后端
这里我采用自部署使用方法
如果你有一台境内服务器,你也可以通过以下操作将其部署到你的服务器上,操作如下:
1、前置工作
确保你的服务器有定时任务 crontab
功能包,一般是linux自带,如果你没有宝塔等可以管理定时任务的面板工具,可能需要你自行了解定时工具并导入,本教程提供了简单的介绍。
2、克隆仓库
可以在本地下载好上传到云服务器
1 | git clone https://github.com/willow-god/Friend-Circle-Lite.git |
3、修改conf.yaml
配置文件
设置spider_settings.json_url
为你friend.json
文件访问地址,例如此处我的是:https://blog.shiguangdev.cn/api/friends/friend.json
其他配置项不需要的话可以都改为false
4、安装依赖
下载服务相关包,其中 requirements-server.txt
是部署API服务所用包, requirements.txt
是抓取服务所用包,请均下载一遍。
1 | pip install -r ./requirements.txt |
5、部署服务
进入目录路径后直接运行deploy.sh
脚本启动API服务:
1 | chmod +x ./deploy.sh |
我这里执行./deploy.sh
时报了个错误
通常是由于脚本文件中包含了 Windows 样式的行尾符(CRLF),而 Linux/Unix 系统期望的是 Unix 样式的行尾符(LF)。这种情况下,^M
字符表示的是回车符(CR),它在 Linux 系统上是不可见的,并且会导致解释器无法正确识别。可以使用支持多种换行符格式的文本编辑器,如 VSCode、Sublime Text 或 Notepad++,打开文件并将其保存为 Unix 格式(LF),然后重新运行即可
其中的注释应该是较为详细的,如果部署成功你可以使用以下命令进行测试,如果获取到了首页html内容则成功:
1 | curl 127.0.0.1:1223 |
或者可以直接浏览器访问,将IP替换为服务器公网IP即可
这个端口号可以修改,在server.py最后一行修改数字即可,如果你想删除该API服务,可以使用ps找到对应进程并使用Kill命令杀死进程:
1 | ps aux | grep python |
为了后面方便,可以再给当前服务配置反向代理,例如我代理到域名friends.shiguangdev.cn
我这里直接借助1Panel
创建反向代理并配置域名证书了。
最后修改页面中的private_api_url
为你的后端服务域名或公网ip即可。
本地直接访问http://localhost:4000/flink/
进行预览
方案二
后端
后端建议采用Server部署,采用Docker部署无法修改默认配置路径地址(试了很多次,都采用的默认配置)
首先请确保你的服务器安装好docker和git,如果未安装可参考如何安装docker和如何安装git
1、克隆仓库
clone
项目仓库,地址:https://github.com/Rock-Candy-Tea/hexo-circle-of-friends
2、修改配置
修改配置文件中的友链地址:hexo-circle-of-friends/hexo_circle_of_friends/fc_settings.yaml
注意,theme
根据你实际用到的主题尽心配置,此处我采用默认配置common2
1 | LINK: [ |
3、安装依赖
1 | pip install -r ./requirements.txt |
4、部署服务
然后运行位于项目根目录的部署脚本:
1 | python3 deploy.py |
选择docker--->部署
,选择1、Server
进行部署,等待运行完毕即可。
尝试访问API:
1 | curl 127.0.0.1:8000/all |
出现数据即为部署成功。
接下来,开放服务器的对应端口,就可以通过IP:端口
或者域名:端口
访问到API,前端需要的就是这个地址。
直接访问这个地址是没有数据的
访问/all
可以查看所有数据
访问/randompost
随机获取一篇文章数据
使用如下命令查看日志
1 | cat /tmp/crawler.log |
最后配置下反向代理
前端
由于我使用的是安知鱼
主题,所以我这里直接参考安知鱼的教程了。
1、创建朋友圈页面
在 Hexo 博客根目录 [blog]
下打开终端,输入
1 | hexo new page fcircle |
打开[blog]\source\fcircle\index.md
,添加一行type: "fcircle"
:
1 | --- |
在下面粘贴以下内容,修改private_api_url
为你的后端api地址
此处我的是:https://fcircle.shiguangdev.cn/
1 | <div id="hexo-circle-of-friends-root"></div> |
效果如下:
或者:
不能与
fcircle
名称相同
1 | <div id="hexo-circle-of-friends-root"></div> |
效果如下:
2、生成js文件
将https://npm.elemecdn.com/[email protected]/js/friends_vue/index.js
保存到一个js文件,将中的 url替换为您的后端 url
将js文件放到博客某个目录或者上传到代码托管平台,此处我直接放到/api/friends/friends_front.js
也可以下载前端项目:hexo-circle-of-friends-front到本地,修改代码中src/utils/config.ts
的 url 变量路径,改为你自己的,然后执行npm run build
构建后将dist
文件夹中的js粘贴到你的js文件中
3、启用朋友圈功能
主题配置文件中开启menu
中友链和朋友圈的注释,导航栏朋友圈,注意缩进!!!
1 | menu: |
主题配置文件中开启friends_vue.enable
1 | # 朋友圈配置 |
参数 | 备选值/类型 | 解释 |
---|---|---|
enable | boolean | 【必须】是否启用 |
vue_js | url | 【必须】朋友圈前端构建后的 url |
apiurl | string | 【必须】朋友圈后端 url |
top_background | url | 【可选】朋友圈顶部背景图 |
4、访问并测试
执行三连命令
1 | hexo cl && hexo g && hexo s |
访问域名下的/fcircle
即可看到效果
新版前端在顶部右下角卡片新增管理面板:
点击即可进入。第一次部署成功后,输入第一个密码的同时设置密码。请设置一个安全可靠的密码,并防止泄露。
再次修改配置
前端改密码方式
友链朋友圈项目的前端第一次登录时即设置密码,如果想要改的话则需要自行删除数据库 auth
、secret
表格。
进入服务器 hexo-circle-of-friends
根目录,找到 data.db
文件
1 | sqlite3 |
参考