本文最后更新于:2023年12月5日 下午

你是否经常烦恼于友链过多但没有时间浏览?那么友链朋友圈将解决这一痛点。你可以随时获取友链网站的更新内容,并了解友链的活跃情况 。 本文记录后端 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,在配置文件中配置

相关链接

后端部署

项目支持 githubserverdocker 三种部署方式,我有服务器,采用 docker 部署方式

下载 docker 镜像

1
docker pull yyyzyyyz/fcircle:latest

部署容器

clone项目仓库,地址:https://github.com/Rock-Candy-Tea/hexo-circle-of-friends

1
git clone https://github.com/Rock-Candy-Tea/hexo-circle-of-friends.git

进入项目目录,运行部署脚本:

1
python deploy.py

有命令行的选项,依次选择 docker部署,部署端口号,退出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
欢迎使用部署工具,选择部署方式:
——————————————————————————————————
| 1、server | 2、docker | q、退出 |
——————————————————————————————————
2
请选择:
——————————————————————————————————
| 1、部署 | 2、取消部署 | q、退出 |
——————————————————————————————————
1
指定api服务端口,按回车不输入则默认为8000
7595

已部署!
q

此时会看到多了一个 docker 容器

1
2
3
$ 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,显示一大堆数据表示部署成功

1
2
{"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字段格式为:
    1
    2
    3
    [友链名,友链主页地址,友链头像]
    # 或者
    [友链名,友链主页地址,友链头像,自定义订阅后缀]
    • 关于json_api选项,4.3.0以后支持通过提供api对友链进行配置,返回格式必须为json,格式如下:

      1
      {"friends":[[友链1],[友链2],[友链3],[友链4]....]}

      其中,友链1、友链2中的内容格式同list字段。

  • GITEE_FRIENDS_LINKS:从gitee issues中获取友链信息,详见yaml文件中的注释。

  • GITHUB_FRIENDS_LINKS:从github issues中获取友链信息,详见yaml文件中的注释。

  • BLOCK_SITE:屏蔽站点,配置在这里的网址不会被爬取。比如,你的友链页添加了自己,并且不想被爬虫获取,就可以把自己的主页地址屏蔽掉。支持正则表达式,举例:

    1
    2
    3
    4
    5
    6
    7
    # 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:数据的存储方式,目前支持将数据保存在leancloudmysqlsqlitemongodb,默认为sqlite

  • DEPLOY_TYPE:整个项目的部署方式,目前支持将项目部署在githubserverdocker,默认为github

修改内容
  • 这里我们需要修改的是 LINK,将其修改为自己的友链链接
  • 其余一般可以不用修改

修改配置

明白了配置项都有啥,以及我们需要修改什么,那么就是如何改的问题了

无论如何部署,核心都是运行 run.py 文件,他调用的是和自己同层的 fc_settings.yaml 文件

也就是说,我们需要修改真正运行的 run.py 文件旁边的配置文件

  • 对于 docker 部署方式来说,需要进到容器内部修改配置

  • 创建容器后,进入容器:

    1
    docker exec -it circle  bash
  • 进入 /home/fcircle_src/hexo_circle_of_friends 文件夹,修改其中的 fc_settings.yaml 文件,修改 LINK 为自己的链接

    1
    2
    3
    4
    5
    6
    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
    # ...
    ]
  • 其余配置项根据实际需求修改

  • 退出容器

    1
    exit

手动运行服务

我们可以模拟 deploy.py 文件的行为手动运行服务

1
2
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为前缀的文件中,可以通过命令查看:

1
cat /tmp/crawler.log

自动运行

当前的状况是需要手动运行 deploy.py 文件才能运行,不是随开机自动启动的,需要调整一下

docker 容器内创建启动服务脚本

进入容器

1
docker exec -it circle bash

/home/fcircle_src 创建启动脚本文件 setup.sh

1
2
3
4
#!/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 文件,内容为:

1
2
3
4
#!/bin/bash

docker start circle
docker exec circle bash ./setup.sh

该脚本在创建容器后,可以复活容器并启动友链朋友圈服务

systemctl 添加服务

添加 systemctl 服务随开机启动,创建 /lib/systemd/system/friend-circle.service 文件写入如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[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 服务

1
sudo systemctl enable friend-circle.service

之后重启服务器可以发现 友链朋友圈 服务已经启动,外部可以正常访问

nginx 反向代理

当前访问 IP 为 http 协议,需要反向代理成 https 用于博客使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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://www.zywvvd.com/notes/hexo/website/43-yyyzyyyz-deploy/yyyzyyyz-deploy/


“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付

Hexo -43- 友链朋友圈 后端部署
https://www.zywvvd.com/notes/hexo/website/43-yyyzyyyz-deploy/yyyzyyyz-deploy/
作者
Yiwei Zhang
发布于
2023年3月3日
许可协议