Installer Kavita avec Docker
Guide d'installation de Kavita sous Docker.

Au sommaire :
- 1-Qu'est-ce que Kavita ?
- 2-Prérequis
- 3-Installation
- 4-Configuration
- 6-Configuration Traefik
1-Qu'est-ce que Kavita ?
Kavita est une application qui va vous permettre de lire vos mangas, webtoons et comics au format CBR/CBZ/ZIP/RAR/RAR5/7Z/RAW ainsi que vos livres au format EPUB/PDF sur smartphone, tablette ou ordinateur.
Il propose également un mode sombre, un moteur de recherche. différentes méthodes de regroupement et une gestion des utilisateurs et des accès.
Petit bémol, la recherche de métadonnées est disponible uniquement avec Kavita+ (payant) et ça c'est pas très cool.
Pour ma part, j'utilise déjà Calibre-web pour administrer ma riche bibliothèque virtuelle, surtout que ce dernier ne vous demande pas de payer pour télécharger les images et les métadonnées.

Mais la gestion des mangas, webtoons et comics laisse vraiment à désirer dessus et justement, Kavita excelle dans l'affichage de ce type de contenu.
Il excelle tellement bien que la lecture de mangas sur ma tablette m'ont couper l'envie lire les versions papiers alors que je suis pas du tout fan des "scans", c'est pour vous dire à quel point je prend un grand plaisir à lire.
Donc pour ma part, Kavita sert uniquement à cet usage et tourne en permanence sur mon serveur.
Note : pensez bien a activer la lecture de haut en bas en glissant du doigt, vous allez redécouvrir certains de vos mangas et comics, je vous le garantis.



2-Prérequis
Pour déployer Kavita, vous devez disposer d'une machine virtuelle fonctionnant sous Ubuntu Server.
Création de la machine virtuelle :
Virtualisation avec Proxmox VE : Si vous partez de zéro, suivez mon guide détaillé pour virtualiser Ubuntu sur Proxmox VE avec des réglages optimisés.

Automatisation avec Cloud-Init : Pour gagner du temps lors de la configuration, utilisez un template Cloud-Init. Cela permet d'automatiser et de simplifier l'initialisation de vos machines virtuelles. Retrouvez les instructions dans ce guide.

Installation des outils nécessaires :
Docker et Docker Compose : Une fois la machine virtuelle prête, installez Docker et Docker Compose, indispensables pour gérer et orchestrer vos conteneurs. Ce guide vous accompagnera dans l'installation.

Exposition de l'application :
Proxy inverse avec Traefik : Pour exposer vos applications sur Internet de manière sécurisée, configurez un proxy inverse. Traefik est une solution recommandée. Suivez ce guide pour l'installation.

3-Déploiement
Commencez par créer un dossier "docker" à la racine du dossier utilisateur"
mkdir -p ~/docker
Créez un fichier nommé "compose.yml"
touch ~/docker/compose.yml
Ouvrez le fichier "compose.yml" et copiez cette configuration.
networks:
# default network
default:
driver: bridge
kavita:
image: lscr.io/linuxserver/kavita:latest
container_name: kavita
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- ${APPDATA}/kavita:/config
- ${MEDIAS}/manga:/mangas
- ${MEDIAS}/books:/books
- ${MEDIAS}/comics:/comics
networks:
- default
ports:
- 5000:5000
restart: unless-stopped
Pour les options communes :
- image : l'image officielle de Kavita dans sa dernière version
- container_name : le nom du conteneur
- environment : indiquez les variables de base des applications Linuxserver.io comme le PUID (utilisateur), le PGID (groupe) et la TZ (timezone)
- network : le réseau par défaut en local
- ports : 5000
- volumes : indiquez le chemin pour le stockage des données de l'application (${APPDATA}/kavita) et les chemins menant vers vos contenus (mangas, comics, livres)
- restart : unless-stopped
Téléchargez l'image et créez le conteneur.
docker compose pull && docker compose create
Puis démarrez le conteneur.
docker start kavita
4-Configuration
Accédez à l'applications en tapant l'adresse IP suivi du numéro de port (5000).
Ensuite, indiquez les informations suivantes pour créer un compte utilisateur :
- Nom d'utilisateur
- Adresse mail
- Mot de passe
Lorsque vous aurez fini, cliquez sur "Register".

Puis indiquez vos identifiants et cliquer sur "Submit".

Vous devriez tomber sur cette page.

On va commencer par ajouter du contenu. Faites en sorte d'ajouter vos fichiers dans les dossiers manga, comics et books.
Si vous avez des séries complètes, faites en sorte que tout les tomes se trouve dans le même dossier avec une structure identique sinon le scan ne va pas s'effectuer correctement.
Exemple avec la série "Akira".


Cliquez sur l'engrenage.

Allez dans "Library" puis ajouter un de vos dossiers (mangas pour l'exemple).
Indiquez le nom que vous souhaitez et le type de contenus (Manga, Comic, Book, Images).

Indiquez le chemin du dossier en cliquant sur "Browse for Media Folders".

(Optionnel) Vous pouvez ajouter une icône pour customiser votre librairie.

Laissez les options par défaut. Kavita ajoutera les contenus au format compressé, EPUB, PDF et les formats images, gérera les collections, les listes de lecture, surveillera les modifications, etc.

Cliquez sur "Save" et admirez le résultat.



Note : pour les paramètres SMTP, pensez à créer une adresse mail spécifiquement dédié à cet usage et à ne pas mettre la votre.
- Adresse SMTP : le serveur SMTP de Outlook ou Gmail (smtp-mail.outlook.com ou smtp.gmail.com)
- Host Name : le nom de domaine de votre instance Kavita (https://domaine_name). Pensez à cliquer sur "Gmail" ou "Outlook" pour remplir automatiquement les cases "Host" et "Port"
- Sender Address : l'adresse mail de celui qui va recevoir le mail "test"
- Host : le serveur SMTP de Outlook ou Gmail (ou n'importe quel autre)
- Port : 587 (Use SSL on Email Server est coché automatiquement)
- Username : votre adresse mail
- Password : le mot de passe de votre adresse mail

Cliquez sur "Save" et puis sur "Test". Vous devriez recevoir un mail à l'adresse que vous avez indiqué dans "Sender Address". Cela vous servira notamment pour envoyer des mails d'invitation aux utilisateurs qui vont accéder à votre instance.

L'onglet "Statistics" affiche les statistiques de votre instance avec différentes informations utiles.

Rien à modifier dans l'onglet "General". Si vous ajoutez un reverse proxy, la case "Host Name" se remplira automatiquement.
Enfin, cliquez sur l'onglet "Users" pour ajouter des utilisateurs qui pourront accéder à votre instance.
Indiquez l'adresse mail de l'utilisateur, les rôles qu'il aura (cochez Login et Read Only c'est suffisant, Download si vous souhaitez également), à quelle section de la librairie il aura accès (Mangas pour ma part) et chose très utile, vous pouvez également restreindre les contenus selon l'âge de la personne donc si vous souhaitez donner un accès à des enfants c'est très utile.
Cliquez sur "Invite".

Kavita va vous générer un lien d'invitation mais comme vous pouvez le voir, celui affiché sur l'image indique une adresse IP donc la personne ne pourra pas ouvrir le lien donc pensez bien à ajouter un reverse proxy (Traefik dans tout mes tutoriels), un nom de domaine valide et à configurer la partie SMTP).
Cliquez sur "Setup user's account".

Et remplissez comme pour le premier compte le nom d'utilisateur et le mot de passe (utilisez l'extension Bitwarden sur Chrome pour générer un mot de passe suffisamment robuste).

Cliquez sur "Register" et le compte sera actif.
5-Configuration Traefik
Si vous souhaitez exposer votre application sur l'internet public, suivez mon guide sur le reverse proxy Traefik.

On va ajouter les labels habituels ainsi que le middleware "basic-auth" pour protéger un minimum l’accès à l'application.
networks:
# default network
default:
driver: bridge
# Traefik network
web:
name: web
driver: bridge
services:
traefik:
container_name: traefik
image: traefik:v2
restart: always
networks:
- web
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ${APPDATA}/traefik/traefik.yml:/traefik.yml
- ${APPDATA}/traefik/dynamic.yml:/dynamic.yml
- ${APPDATA}/traefik/letsencrypt/acme.json:/acme.json
- ${APPDATA}/traefik/shared:/shared
labels:
- traefik.enable=true
- traefik.http.routers.traefik.entrypoints=websecure
- traefik.http.routers.traefik.rule=Host(`traefik.<domain_name>`)
- traefik.http.routers.traefik.service=api@internal
- "traefik.http.routers.traefik.middlewares=middlewares-basic-auth@file"
kavita:
image: lscr.io/linuxserver/kavita:latest
container_name: kavita
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- ${APPDATA}/kavita:/config
- ${MEDIAS}/manga:/manga
- ${MEDIAS}/books:/books
- ${MEDIAS}/comics:/comics
networks:
- t2_proxy
# ports:
# - 5000:5000
restart: unless-stopped
labels:
- traefik.enable=true
- traefik.http.routers.kavita.entrypoints=websecure
- traefik.http.routers.kavita.rule=Host(`kavita.<domain_name>`)
- traefik.http.routers.kavita.service=kavita-svc
- traefik.http.services.kavita-svc.loadbalancer.server.port=5000
- traefik.http.routers.kavita.tls.certresolver=letsencrypt