
BookOrbit is a self-hosted, open-source library and reading platform for ebooks, audiobooks, and comics. It offers built-in multi-format readers, automated metadata management, Kobo and KOReader sync, multi-user support with SSO, private OPDS catalogs, and rich reading analytics, all with simple Docker deployment and no subscription. In this step by step guide I will show you how to install BookOrbitĀ on your UGREEN NAS using Docker & Dockhand.
This guide works perfectly with the latest BookOrbit v2.3.0Ā release.
STEP 1
Please Support My work by Making a Donation.
STEP 2
InstallĀ Dockhand using my step by step guide. If you already have Dockhand installed on your UGREEN NAS, skip this STEP. Attention: Make sure you have installed the latest Dockhand version.
STEP 3
ā ļøMandatory: Enable HTTPS on your UGREEN NAS.
STEP 4
Create a new hostname on the noip website using your noip account. For example, I have created mariusorbitĀ as Host and I use the free ddns.net domain. In the IP Address area, type in your own IPV4 IP address from your ISP, then click Create. Follow the instructions in the image below.

STEP 5
ā ļøMandatory: Add Read & Write Permissions to the Docker Folder.
STEP 6
Go toĀ Files and open the docker folder. Inside the docker folder, create one new folder and name itĀ bookorbit. Follow the instructions in the image below.
Note: Be careful to enter only lowercase, not uppercase letters.

STEP 7
Now create three new folders inside the bookorbit folder that you have previously created at STEP 6Ā and name them books, data, db. Follow the instructions in the image below.
Note: Be careful to enter only lowercase, not uppercase letters.

STEP 8
Populate your books folder that you have previously created at STEP 7 with your books. Follow the instructions in the image below.

STEP 9
Open your browser and type in http://ugreen-ip-address:3866 to connect to your Dockhand container. On the left sidebar, click Stacks then + Create. Follow the instructions in the image below.

STEP 10
In the Stack name field, type in bookorbit. ā ļøWarning: Type in the name in lowercase letters. The installation process can take up to a few seconds/minutes. It will depend on your Internet speed connection. Follow the instructions in the image below.
services:
bookorbit:
image: ghcr.io/bookorbit/bookorbit:latest
container_name: Bookorbit
healthcheck:
test: ["CMD", "node", "-e", "const p=process.env.PORT||3211;fetch('http://127.0.0.1:'+p+'/api/v1/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"]
interval: 30s
timeout: 5s
retries: 3
start_period: 20s
init: true
ports:
- 3211:3211
environment:
NODE_ENV: production
PORT: 3211
POSTGRES_HOST: bookorbit_db
POSTGRES_PORT: 5432
POSTGRES_USER: bookorbituser
POSTGRES_PASSWORD: bookorbitpass
POSTGRES_DB: bookorbit
JWT_SECRET: dOxZYTTZgXKMHkqLBIQVImayQXAVWdzGBPuFJKggzcgvgPJPXpWzqzKaUOIOGGIr
SETUP_BOOTSTRAP_TOKEN: dUTVUFgUlvbLBRyLtPMIsfFoCCvfwtgcDqfYPWqxHKGXLmdjWxTRTwtcVapaiMmG
APP_URL: https:/mariusorbit.ddns.net
CLIENT_URL: https://mariusorbit.ddns.net
PUID: 999
PGID: 10
LIBRARY_BROWSE_ROOT: /books
NODE_MAX_OLD_SPACE_SIZE: 2048
BOOKORBIT_FIX_PERMISSIONS: true
LOG_LEVEL: info
volumes:
- /volume1/docker/bookorbit/books:/books:rw
- /volume1/docker/bookorbit/data:/data:rw
read_only: true
tmpfs:
- /tmp
cap_drop:
- ALL
cap_add:
- CHOWN
- DAC_OVERRIDE
- FOWNER
- SETGID
- SETUID
security_opt:
- no-new-privileges:true
stop_grace_period: 30s
depends_on:
db:
condition: service_healthy
restart: on-failure:5
db:
image: pgvector/pgvector:pg18
container_name: Bookorbit-DB
hostname: bookorbit_db
healthcheck:
test: ["CMD-SHELL", 'pg_isready -U "bookorbituser" -d "bookorbit"']
interval: 10s
timeout: 5s
retries: 10
start_period: 20s
environment:
POSTGRES_USER: bookorbituser
POSTGRES_PASSWORD: bookorbitpass
POSTGRES_DB: bookorbit
PGDATA: /var/lib/postgresql/
volumes:
- /volume1/docker/bookorbit/db:/var/lib/postgresql:rw
restart: on-failure:5
Note: Before you paste the code above in the Web editor area below, change the value for JWT_SECRET. (Generate your own Random 64 length JWT_SECRET.)
Note: Before you paste the code above in the Web editor area below, change the value for SETUP_BOOTSTRAP_TOKEN. (Generate your own Random 64 length SETUP_BOOTSTRAP_TOKEN.) ā ļøNote: You will need this Token later at STEP 15.
Note: Before you paste the code above in the Web editor area below, change the value for APP_URL and type in your own NO IP DDNS withĀ https:// at the beginning that you have previously created at STEP 4.
Note: Before you paste the code above in the Web editor area below, change the value for CLIENT_URL and type in your own NO IP DDNS withĀ https:// at the beginning that you have previously created at STEP 4.
Note: Before you paste the code above in the Web editor area below, change the value numbers for PUIDĀ andĀ PGIDĀ with your own values. (Follow my step by step guide on how to do this.)

STEP 11
Open your Nginx Proxy Manager container that you have previously installed at STEP 3. Click Add Proxy Host. A new pop up window will open. Add the following details:
Domain Names: Type in your own noip domain name that you have previously created at STEP 4.
Scheme: http
Forward Hostname/IP: Type in the local NAS IP of your UGREEN NAS.
Forward Port: Type in the BookOrbit local Port that is 5485
Check Block Common Exploits
Check Websockets Support
Click the SSL tab. Follow the instructions in the image below.

STEP 12
After you click the SSL tab, add the following details:
SSL Certificate: Request a new SSL Certificate
Check: Force SSL
Check: HSTS Enabled
Check: HTTP/2 Support
Click Save. Follow the instructions in the image below.

STEP 13
In the Proxy Hosts area, if everything goes right, you will see that your hostname has been generated. Click on it. Follow the instructions in the image below.

STEP 14
š¢Please Support My work by Making a Donation. Almost 99,9% of the people that install something using my guidesĀ forget to support my work, or justĀ ignoreĀ STEP 1. Iāve been very honest about this aspect of my work since the beginning: I donāt run any ADS, I donāt require subscriptions, paid or otherwise, I donāt collect IPs, emails, and I donāt have any referral links from Amazon or other merchants. I also donāt have any POP-UPs or COOKIES. I have repeatedly been told over the years how much I have contributed to the community. Itās something I love doing and have been honest about my passion since the beginning. But I also Need The Community to Support me Back to be able to continue doing this work.
STEP 15
Now open your browser and type in your HTTPS/SSL certificate like this https://yourname.ddns.netĀ In my case it’s https://mariusorbit.ddns.net If everything goes right, you will see the BookOrbit admin creation page. Type in your own details. Type in your Setup Token (SETUP_BOOTSTRAP_TOKEN) that you have previously added at STEP 10. Click Create administrator account. Follow the instructions in the image below.

STEP 16
Click + Create your first library. Follow the instructions in the image below.

STEP 17
Type in the name for your library. Click Continue. Follow the instructions in the image below.

STEP 18
Click Enter a path manually. Type in /books
Click Add Folder. Click Continue. Follow the instructions in the image below.

STEP 19
Click Continue. Follow the instructions in the image below.

STEP 20
Select your favorite scan method. Click Continue. Follow the instructions in the image below.

STEP 21
Click Continue. Follow the instructions in the image below.

STEP 22
Choose your favorite reading states. Click Continue. Follow the instructions in the image below.

STEP 23
Select your recurring library scans schedule. Click Continue. Follow the instructions in the image below.

STEP 24
Click Create library. Follow the instructions in the image below.

STEP 25
Your library at a glance!

STEP 26
At the top right of the page, click the palette icon to change your theme. Follow the instructions in the image below.

STEP 27
At the top right of the page, click the stats icon to see your BookOrbit application stats. Follow the instructions in the image below.

STEP 28
Your full stats at a glance!

šNote/Update/Container: How to Update Your Docker Containers on UGREEN NAS Using Portainer.
š³Note: How to Create Docker Shortcuts on Desktop.
šNote: How to Update Portainer to the latest version.
šNote: How to Clean Docker.
This post was updated on Tuesday / July 28th, 2026 at 12:21 AM