1.1 Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°
ΠΠ°Π³ΡΡΠ·ΠΈΡΡ Π°ΡΡ
ΠΈΠ² Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΡΠ°ΠΉΡΠ° www.sopds.ru,
Π»ΠΈΠ±ΠΎ ΠΈΠ· github.com ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
git clone https://github.com/mitshel/sopds.git
1.2 ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
- Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ Python Π½Π΅ Π½ΠΈΠΆΠ΅ Π²Π΅ΡΡΠΈΠΈ 3.3 (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π°ΡΡΠΈΠ±ΡΡ zlib.Decompressor.eof, Π²Π²Π΅Π΄Π΅Π½Π½ΡΠΉ Π² Π²Π΅ΡΡΠΈΠΈ 3.3)
- Django 1.9 (Π΄Π»Ρ Python 3.3 Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Django 1.8: https://code.djangoproject.com/ticket/25868)
- Pillow 2.9.0
- apscheduler 3.3.0
- django-constance[database] 1.3
- lxml
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ:
yum install python3 # ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π΄Π»Ρ RedHad, Fedora, CentOS
python3 -m pip install -r requirements.txt
1.3 ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ (ΠΆΠ°Π½ΡΡ)
python3 manage.py migrate
python3 manage.py sopds_util clear
1.4 CΠΎΠ·Π΄Π°Π΅ΠΌ ΡΡΠΏΠ΅ΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
python3 manage.py createsuperuser
1.5 ΠΠ°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ ΠΏΡΡΡ ΠΊ ΠΠ°ΡΠ΅ΠΌΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Ρ Ρ ΠΊΠ½ΠΈΠ³Π°ΠΌΠΈ ΠΈ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΡΠ·ΡΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π½Π° ΡΡΡΡΠΊΠΈΠΉ
python3 manage.py sopds_util setconf SOPDS_ROOT_LIB 'ΠΡΡΡ ΠΊ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Ρ Ρ ΠΊΠ½ΠΈΠ³Π°ΠΌΠΈ'
python3 manage.py sopds_util setconf SOPDS_LANGUAGE ru-RU
1.6 ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ SCANNER ΡΠ΅ΡΠ²Π΅Ρ (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ) ΠΡΠΈΠΌΠΈΡΠ΅ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π·Π°Π΄Π°Π½ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π·Π°ΠΏΡΡΠΊ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ 2 ΡΠ°Π·Π° Π² Π΄Π΅Π½Ρ 12:00 ΠΈ 0:00.
python3 manage.py sopds_scanner start --daemon
1.7 ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ HTTP/OPDS ΡΠ΅ΡΠ²Π΅Ρ
python3 manage.py sopds_server start --daemon
ΠΠ΄Π½Π°ΠΊΠΎ Π½Π°ΠΈΠ»ΡΡΡΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ, Π²ΡΠ΅ ΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ HTTP/OPDS ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Apache ΠΈΠ»ΠΈ Nginx (ΡΠΎΡΠΊΠ° Π²Ρ ΠΎΠ΄Π° ./sopds/wsgi.py)
1.8 Π§ΡΠΎΠ±Ρ Π½Π΅ Π΄ΠΎΠΆΠΈΠ΄Π°ΡΡΡΡ Π½Π°ΡΠ°Π»Π° ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΡ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΎΠ±ΡΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ sopds_scanner ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π‘Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ SOPDS_SCAN_START_DIRECTLY = True Π΄Π²ΡΠΌΡ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ:
Π°) ΠΈΠ· ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
python3 manage.py sopds_util setconf SOPDS_SCAN_START_DIRECTLY True
Π±) ΠΡΠΈ ΠΏΠΎΠΏΠΎΠΌΠΎΡΠΈ ΡΡΡΠ°Π½ΠΈΡΡ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Web-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° http://<ΠΠ°Ρ ΡΠ΅ΡΠ²Π΅Ρ>:8001/admin/ (ΠΠ°Π»Π΅Π΅ CONSTANCE -> ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ -> 1. General Options -> SOPDS_SCAN_START_DIRECTLY)
1.9 ΠΠΎΡΡΡΠΏ ΠΊ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ
ΠΡΠ»ΠΈ Π²ΡΠ΅ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠ΅ ΡΠ°Π³ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎ, ΡΠΎ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΏΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ URL:
OPDS-Π²Π΅ΡΡΠΈΡ: http://<ΠΠ°Ρ ΡΠ΅ΡΠ²Π΅Ρ>:8001/opds/ HTTP-Π²Π΅ΡΡΠΈΡ: http://<ΠΠ°Ρ ΡΠ΅ΡΠ²Π΅Ρ>:8001/
Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΏΡΠΈΠ½ΡΡΡ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΎΡΡΠ°Ρ ΠΠ sqlite3, ΠΊΠΎΡΠΎΡΠ°Ρ
ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎ-ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΉ. ΠΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠΉ
ΡΠ°Π½Π΅Π΅ ΠΏΠΎΠΏΡΡΠΊΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΌΠΎΠ³ΡΡ Π·Π°Π²Π΅ΡΡΠ°ΡΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ
"A server error occurred. Please contact the administrator."
ΠΠ»Ρ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΡ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΠ, ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ MYSQL.
2. ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ MySQL (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ, Π½ΠΎ ΠΎΡΠ΅Π½Ρ ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ).
2.1 ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΊΠ½ΠΈΠ³, ΠΎΡΠ΅Π½Ρ ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ sqlite, Π° Π½Π°ΡΡΡΠΎΠΈΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΠΠ MySQL. MySQL ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ sqlite ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΡΡΡΡΠ΅Π΅. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ SQLite - ΠΎΠ΄Π½ΠΎΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΊΠ°Ρ ΠΠ, Ρ.Π΅. Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΠ Π±ΡΠ΄Π΅Ρ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½.
Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΠ Mysql Π² ΡΠ°Π·Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²:
UBUNTU: sudo apt-get install python3-mysqldb
Π‘ENTOS-7: pip3 install mysqlclient
ΠΠ°Π»Π΅Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ½Π°ΡΠ°Π»Π° Π² ΠΠ MySQL ΡΠΎΠ·Π΄Π°ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ "sopds" ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌΠΈ ΠΏΡΠ°Π²Π°ΠΌΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
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 ΠΠ°Π»Π΅Π΅ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΌ ΡΠ°ΠΉΠ΄Π΅ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ ΠΠ sqlite ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ°ΡΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ ΠΠ Mysql:
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 ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ InnoDB Π²ΠΌΠ΅ΡΡΠΎ MyISAM.
Π£ΠΊΠ°Π·Π°Π½Π½Π°Ρ Π²ΡΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ MySQL ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄Π²ΠΈΠΆΠΊΠ° ΠΠ MyISAM, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ Π²Π΅ΡΡΠΈΠΉ MySQL ΠΈΠ»ΠΈ MariaDB.
ΠΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ²Π΅ΠΆΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΠ Mysql (MariaDB>=10.2.2, Mysql>=5.7.9), ΡΠΎ Ρ Π²Π°Ρ Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ InnoDB.
ΠΠ½ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΡΡΡΡΠ΅Π΅ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ, ΡΡΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π° ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΠΈ ΠΠ.
(ΠΠ° Π±ΠΎΠ»Π΅Π΅ ΡΡΠ°ΡΡΡ
Π²Π΅ΡΡΠΈΡΡ
MySQL Ρ Π½ΠΈΠΌ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈΠ·-Π·Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ Π΄Π»ΠΈΠ½Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ².)
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΅ΡΠ»ΠΈ Ρ ΠΠ°Ρ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ MySQL (MariaDB>=10.2.2, Mysql>=5.7.9), ΡΠΎ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ
ΠΠ Mysql Π²ΠΌΠ΅ΡΡΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ
Π²ΡΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² OPTIONS ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅:
'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 ΠΠ°Π»Π΅Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²Π½ΠΎΠ²Ρ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΉ ΠΠ Π·Π°Π½ΠΎΠ²ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΡΠ½ΠΊΡΡ 1.3 - 1.8 Π΄Π°Π½Π½ΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ ΠΡ ΡΠΆΠ΅ ΡΠ°Π½Π΅Π΅ Π·Π°ΠΏΡΡΡΠΈΠ»ΠΈ HTTP/OPDS ΡΠ΅ΡΠ²Π΅Ρ ΠΈ SCANNER ΡΠ΅ΡΠ²Π΅Ρ, ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ½Π°ΡΠ°Π»Π° ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈΡ :
python3 manage.py sopds_server stop
python3 manage.py sopds_scanner stop
3. ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ PostgreSQL (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ, Ρ ΠΎΡΠΎΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Simple OPDS).
3.1 PostgreSQL - nΡΠ²Π»ΡΠ΅ΡΡΡ Ρ
ΠΎΡΠΎΡΠΈΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΠ Simple OPDS.
ΠΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ PostgreSQL ΡΡΠΎΠ³ΠΎ Π½Π΅ΠΎΡΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΡΡ ΠΠ ΠΈ Π½Π°ΡΡΡΠΎΠΈΡΡ Π΅Π΅ (ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ, Π½Π°ΠΏΡΠΈΠΌΡ Π·Π΄Π΅ΡΡ: http://alexxkn.ru/node/42 ΠΈΠ»ΠΈ Π·Π΄Π΅ΡΡ: 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
ΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΡ ΡΠ°ΠΉΠ» hba.conf Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ:
- 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
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΠ PostgreSQL ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ psycopg2:
pip3 install psycopg2
ΠΠ°Π»Π΅Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ½Π°ΡΠ°Π»Π° Π² ΠΠ PostgreSQL ΡΠΎΠ·Π΄Π°ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ "sopds" ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌΠΈ ΠΏΡΠ°Π²Π°ΠΌΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
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 ΠΠ°Π»Π΅Π΅ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΌ ΡΠ°ΠΉΠ΄Π΅ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ ΠΠ sqlite ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ°ΡΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ ΠΠ PostgreSQL:
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 ΠΠ°Π»Π΅Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²Π½ΠΎΠ²Ρ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΉ ΠΠ Π·Π°Π½ΠΎΠ²ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΡΠ½ΠΊΡΡ 1.3 - 1.8 Π΄Π°Π½Π½ΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ ΠΡ ΡΠΆΠ΅ ΡΠ°Π½Π΅Π΅ Π·Π°ΠΏΡΡΡΠΈΠ»ΠΈ HTTP/OPDS ΡΠ΅ΡΠ²Π΅Ρ ΠΈ SCANNER ΡΠ΅ΡΠ²Π΅Ρ, ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ½Π°ΡΠ°Π»Π° ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈΡ :
python3 manage.py sopds_server stop
python3 manage.py sopds_scanner stop
4. ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΊΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΠΈ fb2 Π² EPUB ΠΈΠ»ΠΈ MOBI (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ)
4.1 ΠΠΎΠ½Π²Π΅ΡΡΠ΅Ρ fb2-to-epub http://code.google.com/p/fb2-to-epub-converter/
- Π²ΠΎ ΠΏΠ΅ΡΠ²ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°ΡΠ°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΠΊΠΎΠ½Π²Π΅ΡΡΠ΅ΡΠ° fb2toepub ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ Π²ΡΡΠ΅ (ΡΠ΅ΠΊΡΡΠ°Ρ ΡΠΆΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅) ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½Π²Π΅ΡΡΠ΅Ρ Π½Π΅ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΡΠΉ ΠΈ Π½Π΅ Π²ΡΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ, Π½ΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΠ΅ΡΡΡ
- Π΄Π°Π»Π΅Π΅, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π°ΡΡ ΠΈΠ² Π² ΠΏΠ°ΠΏΠΊΡ ./convert/fb2toepub ΠΈ ΡΠ°Π·Π°ΡΡ ΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡ
- Π΄Π°Π»Π΅Π΅, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ make, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π² ΠΏΠ°ΠΏΠΊΠ΅ unix_dist ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» fb2toepub
- ΠΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π²Π΅Π±-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° ΠΈΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Π·Π°Π΄Π°ΡΡ ΠΏΡΡΡ ΠΊ ΡΡΠΎΠΌΡ ΠΊΠΎΠ½Π²Π΅ΡΡΠ΅ΡΡ:
python3 manage.py sopds_util setconf SOPDS_FB2TOEPUB "convert/fb2toepub/unix_dist/fb2toepub"
- Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ OPDS-ΠΊΠ»ΠΈΠ΅Π½ΡΡ Π±ΡΠ΄ΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΡ ΡΡΡΠ»ΠΊΠΈ Π½Π° FB2-ΠΊΠ½ΠΈΠ³Ρ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ epub
4.2 ΠΠΎΠ½Π²Π΅ΡΡΠ΅Ρ fb2epub http://code.google.com/p/epub-tools/ (ΠΊΠΎΠ½Π²Π΅ΡΡΠ΅Ρ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Java, ΡΠ°ΠΊ ΡΡΠΎ Π² Π²Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Π΄ΠΎΠ»ΠΆΠ½Π΅Π½ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ JDK 1.5)
- ΡΠ°ΠΊΠΆΠ΅ ΡΠ½Π°ΡΠ°Π»Π° ΡΠΊΠ°ΡΠ°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ Π²ΡΡΠ΅ (ΡΠ΅ΠΊΡΡΠ°Ρ ΡΠΆΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅)
- ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ jar-ΡΠ°ΠΉΠ» Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ./convert/fb2epub (ΠΠ΄Π΅ΡΡ ΡΠΆΠ΅ Π»Π΅ΠΆΠΈΡ shell-ΡΠΊΡΠΈΠΏΡ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° jar-ΡΠ°ΠΉΠ»Π°)
- ΠΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π²Π΅Π±-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° ΠΈΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Π·Π°Π΄Π°ΡΡ ΠΏΡΡΡ shell-ΡΠΊΡΠΈΠΏΡΡ fb2epub (ΠΈΠ»ΠΈ fb2epub.cmd Π΄Π»Ρ Windows)
python3 manage.py sopds_util setconf SOPDS_FB2TOEPUB "convert/fb2epub/fb2epub"
4.3 ΠΠΎΠ½Π²Π΅ΡΡΠ΅Ρ fb2conv (ΠΊΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΡ Π² epub ΠΈ mobi) http://www.the-ebook.org/forum/viewtopic.php?t=28447
-
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ python 2.7 ΠΈ ΠΏΠ°ΠΊΠ΅ΡΡ lxml, cssutils:
yum install python yum install python-lxml yum install python-cssutils
-
ΡΠΊΠ°ΡΠ°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΠΊΠΎΠ½Π²Π΅ΡΡΠ΅ΡΠ° ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ Π²ΡΡΠ΅ (ΡΠ΅ΠΊΡΡΠ°Ρ ΡΠΆΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ fb2conv ΠΏΡΠΎΠ΅ΠΊΡΠ°)
-
ΡΠΊΠ°ΡΠ°ΡΡ ΡΡΠΈΠ»ΠΈΡΡ KindleGen Ρ ΡΠ°ΠΉΡΠ° Amazon http://www.amazon.com/gp/feature.html?ie=UTF8&docId=1000234621 (ΡΠ΅ΠΊΡΡΠ°Ρ Π²Π΅ΡΡΠΈΡ ΡΡΠΈΠ»ΠΈΡΡ ΡΠΆΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ fb2conv ΠΏΡΠΎΠ΅ΠΊΡΠ°)
-
ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π°ΡΡ ΠΈΠ² ΠΏΡΠΎΠ΅ΠΊΡΠ° Π² ./convert/fb2conv (ΠΠ΄Π΅ΡΡ ΡΠΆΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Ρ shell-ΡΠΊΡΠΈΠΏΡΡ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΊΠΎΠ½Π²Π΅ΡΡΠ΅ΡΠ°) ΠΈ ΡΠ°Π·Π°ΡΡ ΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ
-
ΠΠ»Ρ ΠΊΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΠΈ Π² MOBI Π½ΡΠΆΠ½ΠΎ Π°ΡΡ ΠΈΠ² Ρ ΡΡΠΈΠ»ΠΈΡΠΎΠΉ KindleGen ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Ρ ΠΊΠΎΠ½Π²Π΅ΡΡΠ΅ΡΠΎΠΌ ΠΈ ΡΠ°Π·Π°ΡΡ ΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡ
-
ΠΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π²Π΅Π±-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° ΠΈΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Π·Π°Π΄Π°ΡΡ ΠΏΡΡΠΈ ΠΊ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΡΠΊΡΠΈΠΏΡΠ°ΠΌ:
python3 manage.py sopds_util setconf SOPDS_FB2TOEPUB "convert/fb2conv/fb2epub" python3 manage.py sopds_util setconf SOPDS_FB2TOMOBI "convert/fb2conv/fb2mobi"
ΠΠΎΠΊΠ°Π·Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΠΊΠ½ΠΈΠ³:
python3 manage.py sopds_util info
ΠΡΠΈΡΡΠΈΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠ΅ΠΉ ΠΊΠ½ΠΈΠ³, Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ ΠΆΠ°Π½ΡΠΎΠ²:
python3 manage.py sopds_util clear [--verbose]
Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΡ ΡΠ²ΠΎΠΉ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ ΠΆΠ°Π½ΡΠΎΠ² Π² ΡΠ°ΠΉΠ» opds_catalog/fixtures/mygenres.json:
python3 manage.py sopds_util save_mygenres
ΠΠ°Π³ΡΡΠ·ΠΈΡΡ ΡΠ²ΠΎΠΉ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ ΠΆΠ°Π½ΡΠΎΠ² ΠΈΠ· ΡΠ°ΠΉΠ»Π° opds_catalog/fixtures/mygenres.json:
python3 manage.py sopds_util load_mygenres
Π’ΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ PostgerSQL. ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΡΠ°Π±Π»ΠΈΡΡ opds_catalog_book (fillfactor = 50). ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΡΡΡΠ΅Π΅:
python3 manage.py sopds_util pg_optimize
ΠΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π²ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ:
python3 manage.py sopds_util getconf
ΠΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ:
python3 manage.py sopds_util getconf SOPDS_ROOT_LIB
ΠΠ°Π΄Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ:
python3 manage.py sopds_util setconf SOPDS_ROOT_LIB '\home\files\books'
ΠΠ°ΠΏΡΡΡΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΎΠ΅ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΠΊΠ½ΠΈΠ³:
python3 manage.py sopds_scanner scan [--verbose] [--daemon]
ΠΠ°ΠΏΡΡΡΠΈΡΡ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΠΊΠ½ΠΈΠ³ ΠΏΠΎ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΡ:
python3 manage.py sopds_scanner start [--verbose] [--daemon]
ΠΠ°ΠΏΡΡΡΠΈΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ web-ΡΠ΅ΡΠ²Π΅Ρ:
python3 manage.py sopds_server start [--host <IP address>] [--port <port N>] [--daemon]
6. ΠΠΏΡΠΈΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈΠ·Π°ΡΠΎΡΠ° Simple OPDS (www.sopds.ru)
ΠΠ°ΡΠ°Π»ΠΎΠ³ΠΈΠ·Π°ΡΠΎΡ Simple OPDS ΠΈΠΌΠ΅Π΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° http://<ΠΠ°Ρ ΡΠ΅ΡΠ²Π΅Ρ>/admin/
SOPDS_LANGUAGE - ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ·ΡΠΊΠ° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
SOPDS_ROOT_LIB - ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΡΡΡ ΠΊ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π° Π²Π°ΡΠ° ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΠΊΠ½ΠΈΠ³.
SOPDS_BOOK_EXTENSIONS - Π‘ΠΏΠΈΡΠΎΠΊ ΡΠΎΡΠΌΠ°ΡΠΎΠ² ΠΊΠ½ΠΈΠ³, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π²ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³.
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_BOOK_EXTENSIONS = '.pdf .djvu .fb2 .epub')
SOPDS_DOUBLES_HIDE - Π‘ΠΊΡΡΠ²Π°Π΅Ρ, Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠ΅ Π΄ΡΠ±Π»ΠΈΠΊΠ°ΡΡ Π² Π²ΡΠ΄Π°ΡΠ°Ρ
ΠΊΠ½ΠΈΠ³.
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_DOUBLES_HIDE = True)
SOPDS_FB2SAX - ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· FB2 Π΄Π²ΡΠΌΡ ΠΏΠ°ΡΡΠ΅ΡΠ°ΠΌΠΈ
- FB2sax - ΡΡΠ°ΡΠ½ΡΠΉ ΠΏΠ°ΡΡΠ΅Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π² SOPDS Ρ Π²Π΅ΡΡΠΈΠΈ 0.01, ΡΡΠΎΡ ΠΏΠ°ΡΡΠ΅Ρ Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΡΠΉ, ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ Π΄Π°ΠΆΠ΅ ΠΈΠ· Π½Π΅Π²Π°Π»ΠΈΠ΄Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² FB2
- FB2xpath - ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ Π² Π²Π΅ΡΡΠΈΠΈ 0.42, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎΠΌΠ΅Π΄Π΅Π»Π΅Π½Π½Π΅Π΅, Π½Π΅ ΡΠ΅ΡΠΏΠΈΡ Π½Π΅Π²Π°Π»ΠΈΠ΄Π½ΡΡ FB2 (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_FB2SAX = True)
SOPDS_COVER_SHOW - ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠΊΠ°Π·Π° ΠΎΠ±Π»ΠΎΠΆΠ΅ΠΊ (False - Π½Π΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ, True - ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ ΠΎΠ±Π»ΠΎΠΆΠΊΠΈ Π½Π° Π»Π΅ΡΡ ΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ).
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS COVER_SHOW = True)
SOPDS_ZIPSCAN - ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ZIP Π°ΡΡ
ΠΈΠ²ΠΎΠ².
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_ZIPSCAN = True)
SOPDS_ZIPCODEPAGE - Π£ΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΊΠ°Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ° Π΄Π»Ρ Π½Π°Π·Π²Π°Π½ΠΈΠΉ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ZIP-Π°ΡΡ
ΠΈΠ²Π°Ρ
. ΠΠΎΡΡΡΠΏΠ½ΡΠ΅ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ: cp437, cp866, cp1251, utf-8. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ° cp437. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΡΠ°ΠΌΠΎΠΌ ZIP Π°ΡΡ
ΠΈΠ²Π΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ² - ΠΎΡΡΡΡΡΡΠ²ΡΡΡ, ΡΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ Π΄Π»Ρ ΠΈΠΌΠ΅Π½ ΡΠ°ΠΉΠ»ΠΎΠ² Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΊΠΈΡΠΈΠ»Π»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ² Π½Π΅ Π²Π°ΡΠ³Π»ΡΠ΄Π΅Π»ΠΈ ΠΊΠ°ΠΊ ΠΊΡΡΠΊΠΎΠ·ΡΠ±ΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ cp866.
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_ZIPCODEPAGE = "cp866")
SOPDS_INPX_ENABLE - ΠΡΠ»ΠΈ True, ΡΠΎ ΠΏΡΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠΈ INPX ΡΠ°ΠΉΠ»Π° Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅, ΡΠΊΠ°Π½Π΅Ρ Π½Π΅ ΡΠΊΠ°Π½ΠΈΡΡΠ΅Ρ Π΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΏΠΎΠ΄Π³Π°ΡΠ°Π»ΠΎΠ³Π°ΠΌΠΈ, Π° Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ INPX ΡΠ°ΠΉΠ»Π°. Π‘ΠΊΠ°Π½Π΅Ρ ΡΡΠΈΡΠ°Π΅Ρ ΡΡΠΎ ΡΠ°ΠΌΠΈ Π°ΡΡ
ΠΈΠ²ΡΡ ΠΊΠ½ΠΈΠ³Π°ΠΌΠΈ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Ρ Π² ΡΡΠΎΠΌ ΠΆΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅. Π’.Π΅. INPX-ΡΠ°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΠΏΠ°ΠΏΠΊΠ΅ Ρ Π°ΡΡ
ΠΈΠ²Π°ΠΌΠΈ ΠΊΠ½ΠΈΠ³.
ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΡΠΈΡΠ΅, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΠ· ΠΈΠ· INPX ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ, Ρ.ΠΊ. Π² INPX Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ Π½Π΅Ρ!!!
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_INPX_ENABLE = True)
SOPDS_INPX_SKIP_UNCHANGED - ΠΡΠ»ΠΈ True, ΡΠΎ ΡΠΊΠ°Π½Π΅Ρ ΠΏΡΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ INPX Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ»ΡΡ.
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_INPX_SKIP_UNCHANGED = True)
SOPDS_INPX_TEST_ZIP - ΠΡΠ»ΠΈ True, ΡΠΎ ΡΠΊΠ°Π½Π΅Ρ ΠΏΡΡΠ°Π΅ΡΡΡ Π½Π°ΠΉΡΠΈ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π² INPX Π°ΡΡ
ΠΈΠ². ΠΡΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ Π°ΡΡ
ΠΈΠ² Π½Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅ΡΡΡ, ΡΠΎ ΡΠΊΠ°Π½Π΅Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½ΠΈΠΌ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· INPX Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²Π΅Π½Π½ΠΎ, Π΅ΡΠ»ΠΈ SOPDS_INPX_TEST_ZIP = False, ΡΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ
ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ ΡΠΊΠ°Π½Π΅Ρ Π½Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ, Π° ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· INPX Π² ΠΠ. ΠΡΠΎ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΡΡΡΡΠ΅Π΅.
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_INPX_TEST_ZIP = False)
SOPDS_INPX_TEST_FILES - ΠΡΠ»ΠΈ True, ΡΠΎ ΡΠΊΠ°Π½Π΅Ρ ΠΏΡΡΠ°Π΅ΡΡΡ Π½Π°ΠΉΡΠΈ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π² INPX ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» Ρ ΠΊΠ½ΠΈΠ³ΠΎΠΉ (ΡΠΆΠ΅ Π²Π½ΡΡΡΠΈ Π°ΡΡ
ΠΈΠ²ΠΎΠ²). ΠΡΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΡΠ°ΠΉΠ» Π½Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅ΡΡΡ, ΡΠΎ ΡΠΊΠ°Π½Π΅Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΡΡ ΠΊΠ½ΠΈΠ³Ρ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²Π΅Π½Π½ΠΎ, Π΅ΡΠ»ΠΈ INPX_TEST_FILES = False, ΡΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ
ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ ΡΠΊΠ°Π½Π΅Ρ Π½Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ, Π° ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΊΠ½ΠΈΠ³Ρ ΠΈΠ· INPX Π² ΠΠ. ΠΡΠΎ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΡΡΡΡΠ΅Π΅.
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_TEST_FILES = False)
SOPDS_DELETE_LOGICAL - True ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ΠΏΡΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠΈ ΡΠΊΠ°Π½Π΅ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠ½ΠΈΠ³Π° ΡΠ΄Π°Π»Π΅Π½Π°, Π·Π°ΠΏΠΈΡΡ Π² ΠΠ ΠΎΠ± ΡΡΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π°Π»Π΅Π½Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ (avail=0). ΠΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ False, ΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΈΡ
Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
. ΠΠΎΠΊΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ SOPDS_DELETE_LOGICAL = False.
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_DELETE_LOGICAL = False)
SOPDS_SPLITITEMS - Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΏΡΠΈ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² Π³ΡΡΠΏΠΏΠ΅ - Π³ΡΡΠΏΠΏΠ° Π±ΡΠ΄Π΅Ρ "ΡΠ°ΡΠΊΡΡΠ²Π°ΡΡΡΡ". ΠΠ»Ρ Π²ΡΠ΄Π°Ρ "By Title", "By Authors", "By Series".
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_SPLITITEMS = 300)
SOPDS_MAXITEMS - ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΡΠ΄Π°Π²Π°Π΅ΠΌΡΡ
ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π½Π° ΠΎΠ΄Π½Ρ ΡΡΡΠ°Π½ΠΈΡΡ.
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_MAXITEMS = 60)
SOPDS_FB2TOEPUB ΠΈ SOPDS_FB2TOMOBI Π·Π°Π΄Π°ΡΡ ΠΏΡΡΠΈ ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΠΌ - ΠΊΠΎΠ½Π²Π΅ΡΡΠ΅ΡΠ°ΠΌ ΠΈΠ· FB2 Π² EPUB ΠΈ MOBI/
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_FB2TOEPUB = "")
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_FB2TOMOBI = "")
SOPDS_TEMP_DIR Π·Π°Π΄Π°Π΅Ρ ΠΏΡΡΡ ΠΊ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΌΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π° ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΊΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΠΈ.
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_TEMP_DIR = os.path.join(BASE_DIR,'tmp'))
SOPDS_TITLE_AS_FILENAME - ΠΡΠ»ΠΈ True, ΡΠΎ ΠΏΡΠΈ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° ΠΊΠ½ΠΈΠ³ΠΈ Π²ΡΠ΄Π°Π΅Ρ ΡΡΠ°Π½ΡΠ»ΠΈΡΠ΅ΡΠ°ΡΠΈΡ Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΊΠ½ΠΈΠ³ΠΈ.
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_TITLE_AS_FILENAME = True)
SOPDS_ALPHABET_MENU - ΠΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½Ρ Π²ΡΠ±ΠΎΡΠ° Π°Π»ΡΠ°Π²ΠΈΡΠ°.
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_ALPHABET_MENU = True)
SOPDS_NOCOVER_PATH - Π€Π°ΠΉΠ» ΠΎΠ±Π»ΠΎΠΆΠΊΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΊΠ½ΠΈΠ³ Π±Π΅Π· ΠΎΠ±Π»ΠΎΠΆΠ΅ΠΊ.
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_NOCOVER_PATH = os.path.join(BASE_DIR,'static/images/nocover.jpg'))
SOPDS_AUTH - ΠΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ BASIC - Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ.
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_AUTH = True)
SOPDS_SERVER_LOG ΠΈ SOPDS_SCANNER_LOG Π·Π°Π΄Π°ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ LOG ΡΠ°ΠΉΠ»ΠΎΠ² ΡΡΠΈΡ
ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ².
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_SERVER_LOG = os.path.join(BASE_DIR,'opds_catalog/log/sopds_server.log'))
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_SCANNER_LOG = os.path.join(BASE_DIR,'opds_catalog/log/sopds_scanner.log'))
SOPDS_SERVER_PID ΠΈ SOPDS_SCANNER_PID Π·Π°Π΄Π°ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ PID ΡΠ°ΠΉΠ»ΠΎΠ² ΡΡΠΈΡ
ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΏΡΠΈ Π΄Π΅ΠΌΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ.
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_SERVER_PID = os.path.join(BASE_DIR,'opds_catalog/tmp/sopds_server.pid'))
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_SCANNER_PID = os.path.join(BASE_DIR,'opds_catalog/tmp/sopds_scanner.pid'))
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ SOPDS_SCAN_SHED_XXX ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅Π΄ΡΠ»Π΅ΡΠ°, Π΄Π»Ρ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΠΊΠ½ΠΈΠ³ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ manage.py sopds_scanner start. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅: # https://apscheduler.readthedocs.io/en/latest/modules/triggers/cron.html#module-apscheduler.triggers.cron
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ
Π½ΠΈΠΆΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠ΅ΡΠ΅Π· Web-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΡΡΠΎΠΊΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ sopds_scanner ΠΊΠ°ΠΆΠ΄ΡΠ΅ 10 ΠΌΠΈΠ½ΡΡ.
Π ΡΠ»ΡΡΠ°Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ sopds_scanner Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π½ΠΎΡΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊ.
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_SCAN_SHED_MIN = '0')
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_SCAN_SHED_HOUR = '0,12')
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_SCAN_SHED_DAY = '')
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SOPDS_SCAN_SHED_DOW = '')
SOPDS_SCAN_START_DIRECTLY - ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡ True, ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ΠΏΡΠΈ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ sopds_scanner ΡΡΠΎΠ³ΠΎ ΡΠ»Π°Π³Π° (ΠΊΠ°ΠΆΠ΄ΡΠ΅ 10 ΠΌΠΈΠ½ΡΡ) Π·Π°ΠΏΡΡΡΠΈΡΡΡ Π²Π½Π΅ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ΅ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½Π΅ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ, Π° ΡΠΊΠ°Π·Π°Π½ΡΠΉ ΡΠ»Π°Π³ Π²Π½ΠΎΠ²Ρ ΡΠ±ΡΠΎΡΠΈΡΡΡΡ Π² False.