322 lines
8.1 KiB
Markdown
322 lines
8.1 KiB
Markdown
# 🎵 Deezer Downloader for Nextcloud
|
||
|
||
## 🧩 Description
|
||
|
||
Ce projet a pour objectif d’évoluer vers une **application Nextcloud native**.
|
||
Pour le moment, il s’agit d’une **application externe** avec dossier partagé et commande SSH pour interagir avec Nextcloud.
|
||
|
||
Le projet est basé sur le dépôt GitHub original : [kmille/deezer-downloader](https://github.com/kmille/deezer-downloader).
|
||
👉 Un grand merci à ses auteurs pour leur excellent travail !
|
||
|
||
---
|
||
|
||
## ❓ Objectif
|
||
|
||
L’idée est d’intégrer à **Nextcloud** un **raccourci** permettant aux utilisateurs de **télécharger leurs musiques, albums et playlists** directement depuis leur espace Nextcloud.
|
||
Les téléchargements sont accessibles depuis la section **Fichiers**.
|
||
Il est également possible de choisir un répertoire dans le dossier de synchronisation de l’application interne **Musique**, afin d’écouter les morceaux depuis une appli compatible **Subsonic** ou équivalent.
|
||
|
||
---
|
||
|
||
## 🔧 Modifications apportées par rapport au dépôt original
|
||
|
||
- 🔐 Utilisation du **JWT Nextcloud** pour récupérer les informations de l’utilisateur connecté.
|
||
- 📂 Téléchargement dans le **dossier personnel** de l’utilisateur : `Music/DeezerDl`.
|
||
- 🚫 Vérification de la **connexion Nextcloud** : si non connecté → retour **403 Forbidden**.
|
||
|
||
---
|
||
|
||
# 🧱 Installation sur Nextcloud (Debian 12)
|
||
|
||
## ⚙️ 1. Préparer le conteneur DeezerDownloader
|
||
|
||
### 🔄 Mise à jour
|
||
```bash
|
||
apt update && apt upgrade -y
|
||
````
|
||
|
||
### 📁 Monter le dossier Nextcloud
|
||
|
||
Créer un point de montage vers le répertoire de données Nextcloud :
|
||
|
||
```
|
||
mp0: /Data/NAS/nextcloud/data_directory/data/,mp=/nextcloud_user_data
|
||
```
|
||
|
||
---
|
||
|
||
## 👤 2. Créer l’utilisateur `www-data`
|
||
|
||
### Vérifier s’il existe déjà
|
||
|
||
```bash
|
||
id www-data
|
||
```
|
||
|
||
S’il n’existe pas :
|
||
|
||
```bash
|
||
groupadd www-data
|
||
useradd -r -s /usr/sbin/nologin -g www-data www-data
|
||
```
|
||
|
||
### Synchroniser l’UID et le GID avec ceux du conteneur Nextcloud
|
||
|
||
```bash
|
||
ls -ln /nextcloud_user_data/
|
||
# Exemple de sortie :
|
||
# drwxr-xr-x 5 100033 100033 5 Oct 19 14:57 Parent
|
||
```
|
||
|
||
Ici, l’UID et le GID sont `100033` :
|
||
|
||
```bash
|
||
usermod -u 100033 www-data
|
||
groupmod -g 100033 www-data
|
||
```
|
||
|
||
Vérifier :
|
||
|
||
```bash
|
||
id www-data
|
||
# uid=100033(www-data) gid=100033(www-data) groups=100033(www-data)
|
||
```
|
||
|
||
---
|
||
|
||
## 🐍 3. Installer Python et créer le venv
|
||
|
||
Installer Python et ses dépendances :
|
||
|
||
```bash
|
||
apt install -y python3 python3-venv python3-pip sudo ffmpeg
|
||
```
|
||
|
||
Créer le venv :
|
||
|
||
```bash
|
||
mkdir -p /var/www/venv
|
||
chown www-data:www-data /var/www/venv
|
||
chmod 750 /var/www/venv
|
||
sudo -u www-data python3 -m venv /var/www/venv
|
||
```
|
||
|
||
Vérifier le fonctionnement :
|
||
|
||
```bash
|
||
sudo -u www-data bash
|
||
source /var/www/venv/bin/activate
|
||
python --version
|
||
pip --version
|
||
deactivate
|
||
```
|
||
|
||
---
|
||
|
||
## 📦 4. Installer DeezerDownloader
|
||
|
||
### Cloner le dépôt
|
||
|
||
```bash
|
||
sudo mkdir -p /var/www/app
|
||
sudo chown www-data:www-data /var/www/app
|
||
apt install -y git
|
||
sudo -u www-data git clone https://git.bonisco.fr/Grizouille/Deezer-Downloader-Nextcloud.git /var/www/app
|
||
```
|
||
|
||
### Installer les dépendances
|
||
|
||
```bash
|
||
sudo -u www-data /var/www/venv/bin/pip install /var/www/app
|
||
sudo -u www-data /var/www/venv/bin/pip install yt-dlp paramiko PyJWT
|
||
```
|
||
|
||
### Générer et modifier le fichier de configuration
|
||
|
||
```bash
|
||
sudo -u www-data bash
|
||
source /var/www/venv/bin/activate
|
||
deezer-downloader --show-config-template > /var/www/app/config.ini
|
||
deactivate
|
||
```
|
||
|
||
📝 Ensuite, édite `/var/www/app/config.ini` (les explications sont dans le fichier).
|
||
|
||
---
|
||
|
||
## ⚙️ 5. Créer un service systemd
|
||
|
||
Créer le fichier `/etc/systemd/system/deezer_downloader.service` :
|
||
|
||
```ini
|
||
[Unit]
|
||
Description=Deezer Downloader Service
|
||
After=network.target
|
||
|
||
[Service]
|
||
User=www-data
|
||
Group=www-data
|
||
WorkingDirectory=/var/www/app
|
||
ExecStart=/var/www/venv/bin/deezer-downloader --config /var/www/app/config.ini
|
||
Restart=on-failure
|
||
Environment="PATH=/var/www/venv/bin:/usr/bin"
|
||
Environment=PYTHONUNBUFFERED=1
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
```
|
||
|
||
|
||
|
||
---
|
||
|
||
## 🔧 6. Configurer les permissions Nextcloud
|
||
|
||
Dans le conteneur Nextcloud :
|
||
|
||
```bash
|
||
adduser nextclouddeezer
|
||
apt install sudo
|
||
nano /etc/sudoers
|
||
```
|
||
|
||
Ajouter à la fin du fichier :
|
||
|
||
```
|
||
nextclouddeezer ALL=(www-data) NOPASSWD: /usr/bin/php
|
||
```
|
||
|
||
Cela permet à l’utilisateur `nextclouddeezer` d’exécuter des commandes PHP sous `www-data`.
|
||
|
||
➡️ Ensuite, dans le `config.ini` du conteneur DeezerDownloader, renseigne le mot de passe de cet utilisateur.
|
||
|
||
Pour avoir la clé public pour décrypter le JWT tapé la ligne suivante sur le container nextcloud et ajouter le au fichier de config.
|
||
|
||
```
|
||
sudo -u www-data php occ config:app:get external jwt_token_pubkey_es256
|
||
```
|
||
|
||
---
|
||
|
||
Bien sûr 👍 Voici ta section corrigée, reformulée et un peu embellie avec des emojis et une mise en forme homogène :
|
||
|
||
---
|
||
|
||
## ⚙️ 7. Activer et démarrer le service
|
||
|
||
🔁 Recharge systemd, active le service au démarrage et lance-le immédiatement :
|
||
|
||
```bash
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl enable deezer_downloader.service
|
||
sudo systemctl start deezer_downloader.service
|
||
```
|
||
|
||
📋 Pour vérifier les logs en direct :
|
||
|
||
```bash
|
||
sudo journalctl -u deezer_downloader.service -f
|
||
```
|
||
|
||
---
|
||
|
||
## 🌐 8. Intégrer Deezer Downloader dans l’interface Nextcloud
|
||
|
||
1. Ouvre **Paramètres d’administration** → **Sites externes** dans Nextcloud.
|
||
2. Clique sur ➕ **Ajouter un nouveau site**.
|
||
3. Renseigne l’URL suivante :
|
||
|
||
```
|
||
https://votre.url.fr/deezer/?jwt={jwt}
|
||
```
|
||
|
||
(Remplace `votre.url.fr` par ton domaine ou IP publique.)
|
||
4. (Optionnel) Ajoute une **icône personnalisée** pour le menu :
|
||
🖼️ L’image se trouve ici → `doc/deezerDownloader.png`
|
||
|
||
💡 Une fois ajouté, le lien apparaîtra directement dans la barre latérale de Nextcloud pour tous les utilisateurs autorisés.
|
||
|
||
---
|
||
|
||
Parfait 😎 Voici ta section reformulée, corrigée et embellie avec des emojis et une structure plus claire tout en gardant ton contenu technique inchangé :
|
||
|
||
---
|
||
|
||
## 🧠 9. Bonus : configuration du reverse proxy Nginx
|
||
|
||
💡 Pour éviter de gérer un énième nom de domaine **et** contourner les problèmes de **CORS**, j’ai simplement ajouté un bloc de configuration dans **le reverse proxy Nginx** qui gère déjà les certificats SSL de **Nextcloud**.
|
||
|
||
Voici le **bloc ajouté** à la configuration Nginx de Nextcloud :
|
||
|
||
```nginx
|
||
location /deezer/ {
|
||
set_real_ip_from 192.168.10.8/24;
|
||
real_ip_header proxy_protocol;
|
||
proxy_pass http://192.168.10.12:5000/;
|
||
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Real-IP $remote_addr;
|
||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||
proxy_set_header X-Forwarded-Proto $scheme;
|
||
|
||
proxy_http_version 1.1;
|
||
proxy_set_header Upgrade $http_upgrade;
|
||
proxy_set_header Connection "upgrade";
|
||
proxy_set_header X-Forwarded-Host $server_name;
|
||
proxy_set_header X-Forwarded-Server $host;
|
||
}
|
||
```
|
||
|
||
🔀 **Explication rapide :**
|
||
|
||
* `location /deezer/` → redirige toutes les requêtes Nextcloud vers ton conteneur **DeezerDownloader**.
|
||
* `proxy_pass http://192.168.10.12:5000/` → correspond à l’adresse interne de ton service Python.
|
||
* Les directives `proxy_set_header` assurent la transmission correcte des en-têtes HTTP et des IP réelles.
|
||
|
||
✅ Résultat : tu peux accéder à **DeezerDownloader** directement depuis ton domaine Nextcloud, par exemple :
|
||
|
||
```
|
||
https://cloud.mondomaine.fr/deezer/
|
||
```
|
||
|
||
…sans erreur CORS, ni besoin d’un certificat supplémentaire.
|
||
|
||
|
||
---
|
||
|
||
# 💻 Développement sous Windows (VS Code)
|
||
|
||
Autoriser l’exécution de scripts PowerShell :
|
||
|
||
```powershell
|
||
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
|
||
```
|
||
|
||
Activer le venv :
|
||
|
||
```powershell
|
||
.\.venv\Scripts\Activate.ps1
|
||
```
|
||
|
||
Installer et exécuter le projet :
|
||
|
||
```powershell
|
||
pip install poetry
|
||
git clone https://github.com/kmille/deezer-downloader.git
|
||
cd deezer-downloader
|
||
poetry install
|
||
poetry run deezer-downloader --show-config-template > settings.ini
|
||
```
|
||
|
||
Lancer le serveur :
|
||
|
||
```powershell
|
||
poetry run deezer-downloader --config .\deezer_downloader\settings.ini
|
||
```
|
||
|
||
---
|
||
|
||
✍️ **Auteur** : [Grizouille](https://git.bonisco.fr/Grizouille)
|
||
💡 Basé sur le travail de [kmille/deezer-downloader](https://github.com/kmille/deezer-downloader)
|
||
|