Installation de COPS sur Synology DSM 7.X
COPS, développé par Sébastien Lucas est disponible sur GitHub. C’est un serveur extrêmement léger qui permet de rendre une bibliothèque Calibre accessible sous la forme d’une page web. Aucune base de données n’est nécessaire et ça demande peu de ressources.
Possédant un NAS et un nom de domaine, le plus simple était d’héberger COPS dessus. Pour les modèles Synology, il existe un paquet chez SynoCommunity. Seulement voilà : jusque là mon vieux DS1010 avec DSM 5 ne posait aucun problème. Mais au bout de 13 ans il commence à donner des signes de fatigue.
J’ai donc décidé de migrer sur mon nouveau Synology en DSM 7. Mais sur DSM 7.x je n’ai pas réussi à l’installer avec les paquets SynoCommunity. J’ai donc procédé à une installation manuelle.
Attention : COPS nécessite de pouvoir lire le dossier contenant la bibliothèque Calibre. J’ai opté pour une solution hybride :
- Ma bibliothèque est gérée et stockée sur mon ordinateur grâce au logiciel Calibre.
- Le dossier est synchronisé sur le NAS via une synchro réalisée avec le logiciel Cobian Backup (synchronisation unidirectionnelle ordinateur > NAS).
Dès que je modifie la bibliothèque Calibre sur le PC, je synchronise en lançant une tâche Cobian Backup.
Prérequis
Voici les points importants pour la suite :
- Mon NAS est un DS213j
- Il fonctionne actuellement sur le DSM 7.1.1
- Le paquet WebStation est en version 3.1
- Le serveur Apache fonctionne en 2.4
- Le serveur PHP est en 7.4 avec les extensions nécessaires à COPS : gd, intl, pdo_sqlite, sqlite3
- Je dispose d’un nom de domaine qui me permet d’accéder au contenu de l’extérieur, avec un DDNS pour gérer l’IP dynamique
Installation de COPS
J’utilise le dossier partagé Web
du NAS : un dossier pour contenir COPS, un autre pour contenir la bibliothèque d’ebook :
- /volume1/web/cops
- /volume1/web/cops/calibre
Vous pouvez bien sûr les nommer comme bon vous semble. Selon votre configuration dans Web Station, le nom du dossier contenant COPS fera partie de l’URL pour y accéder. Par exemple : https://mondomainenas.fr/cops
À partir de ce point, je pars du principe que la bibliothèque Calibre, présente sur le PC, est synchronisée dans le dossier calibre
du NAS.
Ensuite :
- Sur le NAS, dans le volume partagé Web, créer le
/volume1/web/cops
. - Télécharger la dernière version de COPS sur ce lien ;
- Décompresser le contenu de l’archive dans le
/volume1/web/cops
sur le NAS.
Paramétrer COPS
Dans le dossier où est installé COPS, ouvrir le fichier config_default.php
avec un éditeur de texte (Textedit marche bien, mais pour avoir un rendu plus adapté, SublimeText fait du bon travail).
- Ligne 33 :
$config['cops_full_url'] = 'https://
mondomainenas.fr
/cops/';
Placer l’URL d’accès entre les apostrophes. - Ligne 38 :
$config['cops_recentbooks_limit'] = '25';
Choisir le nombre de livres présenté dans la section « récemment ajoutés ». 25 par défaut, à vous de voir. - Ligne 58 :
$config['cops_title_default'] = 'titre';
Choisir le nom de la librairie. - Ligne 117 :
$config['cops_use_url_rewriting'] = '1';
Activer la ré-écriture d’URL, utile pour la compatibilité avec des applications compatibles OPDS. - Ligne 328 :
$config['cops_language'] = 'fr';
Choisir le langage par défaut de COPS, ici en français.
Ensuite, sauvegardez le fichier et sortez.
Trouver le fichier config_local.php.example
et en faire une copie dans le dossier. Puis renommer la copie en config_local.php
avant de l’ouvrir avec un éditeur de texte.
- Ligne 17 :
$config['calibre_directory'] = '/volume1/web/cops/calibre';
On va renseigner ici le chemin vers les ebooks sur le NAS. - Ligne 22 :
$config['cops_title_default'] = "titre";
On reprend l’info du fichier précédent à la ligne 63. - Ligne 30 :
$config['cops_use_url_rewriting'] ="1";
On active à nouveau la ré-écriture URL.
Sauvegarder et quitter le fichier. Si tout va bien, ça fonctionne. En utilisant l’URL https://
l’interface s’ouvre.mondomainenas.fr
/cops
L’inconvénient de cette solution, c’est que tout est accessible par n’importe qui, il n’y a aucune protection. Or, je ne souhaite pas que mes ebooks soient disponibles aux quatre vents.
Protéger l’accès
COPS peut se reposer sur un contrôle d’accès basique au niveau du serveur apache. Ouvrez un éditeur de texte puis ouvrez le fichier .htaccess
situé à la racine du dossier
. En bas, trouvez cette section :/volume1/web/cops
###########################################
<FilesMatch "\.php$">
AuthUserFile /volume1/web/access/.htpasswd
AuthGroupFile /dev/null
AuthName "Login"
AuthType Basic
require valid-user
</FilesMatch>
À la troisième ligne, il faut indiquer le chemin vers un 3e dossier qui contiendra la liste des accès autorisés. Dans l’exemple, c’est le dossier access placé lui-même à la racine de /web
. Une fois que c’est fait, sauvegardez.
Évidemment, il faut ensuite créer un nouveau dossier à la racine du volume partagé Web et lui donner le même nom access
. Puis :
- Rendez-vous sur un site qui génère des identifiants htpasswd, comme celui-ci par exemple.
- Choisissez et renseignez un login.
- Choisissez et renseignez un mot de passe.
- Cliquez sur le bouton Crypter
- Une ligne verte avec du texte va apparaitre sous la forme zecops:$1$Y.D1Rn4r$RhbNU6fX0UWI4lG/GRn6.1.
- Copiez la ligne entière et collez-la dans un fichier texte.
- Vous pouvez recommencer et en ajouter autant que vous voulez : une ligne par accès dans le fichier.
- Une fois terminé, sauvegardez le fichier dans le access sous le nom
.htpasswd
. - Ouvrez un nouveau fichier texte vierge et collez la ligne suivante :
deny from all
. - Sauvegardez-le dans le dossier access sous le nom
.htaccess
. Ce fichier empêchera l’accès au dossier depuis le web, on ne sait jamais.
Maintenant, vous rencontrez deux comportements différents selon comment vous accéder à COPS.
- Via l’URL principale
https://
: votre navigateur internet (ou application OPDS) affichera un formulaire d’accès login/mot de passe.mondomainenas.fr
/cops/ - Via l’URL secondaire
https://
: vous obtiendrez un formulaire sous la forme d’une page web. L’intérêt de cette URL, c’est qu’elle est nativement compatible avec un gestionnaire de mot de passe.mondomainenas.fr
/cops/login
Tips
Pas de mot de passe depuis le réseau local
Il est possible de désactiver le contrôle d’accès sur le réseau local exclusivement, tout en demandant toujours un couple login/mot de passe depuis l’extérieur.
Pour cela, éditez le fichier .htaccess
situé dans le dossier cops (celui qui contient COPS –
) et retournez dans la section finale./volume1/web/cops
Ensuite, commencez par retirer la ligne require valid-user\
. Remplacez par ce qui suit :
<RequireAny>
Require valid-user
Require ip 192.168.0
</RequireAny>
\
Pour l’adresse IP, il faudra l’adapter à votre réseau local, en ne laissant que les 3 premières parties. Par exemple, si votre adresse IP locale est 192.168.1.22, il faut laisser juste 192.168.1 dans la ligne.
Plusieurs librairies
Il est possible d’avoir plusieurs librairies séparées. Par exemple, si vous gérez des bibliothèques différentes avec Calibre
. Dans ce cas, vous devez synchroniser chaque bibliothèque dans un dossier séparé à la racine de /web
sur le NAS.
Ensuite, dans le dossier cops (
), éditez le fichier /volume1/web/cops
config_local.php
. À la ligne 17, effacer le contenu $config['calibre_directory'] = '/volume1/web/cops/calibre/';
.
Ensuite, coller ceci : $config['calibre_directory'] = array (
"First database name" => "/volume1/web/cops/Calibre_library1/",
"Second database name" => "volume1/web/cops/Calibre_library2/");
\
Vous pouvez nommer chaque librairie en remplacement First/Second database name
. Ensuite, personnalisez le chemin vers chaque librairie selon le nom que vous avez donné aux dossiers.
8 commentaires
Pierre martin · 2 janvier 2024 à 7 h 29 min
Super, merci, mais le tri et la recherche par série a disparu. Comment faire pour le retrouver ?
Pierre martin · 2 janvier 2024 à 7 h 55 min
Autant pour moi, confusion entre « collection » et « Série ».
En fait, une collection représente un ensemble de publications qui suivent la même ligne éditoriale mais ne sont pas forcément liées entre elles.
Lorsqu’un même ouvrage est divisé en plusieurs volumes qui suivent un ordre précis, il s’agit d’une série.
Bruno Teuile · 8 février 2024 à 8 h 03 min
Bonjour
Tuto suivi, mais j’ai une erreur 500 quand je tente d’ouvrir cops. 9a marchait bien avant que j’upgrade en dsm 7.2
Tpeltier · 8 février 2024 à 8 h 52 min
Mon DS213j ne me permet pas la mise à jour en 7.2, je suis « bloqué » sur DSM 7.1.1-42962 Update 5.
A priori je ne vois pas ce qui pourrait empêcher Cops de fonctionner en 7.2 mais je ne peux malheureusement pas tester 🙁
Michel Kalcina · 15 mai 2024 à 13 h 24 min
Accès depuis l’extérieur
Tpeltier · 15 mai 2024 à 14 h 11 min
La phrase est un peu vague mais j’imagine qu’il s’agit de savoir comment accéder à Cops depuis internet.
Pour cela il faut disposer de l’adresse IP de votre BOX et faire une redirection de port vers le serveur web de COPS.
Beaucoup de sites/forums traitent de cette opération, donc une recherche rapide sur redirection de port sur internet en fonction du fournisseur utilisé devrait suffire à répondre à la question.
Ceci dit, c’est une bonne idée pour un de mes prochains articles.
Laurent · 17 août 2024 à 15 h 08 min
Bonjour. Je confirme le même problème que Bruno, en 7.2 : l’activation de la partie mot de passe aboutit invariablement à une erreur 500 (internal server error), après avoir passé l’étape du login.
Avant cela marchait
Si je vais sur l’url 192.xx/COPS/login, il me répond « Bad Login Details » après entrée d’un login/passwd valide, suite à encodage htpasswd.
il semble qu’il y ait un pb avec l’encodage htpasswd et cette version ?
Laurent · 17 août 2024 à 15 h 42 min
Après avoir changé le chemin d’accès à mon fichier de mot de passe (j’étais dans un dossier BIN) pour le mettre dans web/access, cela fonctionne… de manière assez mystérieuse.
Ce que j’ai l’impression d ‘avoir fait:
– édition de plusieurs des couples login/passwd sur 2 sites de htpasswd [mais désormais tous marchent]
– changement de l’adresse du fichier .htpasswd dans le fichier .htaccess
Tout fonctionne désormais. Accès local sans passwd et depuis internet avec passwd, depuis ma liseuse kobo (en appelant la page /login dans le 2eme cas, sinon ne fonctionne pas pour la liseuse)
Et merci pour la config pour les 2 bibliothèques, je ne connaissais pas.