自建 Wallabag 服务
Wallabag 简介
wallabag 是一个网络应用程序,允许您保存网页以供以后阅读。单击,保存并在需要时阅读。它提取内容,这样您就不会被弹出窗口
您可以将其安装在自己的服务器上,也可以在 wallabag.it 上创建一个帐户。
项目展示
GitHub 原项目地址:https://github.com/wallabag/wallabag
官方文档地址:https://doc.wallabag.org/en/admin/installation/requirements.html
官方镜像:https://hub.docker.com/r/wallabag/wallabag
图片预览
搭建环境
- 系统
Debian12
- 域名一枚,并做好解析到服务器上
- 安装好
Docker、Docker-compose
- 账号密码:
wallabag:wallabag
开始搭建
sudo -i # 切换到root用户
apt update -y # 升级packages
apt install wget curl sudo vim git -y # 安装常用的软件
创建一下安装的目录:
mkdir -p /home/wallabag
cd /home/wallabag
vim docker-compose.yml
docker-compose.yml
填入以下内容:
sql版本
version: '3'
services:
wallabag:
image: wallabag/wallabag
environment:
- SYMFONY__ENV__FROM_EMAIL=xxxxx@163.com # 修改成你自己的邮箱
- SYMFONY__ENV__DOMAIN_NAME=https://xxxxxx.com # 修改成稍后要反向代理的域名
- SYMFONY__ENV__SERVER_NAME="Achen" #修改成你自己的网站名称
- SYMFONY__ENV__LOCALE=zh
ports:
- 8080:80 # 8080可以修改成其他的自己想用的端口
volumes:
- ./images:/var/www/wallabag/web/assets/images # 将图片映射挂载到本地,这样docker停止了,数据不会丢失
- ./data:/var/www/wallabag/data
mysql 版本
version: '3'
services:
wallabag:
image: wallabag/wallabag
environment:
- MYSQL_ROOT_PASSWORD=wallaroot
- 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=wallapass
- SYMFONY__ENV__DATABASE_CHARSET=utf8mb4
- SYMFONY__ENV__MAILER_HOST=127.0.0.1
- SYMFONY__ENV__MAILER_USER=~
- SYMFONY__ENV__MAILER_PASSWORD=~
- SYMFONY__ENV__FROM_EMAIL=xxxxx@163.com # 修改成你自己的邮箱
- SYMFONY__ENV__DOMAIN_NAME=https://xxxxxx.com # 修改成稍后要反向代理的域名
- SYMFONY__ENV__SERVER_NAME="Achen"
- SYMFONY__ENV__LOCALE=zh
ports:
- 8000:80 # 8000可以修改成其他的自己想用的端口
volumes:
- /root/achen/achen_wanjia/wallabag/images:/var/www/wallabag/web/assets/images # 将图片映射挂载到本地,这样docker停止了,数据不会丢失
healthcheck:
test: ["CMD", "wget" ,"--no-verbose", "--tries=1", "--spider", "http://localhost"]
interval: 1m
timeout: 3s
depends_on:
- db
- redis
db:
image: mariadb
environment:
- MYSQL_ROOT_PASSWORD=wallaroot
volumes:
- ./data:/var/lib/mysql # 将数据映射挂载到本地,这样docker停止了,数据不会丢失
- ./images:/var/www/wallabag/web/assets/images # 将图片映射挂载到本地,这样docker停止了,数据不会丢失
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
interval: 20s
timeout: 3s
redis:
image: redis:alpine
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 20s
timeout: 3s
postgres 版本
这里额外提供一份以postgresql作为数据库的配置,用于替换mariadb以支持一些mariadb不支持的系统架构,例如linux/arm/v7架构。如果遇到架构不支持的问题,请尝试以下配置
version: '3'
services:
wallabag:
image: wallabag/wallabag
restart: always
environment:
- POSTGRES_PASSWORD=wallaroot # 自行设置密码
- POSTGRES_USER=wallabag_admin # 自行设置用户名
- SYMFONY__ENV__DATABASE_DRIVER=pdo_pgsql # 适用于 pgsql 的驱动
- SYMFONY__ENV__DATABASE_HOST=db
- SYMFONY__ENV__DATABASE_PORT=5432 # pgsql 的默认端口
- SYMFONY__ENV__DATABASE_NAME=wallabag
- SYMFONY__ENV__DATABASE_USER=wallabag
- SYMFONY__ENV__DATABASE_PASSWORD=wallapass # 自行设置密码
- SYMFONY__ENV__DATABASE_TABLE_PREFIX="wallabag_"
- SYMFONY__ENV__MAILER_DSN=smtp://127.0.0.1
- SYMFONY__ENV__FROM_EMAIL=example@example.com # 自行设置邮箱
- SYMFONY__ENV__DOMAIN_NAME=http://127.0.0.1:8888 # 自定义域名
- SYMFONY__ENV__SERVER_NAME="wallabag service" # 服务名称
ports:
- "8888:80"
volumes:
- ./images:/var/www/wallabag/web/assets/images
healthcheck:
test: ["CMD", "wget" ,"--no-verbose", "--tries=1", "--spider", "http://localhost"]
interval: 1m
timeout: 3s
depends_on:
- db
- redis
db:
image: postgres:9.6
restart: always
environment:
- POSTGRES_PASSWORD=wallaroot # 这里对应前面同名环境变量的密码
- POSTGRES_USER=wallabag_admin # 这里对应前面同名环境变量的用户名
volumes:
- ./data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
interval: 20s
timeout: 3s
redis:
image: redis:alpine
restart: always
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 20s
timeout: 3s
简便修改版
如果本地宿主机安装了mysql或postgresql和redis
version: '3'
services:
wallabag:
image: wallabag/wallabag
environment:
- MYSQL_ROOT_PASSWORD=wallaroot # 修改成你自己的mysql-root密码,需要此项来创建数据库和用户
- SYMFONY__ENV__DATABASE_DRIVER=pdo_mysql
- SYMFONY__ENV__DATABASE_HOST=172.17.0.1 #这里修改成宿主机在docker中的内网地址
- SYMFONY__ENV__DATABASE_PORT=3306
- SYMFONY__ENV__DATABASE_NAME=wallabag # 修改成你自己的mysql数据库名
- SYMFONY__ENV__DATABASE_USER=wallabag # 修改成你自己的mysql数据库账户名
- SYMFONY__ENV__DATABASE_PASSWORD=wallapass # 修改成你自己的mysql数据库账户密码
- SYMFONY__ENV__REDIS_HOST=172.17.0.1 #这里修改成宿主机在docker中的内网地址
- SYMFONY__ENV__REDIS_PORT=6379
- SYMFONY__ENV__REDIS_PASSWORD= #这里修改成宿主机在redis密码
- SYMFONY__ENV__DATABASE_CHARSET=utf8mb4
- SYMFONY__ENV__FROM_EMAIL=xxxxx@163.com # 修改成你自己的邮箱
- SYMFONY__ENV__DOMAIN_NAME=https://xxxxxx.com # 修改成稍后要反向代理的域名
- SYMFONY__ENV__SERVER_NAME="Achen" #修改成你自己的网站名称
- SYMFONY__ENV__LOCALE=zh
ports:
- 8080:80 # 8080可以修改成其他的自己想用的端口
volumes:
- ./images:/var/www/wallabag/web/assets/images # 将图片映射挂载到本地,这样docker停止了,数据不会丢失
- ./data:/var/www/wallabag/data
然后运行:
docker-compose up -d
利用宝塔面板反向代理
新建一个站点,不要数据库,不要 php,纯静态
然后打开下面的配置,修改 Nginx 的配置
注释掉上图内容
添加下列代码:
默认的用户名和密码都是wallabag(这个在 docker hub 文档中有说明)登录之后,先去 Config 中修改 PASSWORD,修改完成后再进行 API 服务的配置
创建 API 服务
创建一个新的客户端,取一个名称,然后创建即可。
创建完客户端之后就会提供客户端 ID 和密钥,此时不要直接刷新网页避免重置 ID 和密钥。
设置中文
之后再点击下方的SAVE进行保存即可
配置插件
Chrome 搜索:应用商店
搜索 Wallabag
点击添加到Chrome
点击浏览器插件
将需要的网页添加到Wallabag
即可!
这样就可以进到Wallabag
查看了!
手机安装相应的 App 即可同步查看!
导入 worker
要运行 异步 redis 导入 worker,请使用以下命令:
$ docker run --name wallabag --link wallabag-db:wallabag-db --link redis:redis -e <... your config variables here ...> wallabag/wallabag import <type>
其中
启用 Redis 作为异步导入的缓存
进入 wallbag 网页界面,登录后,点击右上角的头像,选择【内部设置】
,点击【导入】
标签,下方的 启用 Redis 来异步导入数据 值默认是 0
,改为 1
后点击“应用”按钮,就可以开启 Redis 作为异步导入的缓存了
此时再次点击右上角的头像,选择【导入】
,应该能看到页面顶部有一行很显眼的提示:
导入是异步进行的。一旦导入任务开始,一个外部 worker 就会一次处理一个 job。目前的服务是: Redis
此时选择一个导入途径,比如选择了【Firefox】,然后点击“导入内容”,选择待导入的文件,点击“上传文件”,此时右上角应该会提示:
导入情况摘要: 1 个项目正在等待导入。
此时如果刷新一下【导入】页面,会发现右上角有个提示:
Messages in queue: 1
多次刷新也之后提示这一句,看上去导入任务并没有开始的样子。。
此时需要去手动执行一下同步任务才能开始:
docker exec -it wallabag /var/www/wallabag/bin/console wallabag:import:redis-worker firefox --env=prod
导入完成后,刷新一下 wallabag 网页,应该能看到导入的内容了。
保存的文章不显示图片
如果你保存的文章不显示图片,需要到NAS中对docker这个文件夹开启写入权限,因为没有写入权限,图片因此无法保存到本地
然后在宿主机执行下面这个命令,将宿主机挂载目录的权限调整至 777 ,也就是允许(任何)其他用户读写:
sudo chmod -R 777 data
终究还是翻了一下官方的 dockerfile ,原来容器内的用户和组都是 nobody
最根本的办法,就是在宿主机将挂载目录的归属指定为 nobody
用户和组。
但是这个特殊的用户和组直接 sudo chown nobody:nobody data
是不行的,需要指定 uid 和 gid 才行:
sudo chown -R 65534:65534 data
最后再执行一下 docker compose up -d
重建容器就可以了(因为刚才修改了 compose 配置文件)。