One place for hosting & domains

      eBook

      Understanding the DOM — Document Object Model eBook


      Download the Complete eBook!

      Understanding the DOM — Document Object Model eBook in EPUB format

      Understanding the DOM — Document Object Model eBook in PDF format

      Introduction to the eBook

      JavaScript is the de facto programming language of the web, but the language itself does not include any built-in method for working with input/output (I/O), such as graphics display and sound. Instead, the web browser provides an API for accessing the HTML document in a tree structure known as the Document Object Model (DOM). The combination of JavaScript and the DOM is what allows us to create interactive, dynamic websites.

      Many modern frameworks, such as React, Vue, and Svelte abstract away much of the DOM from the developer, but frameworks also use the DOM under the hood. The JavaScript library jQuery was also created to make working with the DOM easier, but the modern development practice is to work with the DOM directly. In order to be a proficient web developer, having a deep understanding of what the DOM is and how to work with it is essential. The goal of this book is to provide a base understanding of the DOM, as well as explore examples of the most common and useful methods for interacting with the DOM.

      This book is based on the Understanding the DOM tutorial series found on the DigitalOcean Community. The topics that it covers include:

      • The DOM and DOM tree structure
      • How to access, traverse, and modify nodes and elements in the DOM
      • How to modify attributes, classes, and styles in the DOM
      • Use events to make interactive, dynamic websites

      Each chapter is self-contained and can be followed independently of the others. However, if you are not yet familiar with the concept of the DOM and DOM tree, it is recommended that you read the introductory chapters first.

      Download the eBook

      You can download the eBook in either the EPUB or PDF format by following the links below.

      Download the Complete eBook!

      Understanding the DOM — Document Object Model eBook in EPUB format

      Understanding the DOM — Document Object Model eBook in PDF format

      If you’d like to learn more about JavaScript, visit the DigitalOcean Community’s JavaScript section. You can follow along with the How to Code in JavaScript series for a directed learning experience.



      Source link

      How To Create a calibre Ebook Server on Ubuntu 20.04


      The author selected the COVID-19 Relief Fund to receive a donation as part of the Write for DOnations program.

      Introduction

      calibre is a free and open source ebook manager that’s well known for its cross-platform desktop application. You can use calibre to manage your ebook library on a single device, but the application also includes a powerful server component. Setting up an ebook server allows you to:

      • Access your books from anywhere in the world
      • Easily transfer your books to mobile devices
      • Share books with your friends and family

      The calibre Content server includes a backend for serving your books and a basic front end for searching through your library, downloading individual titles, or even reading your books directly through a web browser. The server also offers a basic mobile interface that works with a wide variety of devices, including the basic browsers that ship with many e-ink readers such as Kindle and Kobo.

      In this tutorial, you’ll set up and use the calibre Content server on Ubuntu 20.04. Specifically, you will download and install the calibre server, configure calibre as a service so that it starts automatically when your server reboots, and add books to your library using command line tools. You will also encounter options to set up a cron job to automatically add new books to your library from a specific directory, add authentication to your server so that only you can access it, and add a free SSL/TLS certificate to serve your library over HTTPS for extra security.

      Warning: As with all creative content, it is important to respect the copyright licenses associated with materials created by others. This tutorial uses public domain books legally downloaded from Project Gutenberg, which holds over 60,000 free ebooks.

      Prerequisites

      • A server running Ubuntu 20.04 with a sudo user and a firewall. You can follow our Initial Server Setup Guide for instructions.
      • Step 7 includes the option to secure your calibre Content server with an SSL certificate. If you wish to do so, you will require a domain name with an available A record. If you are using a DigitalOcean Droplet, you can follow our guide on [How To Point to DigitalOcean Nameservers From Common Domain Registrars](digitalocean.com/community/tutorials/how-to-point-to-digitalocean-nameservers-from-common-domain-registrars) for instructions.

      Step 1 — Downloading and Installing the calibre Content Server

      Although calibre exists in Ubuntu’s software repositories, the version there often lags behind the latest release. Therefore, the official calibre documentation recommends that you install it from a binary hosted on their site instead.

      First, install some necessary dependencies:

      • sudo apt update && sudo apt install -y libfontconfig libgl1-mesa-glx

      Now download and install the calibre server.

      • wget https://download.calibre-ebook.com/linux-installer.sh

      Inspect the contents of the script:

      You can scroll up and down with the k and j keys and hit q to get back to your terminal when you are done.

      Now execute the script to install calibre:

      • sudo sh linux-installer.sh

      calibre expects a desktop environment but it will not find one on a headless server, so you will see some warnings about desktop integration failing. It is safe to ignore these because we will control calibre entirely via its command line tools and web interface.

      Now that we have installed calibre, we can begin to explore its functionality.

      Step 2 — Creating a Library and Adding Your First Book

      To explore calibre’s functionality, let’s download an .epub or .mobi ebook. We’ll use A Christmas Carol by Charles Dickens from Project Gutenberg as an example. Project Gutenberg maintains a massive repository of free, public domain literature and is a great resource for ebooks.

      Run the following command to download this book to your server:

      • wget http://www.gutenberg.org/ebooks/46.kindle.noimages -O christmascarol.mobi

      Now create a directory that calibre can use as your ebook library:

      And add the book you just downloaded to your new library using the calibredb command:

      • calibredb add *.mobi --with-library calibre-library/

      You will see the following output:

      Output

      Added book ids: 1

      With a book added to your library, you can now start calibre and explore the application.

      Step 3 — Running the calibre Content Server and Viewing Your Library

      With calibre installed and a book downloaded, we are ready to explore the application’s user interface. But before we access the calibre Content server in a web browser, we need to make sure that our server can accept traffic on port 8080, which is the default port for calibre. If you followed the initial server setup guide in the prerequisites section, then you enabled ufw, or Uncomplicated Firewall. You now need to allow port 8080 through the firewall.

      Use the following command to open port 8080:

      Check the status of ufw to make sure the port is open:

      You will see an output like this:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 8080 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 8080 (v6) ALLOW Anywhere (v6)

      Now run the following command to start the calibre content server:

      • calibre-server calibre-library

      calibre-server is the command used to start our server and calibre-library is the name of the directory we created earlier and told calibre to use as our library.

      You will see an output like this:

      calibre server listening on 0.0.0.0:8080
      OPDS feeds advertised via BonJour at: your_server_ip port: 8080
      

      From your local machine, visit your_server_ip:8080 (substituting your server’s IP address) and you will see the default calibre screen. Click on calibre-library and you will see the book that you added in the previous step.

      calibre server menu

      Hit Ctrl+C to stop the manual server process that you started.

      This method of running the calibre Content server works well, but you probably want your library to work all of the time, even after you close the SSH connection to your server. To make sure it always runs, even after rebooting your server, let’s turn the calibre Content server into a service.

      Step 4 — Creating a Service for the calibre Content Server

      To improve the usability of the calibre Content server, let’s replace our manual server process with a service that will start on boot.

      First, create a file called calibre-server.service in the directory /etc/sytemd/system/:

      • sudo nano /etc/systemd/system/calibre-server.service

      Now add the following configurations, which will start the calibre Content server on boot. Make sure to replace the highlighted text with your user and group:

      calibre-server.service

      ## startup service
      [Unit]
      Description=calibre content server
      After=network.target
      
      [Service]
      Type=simple
      User=sammy
      Group=sammy
      ExecStart=/opt/calibre/calibre-server /home/sammy/calibre-library --enable-local-write
      
      [Install]
      WantedBy=multi-user.target
      

      Here we tell our service to use the --enable-local-write flag when starting the server. When the server is running, you can’t use the calibredb command to add books as we did for A Christmas Carol directly. Instead, you have to do this “through” the running server, as we’ll see in a bit, and this means that the server needs permission to write new files to disk. This flag allows it to do so as long as it receives the request locally.

      Save and close the file.

      Now enable the service and start it:

      • sudo systemctl enable calibre-server
      • sudo systemctl start calibre-server

      Reboot your server:

      Wait a few minutes and then visit http://your_server_ip:8080 again in your local web browser to ensure that the calibre Content server booted automatically.

      Now let’s add some authentication to our application.

      Step 5 — (Optional) Adding User Authentication to the calibre Content Server

      You now have a fully functioning calibre Content server that you can access from any device. Currently, however, anyone who knows your server’s IP address can access your ebooks. You might not want this. Instead, let’s configure calibre’s built-in user management system so you can force visitors to authenticate with a username and password.

      First, SSH back into your server and stop calibre. This will allow us to manipulate calibre’s database directly:

      • sudo systemctl stop calibre-server

      Now start calibre’s user management script:

      • calibre-server --manage-users

      When prompted, choose to add a new user. Then select a username and strong password. You will see a final output message like this:

      Output

      User mycalibreuser added successfully!

      Now we need to make one small edit to our service.

      Reopen calibre-server.service:

      • sudo nano /etc/systemd/system/calibre-server.service

      To enable authentication, add the --enable-auth flag to the end of the line starting ExecStart. It should look like this:

      . . .
      ExecStart=/opt/calibre/calibre-server /home/sammy/calibre-library --enable-local-write --enable-auth
      . . .
      

      Save and close the file.

      Refresh the services daemon to rescan the services files, and start the calibre server again with:

      • sudo systemctl daemon-reload
      • sudo systemctl start calibre-server

      If you visit your library again, it should now prompt you for a username and password before allowing you to access it.

      There are more ways to add functionality to our calibre Content server. In the next step, we will add a cron job to automatically add downloaded books to our calibre library.

      Step 6 — (Optional) Automatically Adding Books to Your calibre Library

      It can be useful to set up a cron job that watches a specific directory and adds any books it finds to your calibre library. This way, you can download or upload books to this folder and they’ll automatically become available via the calibre web interface.

      Create a folder called books-to-add in your home directory and navigate inside:

      • mkdir ~/books-to-add
      • cd ~/books-to-add

      Download a new book into this directory. Use the following command to download Alice in Wonderland from Project Gutenberg:

      • wget https://www.gutenberg.org/ebooks/11.epub.images -o alice.epub

      Now open your crontab:

      Here we will set up a script to add all files in this directory to calibre and then delete them (adding books to calibre creates a copy of the files in your library directory, so we can remove the originals once they are added.)

      Add the following content:

      /var/spool/cron/crontabs/your_username

      */5 * * * * calibredb add /home/sammy/books-to-add/ -r --with-library http://localhost:8080#calibre-library --username mycalibreuser --password StrongPassword! && rm -r /home/sammy/books-to-add/*
      

      Save and close the file.

      This will run every 5 minutes, so you shouldn’t have to wait long for your new book to show up in the web interface. Wait a few minutes and then reload the library in your local web browser. Your new book will appear next to A Christmas Carol.

      Step 7 — (Optional) Installing Apache2 and Serving Your Library over HTTPS

      You need a username and password to access your library, but it’s not really secure because you are serving it over HTTP and sending your username and password unencrypted every time you authenticate. A more secure option is to ensure all traffic gets encrypted using HTTPS. If you own a domain name you can point this to your server and install a free SSL certificate using Let’s Encrypt. (You can also use a subdomain like ebooks.your_domain.)

      Installing and Configuring Apache2

      We’ll use the webserver Apache2 as a reverse proxy for calibre. Previously we had to append the port number :8080 when we visited our library because that’s the default port that calibre runs on. We’ll now set up Apache2 to listen to requests on port 80 (the default port for HTTP traffic), proxy requests to the locally running calibre server on :8080, and serve these to the end user transparently so that they won’t need to worry about specifying the port number. We will then secure all our traffic on port 443 with an SSL certificate.

      Install Apache2 and enable the proxy modules we need with the following commands:

      • sudo apt install -y apache2
      • sudo a2enmod proxy proxy_http

      Now make sure that your server allows traffic on ports 80 and 443. Close port 8080, too:

      • sudo ufw allow 'Apache Full'
      • sudo ufw delete allow 8080

      Next, create and open a file at /etc/apache2/sites-available/your_domain.conf:

      • sudo nano /etc/apache2/sites-available/your_domain.conf

      Add the following configurations, which will link your domain to the calibre server:

      /etc/apache2/sites-available/your_domain.conf

      LoadModule proxy_module modules/mod_proxy.so
      LoadModule proxy_http_module modules/mod_proxy_http.so
      
      <VirtualHost *:80>
          ServerName your_domain
          AllowEncodedSlashes On
          ProxyPreserveHost On
          ProxyPass "/"  "http://localhost:8080/"
      </VirtualHost>
      

      Finally, enable this new site configuration:

      • sudo a2ensite your_domain.conf
      • systemctl reload apache2

      Visit http://your_domain in a browser to verify that the calibre Content server loads. Apache is now serving your site.

      Installing Certbot and Configuring an SSL Certificate

      As a final step, let’s secure all our traffic using Certbot.

      First, install Certbot:

      • sudo snap install --classic certbot

      Now run Certbot:

      The Certbot program will take you through a series of prompts to install a certificate.

      • Enter your email address when prompted
      • Enter A to agree to the terms and conditions when prompted
      • Choose Y or N when prompted to share your email address with the EFF
      • Choose 1 when prompted about which domain you want the certificate for (there should only be one)

      Upon completion, you will see a congratulations message.

      You can now access your library securely at https://yourdomain.

      Conclusion

      In this tutorial, you set up a calibre ebook server. You turned it into a service so that it would start when your server boots, added a cron job to automatically find and add new books to your library, and set up authentication and an SSL certificate to secure it.

      To extend the project, you can add more books from your personal library or from Project Gutenberg, Standard Ebooks, or elsewhere. Remember to always respect any copyright laws associated with your content library.



      Source link

      How To Create a calibre Ebook Server on Ubuntu 18.04


      The author selected the COVID-19 Relief Fund to receive a donation as part of the Write for DOnations program.

      Introduction

      calibre is a free and open source ebook manager that’s well known for its cross-platform desktop application. You can use calibre to manage your ebook library on a single device, but the application also includes a powerful server component. Setting up an ebook server allows you to:

      • Access your books from anywhere in the world
      • Easily transfer your books to mobile devices
      • Share books with your friends and family

      The calibre Content server includes a backend for serving your books and a basic front end for searching through your library, downloading individual titles, or even reading your books directly through a web browser. The server also offers a basic mobile interface that works with a wide variety of devices, including the basic browsers that ship with many e-ink readers such as Kindle and Kobo.

      In this tutorial, you’ll set up and use the calibre Content server on Ubuntu 18.04. Specifically, you will download and install the calibre server, configure calibre as a service so that it starts automatically when your server reboots, and add books to your library using command line tools. You will also encounter options to set up a cron job to automatically add new books to your library from a specific directory, add authentication to your server so that only you can access it, and add a free SSL/TLS certificate to serve your library over HTTPS for extra security.

      Warning: As with all creative content, it is important to respect the copyright licenses associated with materials created by others. This tutorial uses public domain books legally downloaded from Project Gutenberg, which holds over 60,000 free ebooks.

      Prerequisites

      Step 1 — Downloading and Installing the calibre Content Server

      Although calibre exists in Ubuntu’s software repositories, the version there often lags behind the latest release. Therefore, the official calibre documentation recommends that you install it from a binary hosted on their site instead.

      First, install some necessary dependencies:

      • sudo apt update && sudo apt install -y libfontconfig libgl1-mesa-glx

      Now download and install the calibre server.

      • wget https://download.calibre-ebook.com/linux-installer.sh

      Inspect the contents of the script:

      You can scroll up and down with the k and j keys and hit q to get back to your terminal when you are done.

      Now execute the script to install calibre:

      • sudo sh linux-installer.sh

      calibre expects a desktop environment but it will not find one on a headless server, so you will see some warnings about desktop integration failing. It is safe to ignore these because we will control calibre entirely via its command line tools and web interface.

      After installation, make sure to set the ownership of the ~./config/ file to your user and group and not to root. This is important for calibre to function properly.

      Change ownership, replacing the highlighted text with your sudo user and group:

      • sudo chown sammy:sammy ~/.config/

      Now that we have installed calibre, we can begin to explore its functionality.

      Step 2 — Creating a Library and Adding Your First Book

      To explore calibre’s functionality, let’s download an .epub or .mobi ebook. We’ll use A Christmas Carol by Charles Dickens from Project Gutenberg as an example. Project Gutenberg maintains a massive repository of free, public domain literature and is a great resource for ebooks.

      Run the following command to download this book to your server:

      • wget http://www.gutenberg.org/ebooks/46.kindle.noimages -O christmascarol.mobi

      Now create a directory that calibre can use as your ebook library:

      And add the book you just downloaded to your new library using the calibredb command:

      • calibredb add *.mobi --with-library calibre-library/

      You will see the following output:

      Output

      Added book ids: 1

      With a book added to your library, you can now start calibre and explore the application.

      Step 3 — Running the calibre Content Server and Viewing Your Library

      With calibre installed and a book downloaded, we are ready to explore the application’s user interface. But before we access the calibre Content server in a web browser, we need to make sure that our server can accept traffic on port 8080, which is the default port for calibre. If you followed the initial server setup guide in the prerequisites section, then you enabled ufw, or Uncomplicated Firewall. You now need to allow port 8080 through the firewall.

      Use the following command to open port 8080:

      Check the status of ufw to make sure the port is open:

      You will see an output like this:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 8080 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 8080 (v6) ALLOW Anywhere (v6)

      Now run the following command to start the calibre content server:

      • calibre-server calibre-library

      calibre-server is the command used to start our server and calibre-library is the name of the directory we created earlier and told calibre to use as our library.

      You will see an output like this:

      calibre server listening on 0.0.0.0:8080
      OPDS feeds advertised via BonJour at: your_server_ip port: 8080
      

      From your local machine, visit your_server_ip:8080 (substituting your server’s IP address) in a web browser and you will see the default calibre screen. Click on calibre-library and you will see the book that you added in the previous step.

      calibre server menu

      Hit Ctrl+C to stop the manual server process that you started.

      This method of running the calibre Content server works well, but you probably want your library to work all of the time, even after you close the SSH connection to your server. To make sure it always runs, even after rebooting your server, let’s turn the calibre Content server into a service.

      Step 4 — Creating a Service for the calibre Content Server

      To improve the usability of the calibre Content server, let’s replace our manual server process with a service that will start on boot.

      First, create a file called calibre-server.service in the directory /etc/sytemd/system/:

      • sudo nano /etc/systemd/system/calibre-server.service

      Now add the following configurations, which will start the calibre Content server on boot. Make sure to replace the highlighted text with your user and group:

      calibre-server.service

      ## startup service
      [Unit]
      Description=calibre content server
      After=network.target
      
      [Service]
      Type=simple
      User=sammy
      Group=sammy
      ExecStart=/opt/calibre/calibre-server /home/sammy/calibre-library --enable-local-write
      
      [Install]
      WantedBy=multi-user.target
      

      Here we tell our service to use the --enable-local-write flag when starting the server. When the server is running, you can’t use the calibredb command to add books as we did for A Christmas Carol. Instead, you have to do this through the running server, and this means that the server needs permission to write new files to disk. This flag allows it to do so as long as it receives the request locally.

      Save and close the file.

      Now enable the service and start it:

      • systemctl enable calibre-server
      • systemctl start calibre-server

      Reboot your server:

      Wait a few minutes and then visit http://your_server_ip:8080 again in your local web browser to ensure that the calibre Content server booted automatically.

      The calibre Content server will now check for and add books every five minutes. Now let’s add some authentication to our application.

      Step 5 — (Optional) Adding User Authentication to the calibre Content Server

      You now have a fully functioning calibre Content server that you can access from any device. Currently, however, anyone who knows your server’s IP address can access your ebooks. You might not want this. Instead, let’s configure calibre’s built-in user management system so you can force visitors to authenticate with a username and password.

      First, SSH back into your server and stop calibre. This will allow us to manipulate calibre’s database directly:

      • systemctl stop calibre-server

      Now start calibre’s user management script:

      • calibre-server --manage-users

      When prompted, choose to add a new user. Then select a username and strong password. You will see a final output message like this:

      Output

      User mycalibreuser added successfully!

      Now we need to make one small edit to our service.

      Reopen calibre-server.service:

      • sudo nano /etc/systemd/system/calibre-server.service

      To enable authentication, add the --enable-auth flag to the end of the line starting ExecStart. It should look like this:

      . . .
      ExecStart=/opt/calibre/calibre-server /home/sammy/calibre-library --enable-local-write --enable-auth
      . . .
      

      Save and close the file.

      Refresh the services demon to rescan the services files, and start the calibre server again with:

      • systemctl daemon-reload
      • systemctl start calibre-server

      If you visit your library again, it should now prompt you for a username and password before allowing you to access it.

      There are more ways to add functionality to our calibre Content server. In the next step, we will add a cron job to automatically add downloaded books to our calibre library.

      Step 6 — (Optional) Automatically Add Books to Your calibre Library

      It can be useful to set up a cron job that watches a specific directory and adds any books it finds to your calibre library. This way, you can download or upload books to this folder and they’ll automatically become available via the calibre web interface.

      Create a folder called books-to-add in your home directory and navigate inside:

      • mkdir ~/books-to-add
      • cd ~/books-to-add

      Download a new book into this directory. Use the following command to download Alice in Wonderland from Project Gutenberg:

      • wget https://www.gutenberg.org/ebooks/11.epub.images -o alice.epub

      Now open your crontab:

      Here we will set up a script to add all files in this directory to calibre and then delete them (adding books to calibre creates a copy of the files in your library directory, so we can remove the originals once they are added).

      Add the following content:

      /var/spool/cron/crontabs/your_username

      */5 * * * * calibredb add /home/sammy/books-to-add/ -r --with-library http://localhost:8080#calibre-library --username mycalibreuser --password StrongPassword! && rm -r /home/sammy/books-to-add/*
      

      Save and close the file.

      This will run every 5 minutes, so you shouldn’t have to wait long for your new book to show up in the web interface. Wait a few minutes and then reload the library in your local web browser. Your new book will appear next to A Christmas Carol.

      Step 7 — (Optional) Installing Apache2 and Serving Your Library over HTTPS

      You need a username and password to access your library, but it’s not really secure because you are serving it over HTTP and sending your username and password unencrypted every time you authenticate. A more secure option is to ensure all traffic gets encrypted using HTTPS. If you own a domain name you can point this to your server and install a free SSL certificate using Let’s Encrypt. (You can also use a subdomain like ebooks.your_domain.)

      Installing and Configuring Apache2

      We’ll use the webserver Apache2 as a reverse proxy for calibre. Previously we had to append the port number :8080 when we visited our library because that’s the default port that calibre runs on. We’ll now set up Apache2 to listen to requests on port 80 (the default port for HTTP traffic), proxy requests to the locally running calibre server on :8080, and serve these to the end user transparently so that they won’t need to worry about specifying the port number. We will then secure all our traffic on port 443 with an SSL certificate.

      Install Apache2 and enable the proxy modules we need with the following commands:

      • sudo apt install -y apache2
      • sudo a2enmod proxy proxy_http

      Now make sure that your server allows traffic on ports 80 and 443. Close port 8080, too:

      • sudo ufw allow 'Apache Full'
      • sudo ufw delete allow 8080

      Next, create and open a file at /etc/apache2/sites-available/your_domain.conf:

      • sudo nano /etc/apache2/sites-available/your_domain.conf

      Add the following configurations, which will link your domain to the calibre server:

      /etc/apache2/sites-available/your_domain.conf

      LoadModule proxy_module modules/mod_proxy.so
      LoadModule proxy_http_module modules/mod_proxy_http.so
      
      <VirtualHost *:80>
          ServerName your_domain
          AllowEncodedSlashes On
          ProxyPreserveHost On
          ProxyPass "/"  "http://localhost:8080/"
      </VirtualHost>
      

      Finally, enable this new site configuration:

      • sudo a2ensite your_domain.conf
      • systemctl reload apache2

      Visit http://your_domain in a browser to verify that the calibre Content server loads. Apache is now serving your site.

      Installing Certbot and Configuring an SSL Certificate

      As a final step, let’s secure all our traffic using Certbot.

      First, install Certbot:

      • sudo snap install --classic certbot

      Now run Certbot:

      The Certbot program will take you through a series of prompts to install a certificate.

      • Enter your email address when prompted
      • Enter A to agree to the terms and conditions when prompted
      • Choose Y or N when prompted to share your email address with the EFF
      • Choose 1 when prompted about which domain you want the certificate for (there should only be one)

      Upon completion, you will see a congratulations message.

      You can now access your library securely at https://your_domain.

      Conclusion

      In this tutorial, you set up a calibre ebook server. You turned it into a service so that it would start when your server boots, added a cron job to automatically find and add new books to your library, and set up authentication and an SSL certificate to secure it.

      To extend the project, you can add more books from your personal library or from Project Gutenberg, Standard Ebooks, or elsewhere. Remember to always respect any copyright laws associated with your content library.



      Source link