Appearance
Calibre Web 安装
缘由
之前用树莓派时用了一张 32G 的 SD 卡,空间不够用了,于是换卡、重新安装;过程中踩了很多坑,于是进行记录。
目标:
- 根据已有的书籍文件夹,重新安装 calibre-web
- 配置 ddns、nginx 使 calibre-web 公网可访问
安装
找到 calibre-web 的官网,它推荐的方式为直接 pip 安装,但这里我想试一试 docker 安装。
官网提供的 docker-compose 文件 compose.yml 如下:
yaml
---
services:
calibre-web:
image: lscr.io/linuxserver/calibre-web:latest
container_name: calibre-web
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- DOCKER_MODS=linuxserver/mods:universal-calibre #optional
- OAUTHLIB_RELAX_TOKEN_SCOPE=1 #optional
volumes:
- /path/to/data:/config
- /path/to/calibre/library:/books
ports:
- 8083:8083
restart: unless-stopped我希望做一些改动:
更改用户
为了更好地管理文件以及权限,我希望新建一个 calibre-web 用户,并将 calibre 书库存放在用户文件夹中[1]。
首先创建用户:
bash
sudo adduser --system --shell /bin/bash --gecos 'Calibre Web Server' --group --disabled-password --home /home/calibre-web calibre-web该命令创建了名为 calibre-web、不能登录、家目录在 /home/calibre-web 的用户。用 id calibre-web 查看其 user id 和 group id,写入compose.yml:
yaml
environment:
- PUID=${user id}
- PGID=${group id}将 Calibre 书库复制到 /home/calibre-web/calibre-web,创建 /home/calibre-web/config ,并修改 compose.yml:
yaml
volumes:
- /home/calibre-web/calibre-web:/books
- /home/calibre-web/config:/config表示将 /home/calibre-web/ 的两个目录映射到容器中的 /books 和 /config。
配置代理
由于众所周知的网络问题,直接构建容器比较慢。我需要让 docker 在构建时使用代理。一般的设置代理的方法是在终端中设置环境变量:
bash
export http_proxy=127.0.0.1:10801
export https_proxy=127.0.0.1:10801然而这完全不管用。对于 docker 的方法还有设置 build-args,类似这样:
yaml
services:
calibre-web:
build:
args:
- HTTP_PROXY="http://127.0.0.1:10801"
- HTTPS_PROXY="http://127.0.0.1:10801"
image: ...很遗憾还是不管用。事实上官网 有介绍,通过 FILE__ 前缀来设置环境变量。在我的理解里应该是这样:
yaml
services:
calibre-web:
environment:
- FILE__HTTP_PROXY=/path/to/your/file
- FILE__HTTPS_PROXY=/path/to/your/fileemm... 不管用!
最后的最后,只能完全更改了整个 docker 的代理设置[2]:
bash
sudo mkdir /etc/systemd/system/docker.service.dini
[Service]
Environment="HTTP_PROXY=http://proxy_url:proxy_port/" "HTTPS_PROXY=http://proxy_url:proxy_port" "NO_PROXY=localhost,127.0.0.0/8"值的一提的是,不能省略前面的 http:// ,(对于我的代理)也不能用 https://。
权限管理
输入如下命令:
bash
sudo docker compose up -d容器就会跑起来。但是如果权限不对,则还是会卡死。
bash
sudo chown calibre-web:calibre-web /home/calibre-web/ -R
sudo chmod 755 -R /home/calibre-web/Debug
查看 docker 日志:
bash
sudo docker logs -f calibre-web查看 calibre-web 日志:
bash
sudo docker -it calibre-web bash # 进入容器执行命令
...
cat /config/calibre-web.log权限问题
如果在容器内部对 /books 文件等进行了修改,可能需要重新用 chown 命令。比如用 calibredb restore_database 来修复书库等。
元数据获取问题
calibre-web 有获取元数据的功能,但是由于网络问题,不能通过 google 等获取数据,进而导致卡死。我选择把 /app/calibre-web/cps/metadata_provider/ 中的几个文件全部删掉,仅保留 douban api。
Server 配置
ddns-go
由于一些原因,我需要使用 ddns-go 来将 server 暴露到公网。跟随 ddns-go 文档进行安装很容易,不阐述。
acme
acme.sh 是一个很好的 acme 实现,能够获取、更新证书。同时,为了让它每次自动更新证书后重启 nginx ,需要给当前用户无密码执行 nginx -s reload 的权限。
- 主 wiki: https://github.com/acmesh-official/acme.sh/wiki/说明
- 无密码 nginx -s reload https://ruby-china.org/topics/31983
nginx
80 端口不生效
原因是 nginx 默认配置中指定了 default_server[3], 比未指定 server_name 的 server 配置高。在 80 端口中,我们通常只进行到 https 端口的跳转,可以将其设为 default_server, 或者选择用 server_name 列出所有可能的 server。
nginx
server {
listen 80 default_server;
rewrite ^(.*)$ https://$host$1;
}或
nginx
server {
listen 80;
server_name 1.example.com;
server_name 2.example.com;
rewrite ^(.*)$ https://$host$1;
}子路径反向代理
https://blog.csdn.net/qq_44273583/article/details/105437177