# đŸŽ” 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 ``` --- ## ⚙ 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. --- ## 🧠 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)