Calibre-Web on a VPS: Self-Hosted Ebook Library with OPDS, Kobo Sync, and User Management
Calibre-Web is a web interface for Calibre ebook libraries — it serves your existing Calibre library through a browser, OPDS feed (for Kindle, KOReader, and other e-readers), and direct Kobo device sync. If you have thousands of ebooks managed in Calibre, self-hosting Calibre-Web on a VPS makes your entire library accessible from any device, anywhere, with multi-user support and reading progress tracking.
What Calibre-Web Provides
- Web reader: Read EPUBs directly in browser using an integrated reader
- OPDS catalog: Connect any OPDS-compatible reader app (KOReader, Moon+ Reader, KyBook)
- Kobo sync: Native Kobo device integration — sync reading progress, download books wirelessly to your Kobo
- Send to Kindle: Email books directly to your Kindle device via Calibre’s send-to-device feature
- User management: Multiple users with individual reading lists and progress
- Book format conversion: Convert between EPUB, MOBI, AZW3, PDF on the server
- Metadata editing: Edit book metadata, covers, and tags through the web UI
Step 1: Upload Your Calibre Library
<code"># Copy your existing Calibre library to the VPS
# Calibre library folder contains: metadata.db + author/book subdirectories
rsync -avz --progress \
/Users/you/Calibre\ Library/ \
deploy@YOUR_VPS_IP:/opt/calibre/library/
# Or create a new empty library:
mkdir -p /opt/calibre/library
Step 2: Docker Compose Setup
<code">mkdir -p /opt/calibre && cd /opt/calibre nano docker-compose.yml
<code">version: '3.8'
services:
calibre-web:
image: lscr.io/linuxserver/calibre-web:latest
container_name: calibre-web
restart: always
ports:
- "127.0.0.1:8083:8083"
environment:
- PUID=1000
- PGID=1000
- TZ=UTC
- DOCKER_MODS=linuxserver/mods:universal-calibre # Enables format conversion
volumes:
- ./config:/config # Calibre-Web configuration database
- ./library:/books # Your Calibre library
# Optional: add a second library mount
# - /opt/comics:/comics
<code">docker compose up -d docker compose logs -f calibre-web
Step 3: Nginx Reverse Proxy
<code">sudo nano /etc/nginx/sites-available/calibre
<code">server {
listen 80;
server_name books.yourdomain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name books.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/books.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/books.yourdomain.com/privkey.pem;
client_max_body_size 200M; # For large ebook uploads
location / {
proxy_pass http://127.0.0.1:8083;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 120s;
}
}
<code">sudo ln -s /etc/nginx/sites-available/calibre /etc/nginx/sites-enabled/ sudo certbot --nginx -d books.yourdomain.com sudo systemctl reload nginx
Step 4: Initial Configuration
- Visit
https://books.yourdomain.com - Default login:
admin/admin123— change immediately - Initial Setup Wizard:
- Database Location:
/books(where metadata.db is) - Click “Save”
- Database Location:
- Admin → Edit User (admin) → change password, set email
Step 5: Configure OPDS for E-Reader Apps
<code"># OPDS catalog URL: https://books.yourdomain.com/opds # In Calibre-Web Admin → Configuration: # Enable OPDS catalog: Yes # Require login for OPDS: Yes (recommended) # KOReader (recommended open-source e-reader app): # Search → OPDS Catalog → Add: # Name: My Library # URL: https://books.yourdomain.com/opds # Username: your_username # Password: your_password # Moon+ Reader Pro (Android): # Library → Add → OPDS → same settings # Kybook 3 (iOS): # Catalog → + → OPDS # URL: https://books.yourdomain.com/opds
Step 6: Kobo Device Sync
- Admin → Configuration → Feature Configuration → Enable Kobo sync: Yes
- Admin → Edit User → your account → Kobo Sync Token → Generate token
- On Kobo device: Settings → My Account → Advanced → Add account → enter URL:
https://books.yourdomain.com/kobo/YOUR_TOKEN - Kobo connects, downloads books, and syncs reading progress automatically
Step 7: Email Books to Kindle
<code"># Admin → Configuration → Email Server: # SMTP hostname: email-smtp.us-east-1.amazonaws.com (SES) # SMTP port: 587 # From: your@email.com (verified in SES) # Username/Password: SES SMTP credentials # Admin → Configuration → Kindle Email: # Allowed domains: @kindle.com, @free.kindle.com # User → Edit Account → Kindle Email: your-kindle@kindle.com # In Calibre-Web: book → Send to Kindle
Managing Your Library
<code"># Add books via web UI: # Admin → Upload → select EPUB, PDF, MOBI, etc. # Bulk add books via Calibre desktop app: # Connect desktop Calibre to the same library folder # Add books in Calibre → they appear in Calibre-Web on next refresh # Trigger metadata refresh: # Admin → Tasks → Reconnect Database # Convert formats via Calibre-Web (requires DOCKER_MODS): # Book detail page → Convert Book → select output format
Getting Started
Calibre-Web runs on 100–200 MB RAM — it fits comfortably on a 1 GB Ubuntu VPS at VPS.DO alongside other services. The main storage requirement is your ebook library itself — a 10,000-book EPUB library typically uses 20–50 GB. NVMe storage provides fast book downloads and format conversion. For individuals and families with large Calibre libraries, self-hosted Calibre-Web eliminates the need for cloud ebook services while enabling access from any device.
Conclusion
Calibre-Web transforms your local Calibre library into a multi-device, multi-user ebook server — accessible from browsers, OPDS-compatible e-reader apps, and Kobo devices directly. The Kobo sync integration is particularly valuable: open your Kobo, connect to your library, and wirelessly download any book from your collection. For book lovers managing large Calibre libraries, self-hosting Calibre-Web on a VPS provides private, unlimited access to your collection from anywhere.