你是否经常烦恼于友链过多但没有时间浏览?那么友链朋友圈将解决这一痛点。你可以随时获取友链网站的更新内容,并了解友链的活跃情况 。 本文记录后端 docker 部署流程。
简介
友链朋友圈 是自动获取友链中朋友文章的后端插件
功能概览
- 新增前端管理面板,告别繁琐的配置,管理朋友圈更加方便
- 增加极简模式
- 支持 gitee 和 github 上的 issues 友链获取
- 支持butterfly、volantis、matery、sakura、fluid、nexmoe、Yun、stun、stellar、next主题的友链和文章获取
- 支持feed订阅规则,如atom、rss等规则(支持wordpress类型的博客)
- 支持自定义订阅后缀
- 支持站点屏蔽
- 支持按照更新时间和创建时间排序
- 支持未适配的hexo主题和非hexo用户使用,在配置项选择开启配置项友链
- 额外的友链页同时爬取
- 支持添加HTTP代理
- 多种数据存储,提供leancloud,mysql,sqlite,mongodb存储方式
- 多种方式部署,提供github,server,docker部署方式
- 将api整合到主仓库
- 新增友链获取策略的common规则
- 新增api方式的配置项友链
- 将额外友链页和环境变量友链统一为LINK,在配置文件中配置
相关链接
- 官方链接:https://fcircle-doc.yyyzyyyz.cn/#/
- 项目仓库地址:https://github.com/Rock-Candy-Tea/hexo-circle-of-friends
后端部署
项目支持
github
,server
,docker
三种部署方式,我有服务器,采用 docker 部署方式
下载 docker 镜像
代码语言:javascript复制docker pull yyyzyyyz/fcircle:latest
部署容器
clone
项目仓库,地址:https://github.com/Rock-Candy-Tea/hexo-circle-of-friends
git clone https://github.com/Rock-Candy-Tea/hexo-circle-of-friends.git
进入项目目录,运行部署脚本:
代码语言:javascript复制python deploy.py
有命令行的选项,依次选择 docker
, 部署
,部署端口号,退出
欢迎使用部署工具,选择部署方式:
——————————————————————————————————
| 1、server | 2、docker | q、退出 |
——————————————————————————————————
2
请选择:
——————————————————————————————————
| 1、部署 | 2、取消部署 | q、退出 |
——————————————————————————————————
1
指定api服务端口,按回车不输入则默认为8000
7595
已部署!
q
此时会看到多了一个 docker 容器
代码语言:javascript复制$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
54006e0587fc yyyzyyyz/fcircle:latest "/bin/bash" 53 seconds ago Up 52 seconds 0.0.0.0:7595->8000/tcp, :::7595->8000/tcp circle
测试
访问 IP:9595/all
,显示一大堆数据表示部署成功
{"statistical_data":{"friends_num":34,"active_num":26,"error_num":8,"article_num":71,"last_updated_time":"2023-03-03 16:13:39"},"article_data":[{"floor":1,"title":"使用 Memos 搭建时光机教程","created":"2023-03-02","updated":"2023-03-02","link":"https://dusays.com/561/","author":"杜老师说","avatar":"https://cdn.dusays.com/avatar.png"},{"floor":2,"title":"小推一波说说广场","created":"2023-02-27","updated":"2023-03-02","link":"https://dusays.com/560/","author":"杜老师说","avatar":"https://cdn.dusays.com/avatar.png"},{"floor":3,"title":"把 ChatGPT 接入到微信上「Docker 篇」","created":"2023-02-24","updated":"2023-03-02","link":"https://dusays.com/559/","author":"杜老师说","avatar":"https://cdn.dusays.com/avatar.png"},{"floor":4,"title":"把 ChatGPT 接入到微信上「源码部署」","created":"2023-02-21","updated":"2023-03-02","link":"https://dusays.com/558/","author":"杜老师说","avatar":"https://cdn.dusays.com/avatar.png"},{"floor":5,"title":"UPS 低电压时通过群晖实现 Ubuntu 自动关机","created":"2023-02-18","updated":"2023-03-02","link":"https://dusays.com/557/","author":"杜老师说","avatar":"https://cdn.dusays.com/avatar.png"},{"floor":6,"title":"Nextcloud 生产环境部署保姆级教程","created":"2023-02-15","updated":"2023-03-02","link":"https://dusays.com/556/","author":"杜老师说","avatar":"https://cdn.dusays.com/avatar.png"},{"floor":7,"title":"ElementUI中el-select样式修改无效问题","created":"2023-03-02","updated":"2023-03-02","link":"https://blog.lovelu.top/posts/49ab/","author":"满心Hrn","avatar":"https://cdn.lovelu.top/img/logo.png"},{"floor":8,"title":"obsidian如何同步全平台","created":"2023-03-01","updated":"2023-03-
...
项目配置
项目配置在仓库中的/hexo_circle_of_friends/fc_settings.yaml
文件:
请根据文件中的注释,结合本节说明,修改其中的内容。
OUTDATE_CLEAN:默认为60。超过这个值(距今超过60天)的文章,会在数据库中被删除。
LINK:起始的友链页面和爬取策略,支持添加多个,详细见注释说明。
SETTINGS_FRIENDS_LINKS:配置项友链。这是一种通用的方法,如果程序不支持爬取你的友链页,请打开此项。
- 其中list字段格式为:
[友链名,友链主页地址,友链头像]
# 或者
[友链名,友链主页地址,友链头像,自定义订阅后缀]
关于json_api选项,4.3.0以后支持通过提供api对友链进行配置,返回格式必须为json,格式如下:
代码语言:javascript复制{"friends":[[友链1],[友链2],[友链3],[友链4]....]}
其中,友链1、友链2中的内容格式同list字段。
GITEE_FRIENDS_LINKS:从gitee issues中获取友链信息,详见yaml文件中的注释。
GITHUB_FRIENDS_LINKS:从github issues中获取友链信息,详见yaml文件中的注释。
BLOCK_SITE:屏蔽站点,配置在这里的网址不会被爬取。比如,你的友链页添加了自己,并且不想被爬虫获取,就可以把自己的主页地址屏蔽掉。支持正则表达式,举例:
代码语言:javascript复制# block site list
# 添加屏蔽站点
BLOCK_SITE = [
"https://example.com/" # 屏蔽https://example.com/
r".*.com", # 含有.com的全部屏蔽
r"^http://", # http开头的全部屏蔽
]
HTTP_PROXY:如果想为爬虫设置HTTP代理,将此项设为True,然后根据你选择的数据库不同,添加环境变量。名称为PROXY
,值为[IP]:[端口]
,比如:192.168.1.106:8080。注意,目前只支持添加一个HTTP代理。
MAX_POSTS_NUM:每个友链最多获取几篇文章,此值越大,则抓取的文章上限越多,相应地运行速度也会降低,反之亦然。默认为5
。
DATABASE:数据的存储方式,目前支持将数据保存在leancloud
、mysql
、sqlite
、mongodb
,默认为sqlite
。
DEPLOY_TYPE:整个项目的部署方式,目前支持将项目部署在github
、server
、docker
,默认为github
。
修改内容
- 这里我们需要修改的是
LINK
,将其修改为自己的友链链接 - 其余一般可以不用修改
修改配置
明白了配置项都有啥,以及我们需要修改什么,那么就是如何改的问题了
无论如何部署,核心都是运行 run.py
文件,他调用的是和自己同层的 fc_settings.yaml
文件
也就是说,我们需要修改真正运行的 run.py
文件旁边的配置文件
- 对于 docker 部署方式来说,需要进到容器内部修改配置
- 创建容器后,进入容器:
docker exec -it circle bash
- 进入
/home/fcircle_src/hexo_circle_of_friends
文件夹,修改其中的fc_settings.yaml
文件,修改LINK
为自己的链接
LINK: [
{ link: "https://www.zywvvd.com/links/", theme: "fluid" }, # 友链页地址1,修改为你的友链页地址
# { link: "https://noionion.top/link/", theme: "butterfly" }, # 友链页地址2
# { link: "https://immmmm.com/about/", theme: "common1" }, # 友链页地址3
# ...
]
- 其余配置项根据实际需求修改
- 退出容器
exit
手动运行服务
我们可以模拟 deploy.py
文件的行为手动运行服务
docker exec circle nohup python3 -u ./hexo_circle_of_friends/run.py > /dev/null 2>&1 &
docker exec circle nohup python3 -u ./api/main.py > /dev/null 2>&1 &
这样服务成功运行起来了,可以访问你的 IP:Port/friend
API 查看爬下来的是不是你的朋友:
如果朋友认领成功,那么后端部署的道路已经通了
查看日志
如果过程中出现了令人不解的状况,可以查看日志
日志文件保存在/tmp/crawler.log
为前缀的文件中,可以通过命令查看:
cat /tmp/crawler.log
自动运行
当前的状况是需要手动运行 deploy.py
文件才能运行,不是随开机自动启动的,需要调整一下
docker 容器内创建启动服务脚本
进入容器
代码语言:javascript复制docker exec -it circle bash
在 /home/fcircle_src
创建启动脚本文件 setup.sh
#!/bin/bash
python3 -u ./hexo_circle_of_friends/run.py > /dev/null 2>&1 &
python3 -u ./api/main.py > /dev/null 2>&1 &
这样在服务器(容器外)就可以通过
docker exec
命令启动这个脚本实现服务启动了 修改容器后可以通过docker commit
命令保存配置于自启动脚本到docker image
创建自动运行脚本
在 /usr/local/friend-circle
文件夹下创建 friend_circle.sh
文件,内容为:
#!/bin/bash
docker start circle
docker exec circle bash ./setup.sh
该脚本在创建容器后,可以复活容器并启动友链朋友圈服务
systemctl 添加服务
添加 systemctl
服务随开机启动,创建 /lib/systemd/system/friend-circle.service
文件写入如下内容
[Unit]
Description = Service for friend circle
After = docker.service
[Service]
ExecStart = /bin/bash friend_circle.sh
WorkingDirectory = /usr/local/friend-circle
StandardOutput = inherit
StandardError = inherit
User = lighthouse
[Install]
WantedBy=multi-user.target
配置 systemctl
开机启动 friend-circle
服务
sudo systemctl enable friend-circle.service
之后重启服务器可以发现 友链朋友圈
服务已经启动,外部可以正常访问
nginx 反向代理
当前访问 IP 为 http 协议,需要反向代理成 https 用于博客使用
代码语言:javascript复制server {
listen 9876 ssl;
listen [::]:9876 ssl;
# server_name localhost;
ssl_certificate /ssl/server.crt;
ssl_certificate_key /ssl/server.key;
location / {
proxy_set_header X-FORWARDED-FOR $remote_addr;
proxy_set_header X-FORWARDED-PROTO $scheme;
proxy_set_header Host $http_host;
proxy_pass http://ip:local-port;
}
}
至此完成了
友链朋友圈
的后端部署。
参考资料
- https://fcircle-doc.yyyzyyyz.cn/#/