Docker Compose 部署 Wallabag

您所在的位置:网站首页 waiting图片 Docker Compose 部署 Wallabag

Docker Compose 部署 Wallabag

2024-06-27 09:50| 来源: 网络整理| 查看: 265

这是一篇在内网服务器上部署 wallabag 的踩坑过程记录,使用 docker compose 部署,并使用内网其他机器上已有的 PostgreSQL 数据库和 Redis 缓存,同时使用 traefik 作为前置的反向代理。

wallabag 是一个可以自己部署的网页剪藏 / 稍后读应用,可以方便地保存各种网页资源,不仅能保存链接,还可以抓取页面内容(从此不怕 404),同时支持 tag 和全文搜索,确实非常方便。然而网上搜到的 wallabag 部署教程多数都是基于 官方示例 ,使用 MySQL / MariaDB 作为数据库,而且没有配置 Redis 缓存。这应该是为数不多使用 PostgreSQL 作为数据库的教程(用的人少,坑自然多些,不过俺已经替各位趟平了,可以放心阅读)。

至于为什么要用 PostgreSQL 作为数据库,是因为:

内网中还有其他应用在用,不希望每个应用都部署一个自己的数据库,一来不方便备份数据,二来对 HomeLab 场景下有限的计算和存储资源也是一种浪费PostgreSQL 在大多数场景下可以替代 MySQL,在容器时代,大多数现代构建的镜像都支持使用 PostgreSQL 作为数据库,或者至少同时支持 PostgreSQL 和 MySQL 。俺认为长远来看这也是技术上的趋势,详见:Postgres vs. MySQL: a Complete Comparison in 2023PostgreSQL: About

言归正传,下面开始踩坑之旅。

§00. 启动容器

首先新建一个文件夹,用来部署 wallabag:

1 2 mkdir wallabag cd wallabag docker-compose.yml 文件内容(俺注释掉了官方示例中的 `healthcheck` 部分) 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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 version: '3' x-common: &default restart: unless-stopped networks: - traefik logging: driver: json-file options: max-size: '10m' environment: &default-environment TZ: Asia/Shanghai services: wallabag: admin # 设置密码 # 密码不会回显,而且只能输入一次,没有二次输入校验 # 注意别打错字,否则只能重新创建了 # 不输入直接回车,会使用默认值 wallabag Password [wallabag]: > # 输入用户对应的邮箱 # 不输入直接回车,会使用默认值 [email protected] Email [[email protected]]: > [email protected] Administration successfully setup. Step 4 of 4: Config setup. -------------------------- Config successfully setup. [OK] wallabag has been successfully installed. [OK] You can now configure your web server, see https://doc.wallabag.org

此时再次刷新 wallabag 网页,使用刚才创建的用户名和密码登录就可以正常使用了。

理论上可以不用先执行迁移数据库的命令,直接进入安装流程,然后在提示是否重置数据库和表结构的时候,都选择 yes ,来让 wallabag 重新生成数据库和表结构,然后再新增管理员账户,也是一样的效果。但是俺懒得试了,看到这篇的网友们如果愿意尝试一下,可以在评论中分享一下结果,方便后来的网友们

§给挂载的图片目录增加写入权限

然而,到这里问题还是没有全部解决,如果此时尝试保存一篇带图片的文章,那么图片内容是没法保存的(无论源网页有没有反爬措施),然后再尝试删除这篇文章,又会跳出来一个 500 错误。这是因为在 docker-compose.yml 文件中,将容器内的 /var/www/wallabag/web/assets/images 目录挂载到了 data 这个宿主机文件夹,但是不知为何容器内的应用对这个路径没有写入权限。俺尝试在 docker-compose.yml 文件中增加 user: '1000:1000' 配置,但重建容器后发现容器压根启动不起来了,查看日志能看到这个报错:

Starting wallabag ... /entrypoint.sh: line 28: can't create app/config/parameters.yml: Permission denied

推测是因为镜像构建过程中使用了其他用户,导致指定的 1000 用户并没有权限操作其中的文件,不过问题解决到这里,俺已经麻了,并不想再去翻 wallabag 官方的 dockerfile 。。最终俺选择简单粗暴地解决这个问题——先删掉刚才在 docker-compose.yml 文件中增加的 user: '1000:1000' 配置,然后在宿主机执行下面这个命令,将宿主机挂载目录的权限调整至 777 ,也就是允许(任何)其他用户读写:

1 sudo chmod -R 777 data

终究还是翻了一下官方的 dockerfile ,原来容器内的用户和组都是 nobody 。。。最根本的办法,就是在宿主机将挂载目录的归属指定为 nobody 用户和组。但是这个特殊的用户和组直接 sudo chown nobody:nobody data 是不行的,需要指定 uid 和 gid 才行:

1 sudo chown -R 65534:65534 data

最后再执行一下 docker compose up -d 重建容器就可以了(因为刚才修改了 compose 配置文件)。

§02. 进阶教程§开启图片本地缓存

进入 wallbag 网页界面,登录后,点击右上角的头像,选择【内部设置】,点击【杂项】标签,下方的 在本地缓存图片 值默认是 0 ,改为 1 后点击“应用”按钮,就可以将网页中的图片缓存至本地(挂载出来的容器目录)了。

§启用 Redis 作为异步导入的缓存

进入 wallbag 网页界面,登录后,点击右上角的头像,选择【内部设置】,点击【导入】标签,下方的 启用 Redis 来异步导入数据 值默认是 0 ,改为 1 后点击“应用”按钮,就可以开启 Redis 作为异步导入的缓存了。

此时再次点击右上角的头像,选择【导入】,应该能看到页面顶部有一行很显眼的提示:

导入是异步进行的。一旦导入任务开始,一个外部 worker 就会一次处理一个 job。目前的服务是: Redis

此时选择一个导入途径,比如俺选择了【Firefox】,然后点击“导入内容”,选择待导入的文件,点击“上传文件”,此时右上角应该会提示:

导入情况摘要: 1 个项目正在等待导入。

此时如果刷新一下【导入】页面,会发现右上角有个提示:

Messages in queue: 1

多次刷新也之后提示这一句,看上去导入任务并没有开始的样子。。

此时需要去手动执行一下同步任务才能开始:

1 docker exec -it wallabag /var/www/wallabag/bin/console wallabag:import:redis-worker firefox --env=prod

导入完成后,刷新一下 wallabag 网页,应该能看到导入的内容了。

参考链接:

wallabag/wallabag - Docker Image | Docker HubCannot upgrade to 2.6.0 / Issue with scheb_two_factor · Issue #6649 · wallabag/wallabagDefault user not created · Issue #6795 · wallabag/wallabagInstagram, and Pocket import not working with redis. · Issue #209 · wallabag/docker


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3