Installer Calibre OPDS PHP Server (COPS) sur Debian
COPS est une application Web permettant la publication d'une bibliothèque d'e-books Calibre au format OPDS (format de catalogue Open Publication Distribution System). Il permet d'accéder facilement aux e-books d'une bibliothèque Calibre depuis une liseuse supportant le format OPDS.
Ce guide est testé sur:
- Debian 7.0 wheezy
- Debian 8.0 Jessie
Ce guide est testé avec ces versions de COPS:
- 1.0.0
Prérequis
Ce guide nécessite :
- a2tools, l'outil d'administration simplifiée d'Apache 2.
- un serveur HTTP avec support du PHP, comme décrit par Installer PHP-FPM sur Debian.
- php-tools, l'outil de configuration simplifiée de PHP.
Ce guide recommande l'un des outils suivant:
- la synchronisation de la bibliothèque Calibre via Seafile, comme décrit par Installer le client Seafile sur Debian ou son montage à l'aide de davfs.
- la synchronisation de la bibliothèque Calibre via Dropbox.
Paramètres
Renseignez le nom de domaine où sera disponible l'application:
domain='opds.domain.com'
Renseignez le nom d'utilisateur pour protéger l'accès à l'application par un login:
# userName="user"
Renseignez le nom du certificat SSL à utiliser pour chiffrer l'application avec HTTPS (créé via la procédure Créer un certificat SSL / TLS sur Debian ou via Let's Encrypt) (optionnel, recommandé):
sslKeyName="auto"
Renseignez le chemin de la bibliothèque Calibre (synchronisée par Dropbox, Seafile ou WebDAV par exemple):
calibrePath="/var/lib/cops/${domain}/Calibre"
Renseignez la zone horaire du site (voir http://www.php.net/manual/en/timezones.php):
timeZone="$(command cat '/etc/timezone')"
Paramètres optionnels
Renseignez le nom du propriétaire de la bibliothèque:
authorName="Firstname Lastname"
Renseignez l'URL du site du propriétaire:
authorUrl="http://${domain}/"
Renseignez l'email du propriétaire:
authorEmail="email@domain.com"
Installation
Détectez le proxy de commande (command ou sudo):
cmdProxy='command'
command type -f 'sudo' >'/dev/null' && cmdProxy='sudo'
Déterminez le chemin d'installation:
installPath="/opt/cops/${domain}"
Détectez le nom des paquets PHP disponibles:
phpVersion='5'
if [ -n "$(command apt-cache pkgnames php-cli)" ]; then
phpVersion=''
fi
Nettoyez le chemin de la bibliothèque Calibre (suppression du '/' de fin):
calibrePath="$(echo "${calibrePath}" | sed -e 's|/$||g')"
Détectez le protocole utilisé:
protocol="http"
[[ -n "${sslKeyName}" && ( -e "/etc/ssl/private/${sslKeyName}.key" || "${sslKeyName}" = 'auto' ) ]] && protocol="https"
Assurez-vous que le dossier parent existe:
${cmdProxy} mkdir --parent "$(command dirname "${installPath}")"
Préparation de l'environnement
Installez les logiciels nécessaires:
${cmdProxy} apt-get install php${phpVersion}-gd php${phpVersion}-sqlite git apg libapache2-mod-xsendfile unzip
Activez les modules xsendfile, expires et rewrite:
${cmdProxy} a2enmod xsendfile expires rewrite
Rechargez la configuration de PHP et Apache 2:
${cmdProxy} php-tools --reload
${cmdProxy} service apache2 force-reload
Mise en place de l'application
Récupérez la dernière version stable du logiciel:
command wget 'https://raw.github.com/biapy/howto.biapy.com/master/various/sf-downloader' \
--quiet --no-check-certificate --output-document='/tmp/sf-downloader'
command chmod +x '/tmp/sf-downloader'
source="$(${cmdProxy} /tmp/sf-downloader \
--output-directory="${installPath}" \
--generic='https://github.com/seblucas/cops/releases' \
--zip 'cops' 'cops-VERSION.zip')"
Configuration de l'application
Créez le fichier de configuration:
${cmdProxy} cp "${installPath}/config_local.php.example" "${installPath}/config_local.php"
Configurez le chemin de la bibliothèque Calibre:
${cmdProxy} sed -i \
-e "s|calibre_directory.*|calibre_directory'] = '${calibrePath}/';|" \
"${installPath}/config_local.php"
Configurez l'URL de l'application:
${cmdProxy} tee -a "${installPath}/config_local.php" \
<<< " \$config['calibre_internal_directory'] = '${protocol}://${domain}/';"
Activez la réécriture d'URL:
${cmdProxy} sed -i \
-e "s|cops_use_url_rewriting.*|cops_use_url_rewriting'] = '1';|" \
"${installPath}/config_local.php"
${cmdProxy} tee -a "${installPath}/config_local.php" \
<<< " \$config['cops_provide_kepub'] = '1';"
Activez l'utilisation de X-SendFile:
${cmdProxy} tee -a "${installPath}/config_local.php" \
<<< " \$config['cops_x_accel_redirect'] = 'X-Sendfile';"
Activez la mise à jour des metadata des Epub avant téléchargement:
${cmdProxy} tee -a "${installPath}/config_local.php" \
<<< " \$config['cops_update_epub-metadata'] = '1';"
Configurez la fonctionnalité "Send to Kindle / Email":
${cmdProxy} tee -a "${installPath}/config_local.php" \
<<< " \$config['cops_update_epub-metadata'] = array(
'smtp.host' => 'localhost',
'smtp.username' => '',
'smtp.password' => '',
'smtp.secure' => '',
'smtp.from' => '${authorEmail}'
);"
Améliorez les résultats de recherche:
${cmdProxy} tee -a "${installPath}/config_local.php" \
<<< " \$config['cops_normalized_search'] = '1';"
Configurez le propriétaire de la bibliothèque OPDS:
${cmdProxy} tee -a "${installPath}/config_local.php" \
<<< " \$config['cops_author_name'] = '${authorName}';
\$config['cops_author_uri'] = '${authorUrl}';
\$config['cops_author_email'] = '${authorEmail}';
"
Sécurisation de l'accès
Générez un mot de passe aléatoire:
userPassword="$(command apg -q -a 0 -n 1 -M NCL)"
Créez le fichier htpasswd:
[[ -n "${userName}" ]] && ${cmdProxy} htpasswd -cbm "${installPath}/.htpasswd" "${userName}" "${userPassword}"
Générez la configuration Apache adéquate:
authConf=""
if [[ -n "${userName}" ]]; then
authConf=" <FilesMatch \"\\.php\$\">
AuthUserFile \"${installPath}/.htpasswd\"
AuthName \"${domain}\"
AuthType Basic
Require valid-user
</FilesMatch>"
fi
Cette configuration sera ajoutée par a2tools au fichier VirtualHost généré.
Mise à jour automatique
Installez sf-downloader sur le système:
command wget 'https://raw.github.com/biapy/howto.biapy.com/master/various/sf-downloader' \
--quiet --no-check-certificate --output-document='/usr/local/bin/sf-downloader'
command chmod +x '/usr/local/bin/sf-downloader'
Mettez en place un script de mise à jour automatique quotidienne du code de l'outil:
${cmdProxy} tee "/etc/cron.daily/cops-${domain//./-}-update" <<< "#"'!'"/bin/bash
# Update ${domain} source code from Git.
test -x '/usr/local/bin/sf-downloader' -a -d '${installPath}' && {
newestVersion=\"\$(sf-downloader \\
--generic='https://github.com/seblucas/cops/releases' \\
--version 'cops' 'cops-VERSION.zip')\"
currentVersion=\"\$(grep 'define.*VERSION' '${installPath}/base.php' \\
| sed -e \"s/^.*'\\([0-9\\.]*\\)'.*\$/\\1/\")\"
if [[ \"\${newestVersion}\" != \"\${currentVersion}\" ]]; then
echo \"Udating COPS on ${domain} from version \${currentVersion} to \${newestVersion}.\"
source=\"\$(sf-downloader \\
--output-directory='${installPath}' \\
--generic='https://github.com/seblucas/cops/releases' \\
--zip 'cops' 'cops-VERSION.zip')\"
fi
}"
command chmod +x "/etc/cron.daily/cops-${domain//./-}-update"
Mise en place de l'hôte virtuel
Créez la configuration du serveur HTTP pour le domaine:
if [[ -n "${sslKeyName}" && ( -e "/etc/ssl/private/${sslKeyName}.key" || "${sslKeyName}" = 'auto' ) ]]; then
${cmdProxy} a2tools --ssl="${sslKeyName}" --custom-options="${authConf}" --overrides='All' "${domain}" "${installPath}"
else
${cmdProxy} a2tools --custom-options="${authConf}" --overrides='All' "${domain}" "${installPath}"
fi
L'installation est maintenant disponible sur le domaine.
Utilisez la commande suivante pour obtenir les informations de connexion au site:
echo "URL: ${protocol}://${domain}/
OPDS feed: ${protocol}://${domain}/feed.php
Username: ${userName}
Password: ${userPassword}"
Sauvegardes
Sauvegardez l'installation avec Backup Manager (voir Installer et configurer Backup Manager sur Debian):
${cmdProxy} backup-manager-tools add "${installPath}"
Remerciements
- Merci aux développeurs de Calibre OPDS PHP Server (COPS) (en).