使用 Calibre Web 搭建私人电子图书馆

待在宿舍闲来无事, 突然想到很久以前 TODO 里有一项是搭建一个电子书库, 并且当时还预留了域名. 那搞呗!

Calibre 是个非常著名的电子书管理软件, 可惜他真的太丑太丑了… Calibre Web 是一个开源项目, 利用了 Calibre 的数据库, 把电子书库搬到 web 上实现了.

非常简单, clone 下来装好依赖, 安装, 运行就可以了.

默认文件路径在 /usr/local/python3/bin/cps, 不知道为什么我的服务器上这个目录不是可执行目录. 不过无所谓.

启动后是个 py 程序, 默认在 8083 端口开放 (赞! 不抢我 80 和 443).

注册一个服务来管理程序, 可能是一个更优雅的方式.

/etc/systemd/system/ 目录下创建一个服务文件 calibre-web.service, 写入以下内容:

[Unit]
Description=Calibre-Web
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/python3/bin/cps
Restart=always

[Install]
WantedBy=multi-user.target

重载服务

$ systemctl daemon-reload

启动服务

$ systemctl start calibre-web.service

设置自启动

$ systemctl enable calibre-web.service

添加 Nginx 代理使其能够被访问, 其中可视情况添加 Https 代理. 我的配置如下:

server {
	listen 80;
	listen [::]:80;
	listen 443 ssl;
	listen [::]:443 ssl;
	ssl_certificate /your/certificate;
	ssl_certificate_key /your/key;
	ssl_session_timeout 5m;
	ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_prefer_server_ciphers on;

	server_name your.domain.com;

	client_max_body_size 500m;

	location / {
		proxy_set_header Host $http_host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_pass http://127.0.0.1:8083;
		proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection "upgrade";
		proxy_next_upstream error timeout http_502 http_503 http_504;
	}
}

其中需要注意的是设置 client_max_body_size, 最大上传限制, 默认好像是 20m, 有些电子书可能比较大, 就上传不上去了.

访问设置好的域名, 默认管理员帐号密码分别是 admin, admin123. 进去以后会让你选数据存放位置.

这里需要一个 Calibre 的 metadata.db, 可以在 Calibre 里创建一个空的文件, 找到 metadata.db 文件, 然后上传到服务器. 网站设置到这个文件所在目录即可.

然后就可以设置一些权限和功能什么的了, 这个看个人习惯.

epub 支持在线阅读, 但是, 会有很多问题. 比如无法加书签, 点击了以后会返回 bad request (还是啥来着忘记了), 以及图片无法显示. Calibre Web 版本号还是打 0 开头的, 有很多 bug…

解决方法是设置更新渠道为 Nightly, 然后更新到最新的就行了.

然后就会解锁新的bug, 真的就是我修复了一个 bug, 同时引入了更多 bug

现在书架无法添加图书,,, issue 暂时没人提, 因为稳定版没有这个问题… 还好我暂时可以不用到书架.

Calibre Web 中阅读 epub 电子书时的夜间模式解决方案