pyShelf 0.6.0
Terminal based ebook server. Open source & Lightweight.
Having used Calibre for hosting my eBook collection in the past, I found myself frustrated having to install X on my server, or manage my library externally, Thus I have decided to spin up my own.
You dont need an X server to host a website, or your Movie & Tv collection, so why should you need one to host ebooks?
Other solutiions require you to have access to an X server to at the very least generate your book database, pyShelf doesnt.We aim to provide a fully featured ebook server with minimal requirements, and no reliance on X whatsoever.
Follow or influence development @
Discord | IRC | Matrix.org
Current Features
- Recursive Scanning
- PostgreSql Library
- Django based frontend
- Basic seaching via a SearchVector of author, title, & file_name fields.
- Ebook Downloading
- Collections
- User System
Currently Supported Formats
- epub
- mobi
0.6.0 Patch Notes.
New Features
- .mobi Support
- Result set ordering
- You can now choose to order your results:
- Title
- Author
- Categories
- & Tags
- You can now choose to order your results:
- Reworked UI/UX
- More intuitive, less intrusive, & stays out of the way. caveat: I need to rework the placement of the next & previous page controls. While they do remain usable, I intend to have them follow the users position on the page in future releases.
- New controls
- Sort
- Ascending / Descending result set
- Display of the result set count, and your current position in the set.
- A pop over layer to hold things like
- User login & Registration
- Control panel
- Book details
Installation & Support Information
Installation
This project is targeted towards Network Administrators, and home enthusiasts whom I assume will know how to setup a Django app, and a PostgreSQL server. For those unfamiliar with the required setup please see the docker section below.
Pre-req Dependencies
- gcc
- python3
- pip
setup configurations as discussed in SUPPORT.md
Once your environment is ready very little is required to get the system up and running:
From the main directory
pip install -r requirements.txt
./configure
cd src
python manage.py makemigrations
python manage.py makemigration interface
python manage.py migrate
python manage.py migrate interface
cd ..
./importBooks
uwsgi --ini uwsgi.ini
Browse to the site as defined in your apache | nginx config
Running via the Django test server might be possible, albeit not recomended.
Docker
The official Docker image for pyShelf is pyshelf/pyshelf. The easiest way to get pyShelf running is through docker-compose. Here is an example docker-compose.yml:
version: "3.7"
services:
db:
image: "postgres"
environment:
- "POSTGRES_PASSWORD=pyshelf"
- "POSTGRES_USER=pyshelf"
- "POSTGRES_DB=pyshelf"
volumes:
- "db_data:/var/lib/postgresql/data/"
pyshelf:
image: "pyshelf/pyshelf"
ports:
- "8080:8000"
volumes:
- "${LOCAL_BOOK_DIR}:/books"
depends_on:
- db
volumes:
db_data:
You'll also need a .env file wich sets the LOCAL_BOOK_DIR variable, for example:
LOCAL_BOOK_DIR=/home/someone/books
The Docker image is still new, so there could still be some issues and missing features. Feel free to create a bug-issue when you encounter a bug. Development of the Docker image is discussed in https://github.com/th3r00t/pyShelf/pull/53 . Currently the database needs to be PostgreSQL with the account details shown in the example docker-compose.yml. It should become db agnostic in the future.
In Progress
Organizational tools.
- Automated Collections
- Manual Collections
- Books Removal
- Access Restrictions
- Metadata Manipulation
- Others?
Improved cover image storage, and acquisition.
OPDS Support
Support for other formats
- .mobi
- .cbz
- .zip (Zipped book folders, is this a new idea? (Consider storing your library folders zipped and retrieving a book on demand))
Future Goals
Terminal Backend for catalogue maintenance
Development
pre-commitBefore developing, runpre-commit installSee the documentation for more information.- 'Doxygen' Any changes to source should be documented and have run doxygen doxygen.conf prior to commiting.
- 'sem-ver' Before advancing version numbers be sure to set PROJECT_NUMBER in doxygen.conf accordingly.

