Setting up a Calibre library server

The Calibre library server is a great way to store your e-books. It allows you to:

  • Share your books with others.
  • Easily transfer your books between devices and access them from anywhere.
  • Installation

    Install the Calibre package.

    apt install calibre
    mkdir /opt/calibre

    If you have an already existing library on your computer, you can use rsync to upload it.

    On client:

    rsync -r ~/Documents/your_library root@example.org:/opt/calibre/

    Or create a library and add a book to it.

    cd /opt/calibre
    calibredb add book.epub --with-library your_library

    Add a new user.

    calibre-server --manage-users

    Creating a service

    Create a new file /etc/systemd/system/calibre-server.service and add the following:

    [Unit]
    Description=Calibre library server
    After=network.target
    
    [Service]
    Type=simple
    User=root
    Group=root
    ExecStart=/usr/bin/calibre-server --enable-auth --enable-local-write /opt/calibre/your_library
    
    [Install]
    WantedBy=multi-user.target
    

    Issue systemctl daemon-reload to apply the changes.

    Enable and start the service.

    systemctl enable calibre-server
    systemctl start calibre-server

    A reverse proxy with Nginx

    Create a new file /etc/nginx/sites-available/calibre and enter the following:

    server {
    	listen 80;
    	server_name calibre.example.org;
    
        location /calibre {
            proxy_pass http://127.0.0.1:8080;
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Scheme $scheme;
            proxy_set_header X-Script-Name /calibre;
        }
    }

    Issue a Let's Encrypt certificate. Detailed instructions and additional information.

    certbot --nginx

    Now just go to calibre.example.org. The server will request an username and password.

    calibre

    After login you will see something like this.

    calibre

    By rflx -- website -- XMR: 48T5XpHTXAZ5Nn8YCypA4aWn1ffQLHJkFGDArXQB6cmrP6cqLY72cu7CR2iq2MmL5Ndu3d47e5MKjGpL4prYgdrTCFAHD9c