我这两天安装在线书库 calibre-web,但是被
apache2
的反向代理设置搞得十分恼火。在网上查了许多相关教程,还是一直失败。对于计算机门外汉来说,遇到“显而易见”的问题却不知道如何
debug,真是非常恼火的事情。好在今天灵机一动,找到了问题所在。完整的过程如下,本文所用系统环境为
Ubuntu LTS 20.04
。
先把本地的 calibre 数据库上传到服务器,假设路径设置为
/home/calibre_db/
sudo su ##以管理员身份运行 cd /home/ mkdir calibre_db chown -R www-data:www-data calibre_db/ ##赋予权限
同时,服务器端安装 calibre-web,假设路径设置为
/home/
:apt install git git clone https://github.com/janeczku/calibre-web.git cd calibre-web pip3 install --target vendor -r requirements.txt ##缺什么安装什么 nohup python3 cps.py ##设置后台运行
本地访问
http://服务器ip地址:8083
,将数据库设置为/home/calibre_db/
。默认的账号密码为admin
和admin123
,可点击右上角的头像,进行修改。谁没事输入
http://服务器ip地址:8083
呢?简直是又丑陋又太麻烦了。因此设置反向代理,即通过特定的域名代理局域网。以下假设代理域名为domain.com
,请自行解析域名到 ip 地址。apt install -y apache2 ##安装 apache2 vim /etc/apache2/sites-available/books.conf ##配置站点,名称随意,这里命名为 books
按
i
进入编辑模式,并输入<VirtualHost domain.com:80> ServerName domain.com ServerAlias domain.com </VirtualHost>
按
Esc
退出编辑,输入:wq
回车保存、退出。a2ensite books.conf ##使配置文件生效 systemctl reload apache2 ##重新加载 Apache 服务 a2enmod rewrite headers env dir mime ssl ##启用 ssl 模块 systemctl restart apache2 ##重启 Apache 服务
若出现问题,可通过以下命令检查语法错误
cd /etc/apache2 apache2ctl configtest
安装 Letscrypt 生成 SSL 证书(即设置网址为 https)
apt install certbot python3-certbot-apache certbot --apache -d domian.com ##其中一个选项选择2 redirect,实现 http 到 https 跳转。 certbot renew --dry-run ##测试证书是否会自动续约
上步会在
/etc/apache2/sites-available/
路径下生成books-le-ssl.conf
配置文件。a2enmod proxy proxy_balancer proxy_http ##加载反向代理模块 vim /etc/apache2/sites-available/books-le-ssl.conf
在
</VirtualHost>
前输入以下内容,实现反向代理ProxyPreserveHost On ProxyRequests Off <Proxy *> Order allow,deny Allow from all </Proxy> ProxyPass / http://服务器ip地址:8083/ ProxyPassReverse / http://服务器ip地址:8083/
保存、退出,重载 apache2:
systemctl reload apache2
。本地浏览器访问
domain.com
,成功!其他功能可在右上角的管理
中进行设置,例如打开启用上传
。(可选)。进一步安装 calibre 可以设置在线书籍格式转换。具体做法为,在网站的
基本配置/外部二进制/转换工具路径
中填入/usr/bin/ebook-convert
,并勾选使用calibre的电子书转换器
。但我更建议,在本地的 calibre 软件中管理数据库,然后同步到服务器中。
以上步骤应该是足够详细了,毕竟我已经受够了“显而易见”,甚至各种“雷同”的教程。当然我所遇到的问题,事后想想其实也很简单。我猜想问题在于,我错把第
6 步中的反向代理命令输入到了 books.conf
文件中。这是
80(http)端口的配置文件,效果是 http 代理 8083 端口,而我同时又设置了
80 端口跳转到 443( https)端口,导致跳转后的 https 无法正确代理
8083。所以合理的顺序应该是, http 先跳转到 https,然后 https 代理
8083,也就是配置 books-le-ssl.conf
文件。
折腾了这么久,是时候好好犒劳一下自己了。所以,第 9 步也是最重要的一步是,马上开始看书。

后续:我发现,无论是 COPS 还是 calibre-web,阅读体验都远不如本地阅读器。我想问题的根源是我所用的服务器配置太低了,暴击!不管怎样,有个在线御书房还是很方便的。