本文主要内容
RT,具体来讲是在Ubuntu22.04纯命令行环境下的docker + docker-compose + nginx proxy manager + komga的部署,再配合任意平台python环境下的bangumikomga使用配置教程。因此本文不会涉及在群晖等gui docker的配置,但是如果ssh进群晖的话理论上操作还是通用的,还请有兴趣的各位自行尝试,翻车了别找我就是。
本文涉及的项目链接
- Komga服务端:gotson/komga: Media server for comics/mangas/BDs/magazines/eBooks with API and OPDS support (github.com)
- BangumiKomga刮削器:chu-shen/BangumiKomga: A Metadata Provider for Komga using Bangumi (github.com)
Tachiyomi安卓客户端:Home | Tachiyomi(被棒子版权炮干死了)Tachiyomi的Komga插件:Extensions | Tachiyomi(被棒子版权炮干死了)
前言
时过境迁,当年写得乱七八糟得Docker+Komga现在有点不堪入目,加上Komga这两年之间的更新内容挺多,包括之前被我自己实际使用中诟病的AVIF支持跟RAR5支持都已经加上,再加上近期了解到BangumiKomga刮削工具的存在,试用之后决定单独开一篇来写专门写Komga,这样看起来也更加方便。那么废话不多说,开干。
Docker&Docker-compose安装
首先我们还是得把Docker跟Docker-compose给装好,这是一切的基础。
这一部分的安装流程没变,所以可以直接参照:Docker快速部署私人云相册+同人音声库+漫画库+网盘+保种盒+Plex – 第 2 页 – 白磷茶室 (hakur.in) 有一点小改变就是现在的get-docker.sh
跑完之后理论上是顺便会帮你把docker compose也装上的,这也意味着你可以省略安装docker compose这一步,直接验证下有没有装上就行。
NPM反代部署配置
NPM反代是为了给自己的Komga绑定上域名,因为自己的是公网服务器,使用https能够确保安全性也能蹭到cf,如果没有事先准备好的域名,或者只是内网使用Komga可以跳过这一部分。
这一部分的安装配置流程也没变,直接参照:Docker快速部署私人云相册+同人音声库+漫画库+网盘+保种盒+Plex – 第 3 页 – 白磷茶室 (hakur.in)
Komga部署配置
- 当上面的基础环境配置好了之后,我们直接开写
docker-compose.yml
version: '3.3'
services:
komga:
image: gotson/komga
container_name: komga
volumes:
- type: bind
#下方需要修改,例:/home/komga/config
source: /path/to/config
target: /config
- type: bind
#下方需要修改,这个是你的漫画文件保存路径,例:/home/transmission/downloads/manga
source: /path/to/data
target: /data
- type: bind
source: /etc/timezone #alternatively you can use a TZ environment variable, like TZ=Europe/London
target: /etc/timezone
read_only: true
ports:
- 25600:25600 #新版端口改成了25600,没什么影响
user: "1000:1000"
# remove the whole environment section if you don't need it
# 下面两行额外的环境变量行,用不着,直接删除或者注释掉
# environment:
# - <ENV_VAR>=<extra configuration>
restart: unless-stopped
# 添加之前创建的网络
networks:
default:
external: true
name: nginx-proxy
- 启动容器
docker-compose up -d
- 如果你没打算配域名,那么现在已经可以使用
http://IP:25600
来访问你的Komga了 - 如果你打算配域名,那么请在NPM里面配置好Nginx反代,参照刚刚部署配置NPM的流程来注释掉
docker-compose.yml
里的25600端口,更新容器,至此Komga部署和配置完成,下面我们来讲讲刮削器怎么用。
BangumiKomga部署配置
在整理漫画库存的时候,偶尔在站内发现有人提起这个问题,本来嘛,只是看漫画而已,刮削信息什么的如果纯手动的话确实有点嫌时间太多了,但是如果有这个脚本的话,跑一下就能刮到八九不离十的信息就比较值得去用了,毕竟信息刮好的漫画封面墙真的很好看。
在项目readme里面的快速开始我觉得写得不够快速,主要是config.py的指引读起来有点费劲,直接上实例config来说明,也当作自己做笔记方便后面换设备了再起来一遍。
漫画命名建议
首先,请确保你漫画库里的资源命名遵照这里chu-shen/BangumiKomga: A Metadata Provider for Komga using Bangumi (github.com)提到的格式,也就是[漫画名称][作者][出版社][卷数][其他1][其他2]
的格式,不然在匹配上可能会出现大差错,这是使用该脚本的前提。
第一次运行
- 环境配置没什么好说的,请参照官方的readme来配置好,Komga版本尽量保持最新,这里用的是1.10.0,这个版本加入了对RAR5压缩包的支持,喜大普奔
- 然后我们来填
config.py
,文件在config文件夹下面,请复制一份config.template.py
然后改名改成config.py
,然后按照下面的提示填写
# get access token from: https://next.bgm.tv/demo/access-token
BANGUMI_ACCESS_TOKEN = '去上面的地址登入创建,查询r-18刊物的时候才需要用到'
KOMGA_BASE_URL = "服务器地址,注意不要带后面的斜杠"
KOMGA_EMAIL = "Komga登入邮箱"
KOMGA_EMAIL_PASSWORD = "Komga登入密码"
FORCE_REFRESH_LIST = []
KOMGA_LIBRARY_LIST = ['填入整个库的id',]
KOMGA_COLLECTION_LIST = []
# 按需改True,第一次润的时候全部保持False即可
RECHECK_FAILED_SERIES = False
RECHECK_FAILED_BOOKS = False
# 创建刮削失败收藏,大概用不着
CREATE_FAILED_COLLECTION = False
# ……后面的可以无视
- 填好之后就可以润
refreshMetadata.py
了,然后转到生成的refreshMetadata.log
观察是否正常运行,如果一切正常,运行完成之后Komga库里所有的信息都会刮削好。
修正错误元数据/匹配失败的书籍
这里使用的是项目里面提到的cbl功能,也就是手动指定bgm.tv的链接来让脚本来爬取信息。
- 首先在匹配错误/没匹配到的书籍系列中,编辑新增一个链接
- 然后我们来修改
config.py
# ……前面的保持不变
FORCE_REFRESH_LIST = ['填入刚刚这本失败书籍/系列在Komga里的id', '如果有多本,那就继续填写',]
KOMGA_LIBRARY_LIST = ['填入整个库的id',]
KOMGA_COLLECTION_LIST = []
# 改True
RECHECK_FAILED_SERIES = True
RECHECK_FAILED_BOOKS = False
# ……后面的可以无视
- 填好之后就可以润
refreshMetadata.py
了,这个时候脚本就会按照你手动填写的bgm链接来重新匹配信息。
以上是这个工具的基本配置和运行,感谢工具作者写了个这么方便的强迫症友好工具,接下来让我们把刮削好的库丢去晒吧(不是),祝大家漫画阅读愉快!
错误排除
评论区里有提到一个这个插件有机会出现拿不到[‘metadata’][‘links’]的报错,这个在我之前的部署里也出现过一次,那次的原因是因为我的komga版本过于古老,并没有[‘metadata’][‘links’]这个内容,更新komga版本就解决了,如果出现了一样或者类似的问题,大家可以尝试访问自己的komga地址(http:ip:port)后面加/api/v1/series这个api,然后看看里面的”metadata”里面有没有”links”项目,如果有的话应该是不会出现这个问题的,没有的话那就升级komga版本。
一些题外话/实用技巧
- 批量单独打包文件夹内的复数文件夹的bash/shell命令
如果你觉得这小标题很绕,没错我也觉得,不如直接看图
如果凑巧你也是从nyaa的mangaroo那边拿日语资源的话,你会发现他的资源都是以文件夹装001.avif、002.avif类似这种散装形式来上传的,也就意味着Komga不能直接识别。然后正常来讲我们会把一个系列好几卷的漫画全都下载到一个文件夹(这个文件夹按照BangumiKomga的命名规则来命名),于是我们剩下要做的只是将里面的分卷文件夹分别打包压缩就可以了,但是面对动则十几二十卷的漫画一卷一卷来明显很费劲,于是有了以下命令。
首先我们cd进这个系列漫画的文件夹,默认复数的卷数文件夹都已经按[漫画名][卷数]
之类的形式命名(理论上有卷数就够了),然后我们只需要在bash里跑这一条命令:
for i in */; do zip -r "${i%/}.zip" "$i"; done
等待压缩完成,就可以去Komga里面扫描库导入了~
- AVIF vs JPEG
有空再唠嗑下AVIF这对比JPEG的35%的压缩率对文件保存和网络传输是多么的友好。
关于格式兼容性,因为AVIF/AV1都是谷歌的东西,所以安卓端的支持肯定是没有问题的。至于苹果,忘了Ios/Macos支不支持AVIF来着,之前看了官方的客户端好像是不支持的,但是服务端支持的话客户端是什么表现也不清楚,暂且认为苹果不支持吧。
以上面狐仙大人的这一页为例,如果在平板/电脑这种稍大的屏幕上看,因为AVIF那套的分辨率大概是JPG那套的三分之一,因此线条是没有JPG那套观感上锐利的,这个是分辨率或者说源的区别。然后JPG那套是供给蜀黍的源,阴影是上的网纹点,AVIF那套淡的阴影是用的灰度填充,其实在电子设备在观看的话灰度填充会比网纹点观感要好,不会因为设备缩放出现奇怪的纹,不过这个也是源的差距了,跟AVIF和JPEG的压缩率没什么关系,如果你是用的手机看漫画,这两页基本上没有观感上的差距。
假设这是一个公开的服务器,很明显,一卷250MB跟一卷20MB的大小,对服务器水管的压力会很不一样,这点在自用的时候看页面加载速度就能感觉出来,一页120kB跟一页1.3MB在服务器带宽不充裕的情况下可能就是10倍的加载速度的区别,对阅读体验会有显著影响。另外就是寸土寸金的服务器硬盘了,用AVIF无疑同一套漫画能省下三分之一的空间,这点对于运营来说值得考量。
16 3 月, 2024 at 5:45 下午
然而我在run refreshMetadata.py的时候报错了:
”’
G:\BangumiKomga-main>python refreshMetadata.py
Traceback (most recent call last):
File “G:\BangumiKomga-main\refreshMetadata.py”, line 268, in
refresh_metadata(FORCE_REFRESH_LIST)
File “G:\BangumiKomga-main\refreshMetadata.py”, line 66, in refresh_metadata
for link in series[‘metadata’][‘links’]:
KeyError: ‘links’
”’
我直接看源码应该是从KomgaApi往外拿数据的时候就少了这一项,这一部分给Try了也不影响使用。囧,Komaga是docker昨天拉的最新版本,不知道怎么回事。
20 4 月, 2024 at 6:54 下午
可以试下直接访问komga的api看看[‘metadata’][‘links’]有没有内容,如果没有的话就是komga的版本或者说是cbl填的位置出问题了才没拿到,印象中之前跟你出过一模一样的错误,升级komga版本就没事了。
6 5 月, 2024 at 10:36 下午
有些番外篇应该怎样命名
12 5 月, 2024 at 3:35 下午
建议参考bgm.tv那边的结构,如果bgm.tv那边的番外篇跟原来的系列是独立开来的(好像一般都是这样),那就新起一个番外篇文件夹独立刮削信息,命名跟着[漫画名称][作者][出版社][卷数][其他1][其他2]这样来嘛,不是在[漫画名称]里+番外篇就是在[其他1]上标注番外篇,反正这种估计都得用cbl手动刮削的。
26 6 月, 2024 at 9:21 下午
大佬 nginx proxy manager 怎么配置啊,反向代理后epub阅读出现问题,github能找到这个问题,但是大家好像都不会这个。
3 9 月, 2024 at 5:28 下午
这边使用v1.12.0测试epub似乎一切正常,是哪个issue可以链接发一下,npm里面就是cache assets、ws suppoet跟屏蔽常见漏洞全开,ssl强制跟h2支持都打开,都是通用设置理论上不会造成epub不能阅读才对,另外建议结合komga容器的日志来分析。
6 10 月, 2024 at 10:30 上午
建议补充点docker部署bangumikomga的内容。
官方文档写的太简单了有些点没写,虽然我搞定了但是估计有些同学会搞不定。补充下:
1.docker映射的文件后面两个recordsRefreshed.db和refreshMetadata.log要创建空文件;
2.有人大概不知道怎么运行容器内的refreshMetadata.py,命令如下:“docker exec bangumikomga sh -c “python /app/refreshMetadata.py””。
27 10 月, 2024 at 5:34 下午
看了下官方的docker compose只是单纯为了方便把运行环境配起来,要说环境隔离吧我在宿主上装个conda就完事了,如果每次都要使用docker exec来执行refreshMetadata.py的话跟直接在宿主机执行其实没什么区别,估计这个也是官方文档懒得写详细的原因。
29 10 月, 2024 at 11:08 下午
主要是群晖DSM之类的系统上没conda,如果要在一些品牌NAS和黑群上直接跑,docker恐怕是唯一办法。不过官方这个docker镜像跑起来我发现有点问题,不知道为啥跑着跑着就崩了,看log也找不出任何异常,我最后还是通过PC给NAS做刮削了…
29 10 月, 2024 at 11:23 下午
发完发现官方修改过了文档了,这下写的很明白了。docker只要每次启动容器就行了,跑完容器自动停止,命令已经在容器里面自带了。之前应该是我会错意了,不需要docker exec来执行。这下我觉得docker应该是更好的运行方式了,完整的anaconda太大了,还需要通过pc来刮。