Sopds
Simple opds catalog
Install / Use
/learn @mitshel/SopdsREADME
SimpleOPDS Catalog
Author: Dmitry V.Shelepnev
Version 0.47-devel
Инструкция на русском языке: README_RUS.md
1. Simple installation of SimpleOPDS (by using sqlite3 database)
1.1 Installing the project You can download the archive with the project from www.sopds.ru, or from github.com with the following command:
git clone https://github.com/mitshel/sopds.git
1.2 Dependencies.
- Requires Python at least version 3.4
- Django 1.10
- Pillow 2.9.0
- apscheduler 3.3.0
- django-picklefield
- lxml
- python-telegram-bot 10
The following dependencies should be established for the project:
yum install python3 # setup command for RHEL, Fedora, CentOS
python3 -m pip install -r requirements.txt
1.3 We initialize the database and fill in the initial data (genres)
python3 manage.py migrate
python3 manage.py sopds_util clear
1.4 Creating a Superuser
python3 manage.py createsuperuser
1.5 We adjust the path to your catalog with books and, if necessary, switch the interface language to English
python3 manage.py sopds_util setconf SOPDS_ROOT_LIB 'Path to the directory with books'
python3 manage.py sopds_util setconf SOPDS_LANGUAGE en-EN
1.6 Launch the SCANNER server (optional, required for automated periodic re-scanning of the collection) Please note that the default settings specify a periodic scan start 2 times a day 12:00 and 0:00.
python3 manage.py sopds_scanner start --daemon
1.7 Starting the built-in HTTP / OPDS server
python3 manage.py sopds_server start --daemon
However, the best way is still to configure the HTTP / OPDS servers as Apache or Nginx (entry point ./sopds/wsgi.py)
1.8 In order not to wait for the start of a scheduled scan, you can tell the sopds_scanner process about the need immediate scanning. You can do this by setting the configuration parameter SOPDS_SCAN_START_DIRECTLY = True two ways:
a) from the console using the command
python3 manage.py sopds_util setconf SOPDS_SCAN_START_DIRECTLY True
b) With the help of the Web-interface administration page http://<Your server>:8001/admin/ (FCONSTANCE -> Settings -> 1. General Options -> SOPDS_SCAN_START_DIRECTLY)
1.9 Access to information If all previous steps were successful, then the library can be accessed by the following URLs:
OPDS-version: http://<Your server>:8001/opds/ HTTP-version: http://<Your server>:8001/
It should be taken into account that by default the project uses a simple sqlite3 database, which is one-user. Therefore, until the scanning process is completed, the attempts to access the server may result in an error "A server error occurred." Please contact the administrator. " To eliminate this problem, you need to use multi-user databases, for example MYSQL.
1.10 If necessary, configure and run Telegram-bot
The process of creating bots in telegrams is very simple, to create your bot in Telegram, you need to connect to channel [@BotFather] (https://telegram.me/botfather) and give the command to create a new bot /newbot. Then enter the name of the bot (for example: myopds), and then the user name for this bot, which necessarily ends with "bot" (for example: myopds_bot). As a result, you will be given API_TOKEN, which you need to use in the following commands that will start your personal telegram-bot, which will allow you, using the Telegram instant messenger to get quick access to your personal library.
python3 manage.py sopds_util setconf SOPDS_TELEBOT_API_TOKEN "<Telegram API Token>"
python3 manage.py sopds_util setconf SOPDS_TELEBOT_AUTH False
python3 manage.py sopds_telebot start --daemon
Team,
python3 manage.py sopds_util setconf SOPDS_TELEBOT_AUTH True
you can limit the use of your bot by Telegram users. In this case, your bot will serve only those users whose name in the telegram matches the existing user name in your Simple OPDS database.
2. Configuring the MySQL database (optional, but very desirable for increasing performance).
2.1 To work with a large number of books, it is highly advisable not to use sqlite, but to configure MySQL databases to work. MySQL is much faster than sqlite. In addition, SQLite is a single-user database, i.e. during scanning access to a DB it will be impossible.
To work with the Mysql database on different systems, you may need to install additional packages:
UBUNTU: sudo apt-get install python3-mysqldb
CENTOS-7: pip3 install mysqlclient
Next, you must first create a database "sopds" and a user with the necessary rights in the MySQL database, for example, as follows:
mysql -uroot -proot_pass mysql
mysql> create database if not exists sopds default charset = utf8;
mysql> grant all on sopds. * to 'sopds' @ 'localhost' identified by 'sopds';
mysql> commit;
mysql> ^ C
2.2 Then, in the configuration file, you need to comment out the connection strings to the sqlite database and uncomment the connection string to the Mysql database:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'sopds',
'HOST': 'localhost',
'USER': 'sopds',
'PASSWORD' : 'sopds',
'OPTIONS' : {
'init_command': "SET default_storage_engine=MyISAM;\
SET sql_mode='';"
}
}
}
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
#}
2.4 Using InnoDB instead of MyISAM. The above MySQL configuration uses MyISAM as the database engine, which works on most versions of MySQL or MariaDB. However, if you use a relatively new version of Mysql (MariaDB> = 10.2.2, Mysql> = 5.7.9), then you can use the more modern InnoDB engine. It is somewhat faster and supports transactions, which will positively affect the integrity of the database. (On older versions of MySQL, there are problems with it because of restrictions on the maximum length of indexes.) Thus, if you have a modern version of MySQL (MariaDB> = 10.2.2, Mysql> = 5.7.9), then in the Mysql database settings, simply use the following instead of the above OPTIONS parameters:
'OPTIONS' : {
'init_command': """SET default_storage_engine=INNODB; \
SET sql_mode='STRICT_TRANS_TABLES'; \
SET NAMES UTF8 COLLATE utf8_general_ci; \
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED
"""
}
2.5 Further it is necessary to re-execute points 1.3 - 1.8 of this instruction in order to initialize and fill the newly created database However, if you have already started the HTTP/OPDS server and the SCANNER server, you must first stop them:
python3 manage.py sopds_server stop
python3 manage.py sopds_scanner stop
3. Configuring the PostgreSQL database (optional, a good option for using the SimpleOPDS program).
3.1 PostgreSQL is a good way to use SimpleOPDS. To use PostgreSQL, it is necessary to install this database and configure it (for a detailed description, see the Internet, for example: http://alexxkn.ru/node/42 or here: http://www.fight.org.ua/database/ install_posqgresql_ubuntu.html):
UBUNTU:
sudo apt-get install postgresql postgresql-client postgresql-contrib libpq-dev
sudo vi /etc/postgresql/9.5/main/pg_hba.conf
sudo /etc/init.d/postgresql restart
CENTOS:
yum install postgresql postgresql-server
/usr/bin/postgresql-setup initdb
vi /var/lib/pgsql/data/pg_hba.conf
systemctl enable postgresql
systemctl start postgresql
editing the hba.conf file, you need to fix the following lines:
- local all all peer
- host all all 127.0.0.1/32 ident
+ local all all md5
+ host all all 127.0.0.1/32 md5
To work with the PostgreSQL database, you probably need to install an additional package of psycopg2:
pip3 install psycopg2
Next, you must first create a database "sopds" and a user with the necessary rights in the PostgreSQL database, for example, as follows:
psql -U postgres
Password for user postgres: *****
postgres=# create role sopds with password 'sopds' login;
postgres=# create database sopds with owner sopds;
postgres=# \q
3.2 Next in the configuration file, you need to comment out the connection strings to the sqlite database and decompress it accordingly the connection string to the PostgreSQL database:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'sopds',
'USER': 'sopds',
'PASSWORD': 'sopds',
'HOST': '', # Set to empty string for localhost.
'PORT': '', # Set to empty string for default.
}
}
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
#}
3.4 Next, it is necessary to re-execute points 1.3 - 1.8 of this instruction in order to initialize and fill the newly created database However, if you have already started the HTTP/OPDS server and the SCANNER server, you must first stop them:
python3 manage.py sopds_server stop
python3 manage.py sopds_scanner stop
4. Setting the conversion of fb2 to EPUB or MOBI (optionally, you can not configure it)
4.1 fb2-to-epub converter http://code.google.com/p/fb2-to-epub-converter/
- First you need to download the latest version of the fb2toepub converter from the link above (the current one is already in the project) unfortu
Related Skills
node-connect
353.3kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
111.7kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
353.3kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
353.3kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
