Docker系列 Wallabag助力个性化网页RSS化
本文最后更新于 518 天前,如有失效请评论区留言。

本博客由Faconhost大力赞助!如何更快地访问本站?有需要可加电报群获得更多帮助。本博客用什么VPS?创作不易,请支持苯苯!推荐购买本博客的VIP喔,10元/年即可畅享所有VIP专属内容!

前言

使用RSS阅读已经有一段时间了,感觉RSS信息流确实很舒服,大大提高了生活和工作效率。在日常工作或学习中,经常会遇到一些内容很棒的网页内容。如果只是保存链接,以后源文章可能会因为各种原因(下架、撤回、网站迁移)而丢失。这时,将网页保存在本地(或者说保存在自己的VPS)才能万无一失。

以前咕咕也介绍过wallabag这个项目。wallabag 是一个开源的、免费的、保存网页的自托管应用程序,并且开发者提供docker版本。我自己使用了一段时间,感觉还是很稳定的,并且wallabag与RSS结合可以实现比较好的阅读体验,所以这里也分享给大家。

话不多说,咱们开干!(顺便也水水博文,哈哈!)

测试环境

uname -a # Linux VM-12-8-ubuntu 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

docker --version # Docker version 20.10.5, build 55c4c88

docker-compose --version # docker-compose version 1.28.6, build 5db8d86f

目录管理

自定义工作目录:

# 工作目录 按需修改
work=~/docker/wallabag && mkdir -p $work && cd $work

开放端口:

# 防火墙 按需修改
sudo ufw allow 4652/tcp comment 'wallabag' && sudo ufw reload

配置yml文件

不了解docker的小伙伴请先看:《Docker系列 配置Docker全局环境》;《Docker系列 了解Docker Compose的配置文件》。

新增vim docker-compose.yml文件:

vim $work/docker-compose.yml

添加以下内容:

与原版相比,去除了health check相关内容

这里用到了mariadb和redis的镜像,它们的实际版本可以是你自己正在使用的版本。我之前试过mysql:8.0,似乎是不行的;大家要注意了。

yaml所有内容如下

version: '3'
services:
  app:
    image: wallabag/wallabag:latest # 可指定版本号,比如2.6.1
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=wallabag_password_root # 按需修改
      - SYMFONY__ENV__DATABASE_DRIVER=pdo_mysql
      - SYMFONY__ENV__DATABASE_HOST=db
      - SYMFONY__ENV__DATABASE_PORT=3306
      - SYMFONY__ENV__DATABASE_NAME=wallabag
      - SYMFONY__ENV__DATABASE_USER=wallabag
      - SYMFONY__ENV__DATABASE_PASSWORD=wallabag_password # 按需修改
      - SYMFONY__ENV__DATABASE_CHARSET=utf8mb4
      - SYMFONY__ENV__MAILER_HOST=127.0.0.1
      - SYMFONY__ENV__MAILER_USER=~
      - SYMFONY__ENV__MAILER_PASSWORD=~
      - [email protected] # 修改成你自己的邮箱
      - SYMFONY__ENV__DOMAIN_NAME=https://wallabag.example.com # 修改成稍后要反向代理的域名
      - SYMFONY__ENV__SERVER_NAME="BenszWallabag"
    ports:
      - 4652:80   # 可以修改成其他的自己想用的端口
    volumes:
      - ./images:/var/www/wallabag/web/assets/images
    networks:
      - default
    depends_on:
      - db
      - redis

  db:
    image: mariadb # 可改为自己正在使用的版本
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=wallabag_password_root # 与MYSQL_ROOT_PASSWORD对应
    volumes:
      - ./data:/var/lib/mysql
    networks:
      - default

  redis:
    image: redis:alpine # 可改为自己正在使用的版本
    restart: unless-stopped
    volumes:
      - ./redis-data:/data
    networks:
      - default

networks:
  default:
    name: wallabag

wallabag/wallabag镜像的更多参数设置可见官方文档

上线服务

cd $work && docker-compose up -d

观察日志:

cd $work && docker-compose logs -f

日志中可能会有很多warning,但一般不影响使用,比如:

db_1     | 2022-07-07  7:46:04 0 [Warning] You need to use --log-bin to make --expire-logs-days or --binlog-expire-logs-seconds work.
db_1     | 2022-07-07  7:46:11 3 [Warning] Aborted connection 3 to db: 'unconnected' user: 'unauthenticated' host: '172.31.0.4' (This connection closed normally without authentication)
redis_1  | 1:M 07 Jul 2022 07:46:03.599 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

更改Redis设置

针对“# WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory = 1’ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1’ for this to take effect.”。有效性和必要性正在测试中。可以先忽略这一步。

进入容器内部:

# 较新版本docker-compose的容器名一般是wallabag-redis-1
docker exec -it wallabag_redis_1 /bin/sh 

修改文件内容:

vi /etc/sysctl.conf

添加以下内容:

vm.overcommit_memory = 1

让其生效:

sysctl vm.overcommit_memory=1

退出容器内部:

exit

重启服务:

cd $work && docker-compose restart

ddns-go & NPM

不了解Nginx Proxy Manager用法的小伙伴,请看《Docker系列 两大神器NPM和ddns-go的安装》。

在ddns-go或者域名托管商后台解析网址wallabagrc.example.com

NPM中设置反向代理,并无特殊设置,示意图如下:

image-20220706231644653

如果中途有更换域名的操作,请删除旧记录,新建一个Proxy记录,以免NPM产生500错误。

当出现Provisioner finished的字样时可以访问应用:

Starting provisioner...
[WARNING]: Found both group and host with same name: localhost
[WARNING]: Platform linux on host localhost is using the discovered Python
interpreter at /usr/bin/python3, but future installation of another Python
interpreter could change this. See https://docs.ansible.com/ansible/2.9/referen
ce_appendices/interpreter_discovery.html for more information.
[WARNING]: Module did not set no_log for update_password
Provisioner finished.

初始使用可能要经过一段时间的等待才可以访问登陆界面。日志中显示出不少wget请求,可能是wallabag在下载某些数据。

使用wallabag

Wallabag其实有默认的教程,自己喜欢折腾的话也可以看看:

NVIDIA_Share_w9VqSWGPAc

基本设置

默认帐户和密码是:

帐户:wallabag
密码:wallabag

不习惯英语的小伙伴,可以更改语言为简体中文:

NVIDIA_Share_nEFXXmNy6L

NVIDIA_Share_M10SPueiyn

记得按下方的SAVE保存。

出于安全考虑,你最好要修改默认用户的密码

添加用户

如果你要添加一个新用户的话,可以:

NVIDIA_Share_VwcliqUrhy

新建用户(这里只是打个比方):

帐户:test_user
密码:test_user

创建API服务

进入API客户端管理

NVIDIA_Share_7TKhc7ZVG6

创建一个新的客户端:

NVIDIA_Share_LPvq5PEqgO

自定义一个名字后,点击创建新客户端即可:

NVIDIA_Share_BtKiIYyb0D

这时API服务的ID和密钥大致长这样:

客户端ID:1_27ejxrhd6y3oXXXXXXXXXXXXXXXXXcsw848sswsswwssks
密钥:36yrttwnpam8ggkXXXXXXXXXXXXXXXXX0ok8c8gkc8occ84gs4go

这个信息要在chrome插件里填写。值得注意的是,申请好API后该网页界面最好强行关闭而不要直接刷新,否则API会被重置。每次进去的时候,可以访问https://<你的wallabag域名>/developer来获得之前申请的API。

chrome插件

打开chrome网上应用商店,下载并安装插件:

NVIDIA_Share_j88cwbCGD4

使用方法如下图所示。用户帐号和密码就是你登陆wallabag后台的帐户和密码。最后如果成功的话,黄色高亮区应该有一个Agreed,并且URL检查状态是,API token是授予

NVIDIA_Share_OHuVCUVWZT

尝试保存网页

很简单,在一个网页上直接右键

qdX2H1aJOX

插件的颜色产生灰-黄-绿变化,即可成功:

chrome_06sR7rJjKD

你点击这个插件图标,还可以对文章进行简单配置,比如定义它的标签:

awVnYwCRzZ

值得一提的是,如果源网页的反爬做得好,wallabag爬取有可能会失败的。这也是没有办法的事!

RSS订阅源

我们保存的网页也可以很方便地生成RSS源!

配置——订阅源里面进行设置:

NVIDIA_Share_Au9QYIbgnV

设置好后,按SAVE保存。最后,复制对应的链接在RSS阅读器里订阅即可:

NVIDIA_Share_M3UfNgfYdu

下图我展示了我TTRSS阅读器中wallabag的订阅情况:

QQ_dAs9idot2L

在TTRSS里面阅读wallabag推送的文章,图文并茂,没有违和感:

QQ_E0hL3wKrYz

感觉十分方便!

备份wallabag

方法1

该方法有个缺陷,就是文章保住了,但URL没保住。

所有项目——导出,选择JSON格式,最后会得到一个All articles.json文件:

QQ_n12AdFH6s6

在新的Wallabag项目中,通过wallabag V2导入All articles.json文件的内容即可:

QQ_cyb5S1QCIg

QQ_8kbxn9bZNG

方法2

该方法是比较完美的。建议使用。

利用Duplicati等工具直接备份整个$work目录即可。同时,我和小伙伴都注意到备份文件远远小于本地文件,估计是由于备份文件的压缩率比较高:

image-20220711224815665

不用担心,经我测试,可以成功恢复的!

小结

Docker版wallabag的安装和使用还是比较简单的,我也只是简单介绍一下。你想了解多一些,看文档或者自己点开配置试玩一下吧,我就不深入讨论了。个人觉得,Wallabag最贴心的功能就是通过API将个人保存网页生成RSS源,这样使用RSS阅读器的人可以很方便看这个文章。没用过RSS的人可以看我博客学习地图里的RSS系列,这里就不在赘述了!你安装或使用中有什么问题,可以评论区留言或加讨论。

参考

---------------
完结,撒花!如果您点一下广告,可以养活苯苯😍😍😍

感谢Faconhost的友情赞助 (ฅ´ω`ฅ) 本博客基于m2w创作。版权声明:除特殊说明,博客文章均为Bensz原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。VIP内容严禁转载!由于可能会成为AI模型(如chatGPT)的训练样本,本博客禁止将AI自动生成内容作为文章上传(特别声明时除外)。如有需要,请至学习地图系统学习本博客的教程。加Telegram群可获得更多帮助喔! | 博客订阅:RSS | 广告招租请留言 | 博客VPS | 致谢渺软公益CDN |

评论

  1. kiwi
    Windows Chrome 117.0.0.0
    1 年前
    2023-10-08 11:35:07

    利用Duplicati等工具直接备份整个$work目录即可
    这个$work是本地映射目录还是容器内目录?

    • 博主
      kiwi
      Windows Edge 117.0.2045.47
      1 年前
      2023-10-08 14:10:08

      本地映射目录。详见“目录管理”小节。

      • kiwi
        Bensz
        Windows Chrome 117.0.0.0
        1 年前
        2023-10-09 8:30:12

        好的,原来是要用 Docker-Compose 的方式建立容器,这样两个依赖容器就一起运行。这样我的原来的本地映射目录里的数据和设置都能识别还原。我是用的威联通的NAS

      • 博主
        kiwi
        Windows Edge 117.0.2045.60
        1 年前
        2023-10-09 11:47:58

        是呀!Docker-compose比较方便。你的威联通应该也可以用docker-compose的。

  2. 路人甲
    Windows Edge 110.0.1587.63
    2 年前
    2023-3-06 21:01:44

    感谢博主,这个wallabag的官方docker compose配置我卡在登录时出现的 invalid credentials,issue 上也没人能说清楚,用上面这个就好好的,感谢感谢,折腾了几天快要放弃了

    • 博主
      路人甲
      Windows Edge 110.0.1587.63
      2 年前
      2023-3-06 21:05:06

      我寻思着没啥特别操作呀! 能解决您的问题就好 (ฅ´ω`ฅ)

  3. Juijote
    Windows Edge 107.0.1403.0
    2 年前
    2022-10-25 0:48:11

    |´・ω・)ノ现在我的项目数据库能用 SQLite 的都不用其他了,懒得维护数据库…

    • 博主
      Juijote
      Windows Edge 106.0.1370.52
      2 年前
      2022-10-25 8:08:54

      话说您三更半夜的不睡觉的嘛 |´・ω・)ノ

  4. 拉德布鲁赫信徒
    Windows Edge 105.0.1343.53
    2 年前
    2022-10-02 23:56:07

    博主你好,其实我有想过通过wallabag剪藏网页,之前自己用Python写过一个剪藏网页的程序,使用的是readability的方案,但是效果并不是很理想,很多网页无法完成剪藏。于是有想过通过wallabag的api完成剪藏工作。之前部署的wallabag剪藏完网页之后,无论是导出pdf还是导出json都是乱码。不知道博主有没有办法写一个通过api来剪藏网页的样式呢?想看看如果通过api进行剪藏,requests返回的结果是什么

    • 博主
      拉德布鲁赫信徒
      Windows Chrome 105.0.0.0
      2 年前
      2022-10-03 8:19:09

      这个不行,因为我只是一个普通用户,不具有开发能力,帮不了您喔!

    • Juijote
      拉德布鲁赫信徒
      Windows Edge 107.0.1403.0
      2 年前
      2022-10-25 0:54:08

      对样式有比较高要求的话,建议用简悦 https://simpread.pro/

      • 博主
        Juijote
        Windows Edge 106.0.1370.52
        2 年前
        2022-10-25 8:08:26

        看上去不错,有机会我了解一下。谢谢推荐喔!

  5. 新奥尔良
    Android Chrome 98.0.4758.102
    2 年前
    2022-7-17 7:17:26

    老哥您好,我最近在用active backup,想问问,ABB这个软件还原文件是不是会修改文件的修改时间,我的文件还原之后,文件时间都变成了最后还原的时间。

    • 博主
      新奥尔良
      Windows Chrome 103.0.0.0
      2 年前
      2022-7-17 8:12:58

      我对群晖的套件不熟悉喔!因为我用的NAS系统是OpenMediaVault,是一个基于Debian的开源、免费操作系统。

  6. hui
    Android UC Browser 13.7.0.1151
    2 年前
    2022-7-07 18:41:28

    大佬,你太厉害了,我也在用docker,现在碰到了一个问题,我用docker想在服务器上使用ssr科学上网,怎么也上不去,请问您有相关的经验吗

    • 博主
      hui
      Windows Chrome 102.0.0.0
      2 年前
      2022-7-07 18:43:20

      你可以加群问问其它群友 我自己平时很少用自己的VPS搭梯子(虽然我确实知道一些不错的Projects) 所以这方面的经验不多

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇