安装 Calibre-Web 并设置 apache2 反向代理

我这两天安装在线书库 calibre-web,但是被 apache2 的反向代理设置搞得十分恼火。在网上查了许多相关教程,还是一直失败。对于计算机门外汉来说,遇到“显而易见”的问题却不知道如何 debug,真是非常恼火的事情。好在今天灵机一动,找到了问题所在。完整的过程如下,本文所用系统环境为 Ubuntu LTS 20.04

  1. 先把本地的 calibre 数据库上传到服务器,假设路径设置为 /home/calibre_db/

    sudo su ##以管理员身份运行
    cd /home/
    mkdir calibre_db
    chown -R www-data:www-data calibre_db/ ##赋予权限
  2. 同时,服务器端安装 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 ##设置后台运行
  3. 本地访问 http://服务器ip地址:8083,将数据库设置为 /home/calibre_db/。默认的账号密码为 adminadmin123,可点击右上角的头像,进行修改。

  4. 谁没事输入 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
  5. 安装 Letscrypt 生成 SSL 证书(即设置网址为 https)

    apt install certbot python3-certbot-apache
    certbot --apache -d domian.com ##其中一个选项选择2 redirect,实现 http 到 https 跳转。
    certbot renew --dry-run ##测试证书是否会自动续约
  6. 上步会在 /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

  7. 本地浏览器访问 domain.com,成功!其他功能可在右上角的管理中进行设置,例如打开启用上传

  8. (可选)。进一步安装 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,阅读体验都远不如本地阅读器。我想问题的根源是我所用的服务器配置太低了,暴击!不管怎样,有个在线御书房还是很方便的。


陈 华
2020 / 04 / 28