SeedBoxSync

SeedboxSync: Synchronise automatiquement ta seedbox avec ton NAS

Si tu utilises une seedbox pour tes téléchargements torrents, tu sais à quel point ça peut être pénible de devoir transférer les fichiers manuellement vers ton NAS. C’est exactement pour ça que j’ai créé SeedboxSync : un outil simple et léger qui automatise cette étape.

SeedboxSync se connecte à ta seedbox via SFTP, et copie automatiquement les fichiers sur ton NAS. Fini les transferts manuels ou les scripts maison bricolés.

L’avantage de SeedboxSync, c’est qu’il ne télécharge un fichier qu’une seule fois. Même si tu as un script qui le renomme ou le déplace ensuite (un soft de type *arr), il ne sera pas téléchargé à nouveau. Tout ça grâce à une base de données SQLite intégrée qui garde en mémoire les fichiers déjà récupérés.

Installation avec Docker

Depuis la version 3.1, SeedboxSync intègre un support complet de Docker. Docker est désormais la méthode d’installation recommandée.

Le conteneur utilise s6-overlay pour une gestion propre des services, des logs, et des tâches planifiées.

Pas besoin de cron externe : la synchronisation est directement intégrée dans le conteneur :

  • La tâche de synchronisation « blackhole » s’exécute toutes les minutes
  • La tâche de synchronisation depuis la seedbox s’exécute toutes les 15 minutes

De plus, le container permet de choisir l’utilisateur et le groupe (PUID & PGID) qui va faire tourner le service.

services:
  seedboxsync:
    container_name: seedboxsync
    hostname: seedboxsync
    image: ghcr.io/llaumgui/seedboxsync:latest
    restart: unless-stopped
    environment:
      TZ: 'Europe/Paris'
      PUID: 1000
      PGID: 100
    volumes:
      - /data/seedboxsync/config:/config
      - /data/seedboxsync/watch:/watch
      - /data/seedboxsync/downloads:/downloads

Lors du premier démarrage, un fichier config.yaml est automatiquement généré dans le dossier /config. Il contient une configuration par défaut que tu peux adapter à ta seedbox. Pas besoin de créer quoi que ce soit à la main : il suffit de modifier les valeurs selon ton environnement.

### SeedboxSync Configuration Settings
---

#
# Information about your seedbox
#
seedbox:

  ### Information about your seedbox connection
  # host: my-seedbox.ltd
  # port: 22
  # login: me
  # password: p4sw0rd
  # timeout: false

  ### For the moment, only sftp
  # protocol: sftp

  ### Chmod torrent after upload (false :  disable)
  ### Use octal notation like https://docs.python.org/3.4/library/os.html#os.chmod
  # chmod: 0o777
  # chmod: false

  ### Use a tempory directory (you must create it !)
  # tmp_path: ./tmp

  ### Your "watch" folder you must create it!)
  # watch_path: ./watch

  ### Your finished folder you must create it!)
  # finished_path: ./files

  ### Exclude part files
  # part_suffix: .part

  ### Exclude pattern from sync
  ### Use re syntaxe: https://docs.python.org/3/library/re.html
  ### Example: .*missing$|^\..*\.swap$
  # exclude_syncing:


#
# Information about local environment (NAS ?)
#
local:

  ### Your local "watch" folder
  watch_path: /watch

  ### Path where download files
  download_path: /downloads/

  ### Use local sqlite database for store downloaded files
  db_file: /config/seedboxsync.db


#
# PID and lock management to prevent several launches
#
pid:

  ### PID for blackhole sync
  blackhole_path: /config/lock/blackhole.pid

  ### PID for seedbox downloaded sync
  download_path: /config/lock/download.pid


#
# Healthchecks ping service
#
healthchecks:

  ### sync seedbox part
  sync_seedbox:
    ## Enable or disable service
    enabled: false

    ## Ping URL
    # ping_url:

  ### sync blackhole part
  sync_blackhole:
    ## Enable or disable service
    enabled: false

    ## Ping URL
    # ping_url:


#
# SeedboxSync tuning
#
seedboxsync:

  ### Toggle application level debug (does not toggle framework debugging)
  # debug: false

  ### Where external (third-party) plugins are loaded from
  # plugin_dir: /var/lib/seedboxsync/plugins/

  ### Where all plugin configurations are loaded from
  # plugin_config_dir: /etc/seedboxsync/plugins.d/

  ### The log handler label
  # log_handler: colorlog


log.colorlog:

  ### Where the log file lives (no log file by default)
  # file: null

  ### The level for which to log.  One of: info, warning, error, fatal, debug
  # level: info

  ### Whether or not to log to console
  # to_console: true

  ### Whether or not to rotate the log file when it reaches `max_bytes`
  # rotate: false

  ### Max size in bytes that a log file can grow until it is rotated.
  # max_bytes: 512000

  ### The maximum number of log files to maintain when rotating
  # max_files: 4

Utiliser SeedboxSync en ligne de commande

Si tu souhaites utiliser SeeeboxSync en ligne de commande, tu peux te faire un alias ou utiliser un script :

#!/bin/bash

CONTAINER_NAME="seedboxsync"
UUID=1000
COMMAND="$@"

docker exec -it -u ${UUID} ${CONTAINER_NAME} seedboxsync ${COMMAND}

Une fois ce script en place, tu peux utiliser la commande seedboxsync pour plein de choses :

  • Lister les 20 derniers fichiers téléchargés depuis la seedbox
$ seedboxsync search downloaded -n 20

|   Id | Path                        | Finished                   | Size     |
|------+-----------------------------+----------------------------+----------|
|  592 | JustoEtiamPretium.xls       | 2020-05-25 18:38:40.566157 | 197.9KiB |
|  593 | Justo.mp3                   | 2020-05-25 18:38:40.621168 | 195.8KiB |
|  594 | Eget.txt                    | 2020-05-25 18:38:40.676978 | 103.7KiB |
|  595 | Porttitor.tiff              | 2020-05-25 18:38:40.735913 | 165.7KiB |
|  596 | Curae.xls                   | 2020-05-25 18:38:40.816887 | 118.7KiB |
|  597 | SemSedSagittis.gif          | 2020-05-25 18:38:40.895089 | 308.1KiB |
|  598 | Pellentesque.ppt            | 2020-05-25 18:38:40.961770 | 127.8KiB |
|  599 | CommodoVulputateJusto.tiff  | 2020-05-25 18:38:41.024448 | 130.0KiB |
|  600 | MorbiVestibulumVelit.txt    | 2020-05-25 18:38:41.079963 | 63.4KiB  |
|  601 | HabitassePlateaDictumst.png | 2020-05-25 18:38:41.129177 | 91.5KiB  |
|  602 | LiberoNullam.tiff           | 2020-05-25 18:38:41.190858 | 385.8KiB |
|  603 | CondimentumNeque.ppt        | 2020-05-25 18:38:41.259061 | 181.2KiB |
|  604 | AOdio.avi                   | 2020-05-25 18:38:41.320748 | 112.3KiB |
|  605 | CubiliaCurae.ppt            | 2020-05-25 18:38:41.369097 | 126.9KiB |
|  607 | SedNislNunc.xls             | 2020-05-25 18:38:41.487873 | 184.2KiB |
|  608 | DonecDiamNeque.xls          | 2020-05-25 18:38:41.537864 | 167.6KiB |
|  609 | Nulla.xls                   | 2020-05-25 18:38:41.599253 | 129.8KiB |
|  610 | LacusMorbiSem.ppt           | 2020-05-25 18:38:41.662167 | 142.9KiB |
|  611 | Nulla.avi                   | 2020-05-25 18:38:41.719521 | 57.9KiB  |
|  612 | CuraeDonec.avi              | 2020-05-25 18:38:41.780194 | 116.1KiB |
  • Lister les 10 derniers torrents envoyés à la seedbox:
$ seedboxsync search uploaded

|   Id | Name                     | Sent datetime              |
|------+--------------------------+----------------------------|
|  241 | Imperdiet.torrent        | 2017-10-16 16:09:02.713701 |
|  242 | ConsequatIn.torrent      | 2017-10-16 18:46:02.192430 |
|  243 | Porttitor.torrent        | 2017-10-16 21:10:03.878288 |
|  244 | AcLobortisVel.torrent    | 2017-10-16 21:10:04.545168 |
|  245 | MolestieNibh.torrent     | 2017-10-16 21:12:03.441145 |
|  246 | TurpisDonec.torrent      | 2017-10-16 21:12:04.064668 |
|  247 | SuscipitLigulaIn.torrent | 2017-10-16 21:13:02.851925 |
|  248 | Volutpat.torrent         | 2017-10-16 21:14:02.620927 |
|  249 | UtOdioCras.torrent       | 2017-10-16 21:17:02.942154 |
|  250 | DolorMorbi.torrent       | 2017-10-16 21:20:03.583827 |
  • Lister les téléchargements en cours :
$ seedboxsync search progress

|   Id | Path                 | Started                    | Size     | Progress   | ETA   |
|------+----------------------+----------------------------+----------+------------+-------|
|  588 | Ante.doc             | 2020-05-25 18:38:40.084515 | 10.5MiB  | 0%         | -     |
|  606 | EgetSemperRutrum.avi | 2020-05-25 18:38:41.407392 | 461.6KiB | 0%         | -     |
  • Nettoyer la liste des téléchargements en cours :
$ seedboxsync clean progress
In progress list cleaned. 2 line(s) deleted
  • Effacer un fichier de la liste des téléchargements pour pouvoir relance le rapatriement de ce dernier :
$ seedboxsync clean downloaded 612
Torrent with id 612 was removed

Et la version 3.2 qui arrive bientôt (à vrai dire, c’est déjà la branche main) offrira des outils de stats :

$ seedboxsync stats by-month

| Month   | Nb files | Total size   |
|---------+----------+--------------|
| 2017-08 | 567      | 427.8GiB     |
...
| 2025-04 | 226      | 441.6GiB     |   
| 2025-05 | 380      | 396.1GiB     |
$ seedboxsync stats by-year

| Year | Nb files | Total size |
|------+----------+------------|
| 2017 | 1453     | 964.6GiB   |
| 2018 | 4989     | 1.4TiB     |
| 2019 | 2135     | 2.3TiB     |
| 2020 | 3159     | 1.7TiB     |
| 2021 | 3023     | 2.7TiB     |
| 2022 | 2938     | 2.8TiB     |
| 2023 | 2965     | 2.5TiB     |
| 2024 | 4529     | 4.0TiB     |
| 2025 | 2306     | 1.8TiB     |

Alors oui, il existe d’autres outils comme Syncthing, mais je trouve que le mien est plus simple et offre une bonne alternative, surtout si tu veux juste synchroniser proprement une seedbox avec un NAS.

Et si tu regardes mes stats : je l’utilise depuis 2017 sans souci. Le plus gros frein à son adoption, c’était clairement l’installation… Mais depuis la version 3.1 et grâce à Docker, c’est devenu ultra simple à mettre en place !

Pour la suite ça se passe sur le site officiel ou sur la page Gitub.

Avatar de Guillaume Kulakowski

À propos de l’auteur

Commentaires

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. Découvrez comment les données de vos commentaires sont traitées.

Derniers articles sur le journal

  • SeedboxSync v4.1 : Authentification OIDC, Gravatar et refonte de l’administration
    Découvrez les nouveautés de SeedboxSync v4.1 : intégration d'un système d'authentification natif et OIDC (SSO), support de Gravatar, gestion des utilisateurs en CLI, formulaires Flask-WTForm et transition vers Peewee-Migrate.
  • De Jellystat à Jellydash : moderniser le suivi de mon serveur Jellyfin
    Pourquoi et comment j'ai remplacé Jellystat par Jellydash pour le suivi des statistiques de mon serveur Jellyfin. Retour d'expérience sur la découverte de cet outil moderne, léger et prometteur repéré dans la newsletter selfh.st.
  • SeedboxSync 4.0 : Fusion de l’IHM et du CLI
    La v4.0.0 de SeedboxSync marque un tournant majeur : fusion du CLI et du frontend en une seule application, migration de la configuration en base de données, planificateur Python natif et passage à SQLite WAL. Tour d'horizon des nouveautés et des changements d'architecture.
  • Modernisation du tooling dev sur SeedboxSync : Just, pnpm, uv & Ruff
    SeedboxSync fait peau neuve côté tooling ! Retour sur la modernisation de mon environnement de dev : abandon du bon vieux Makefile au profit de Just, transition vers pnpm pour un gain de temps spectaculaire côté frontend, et adoption de uv et Ruff pour booster l'écosystème Python. Moins de friction, plus de vitesse : découvrez le détail de cette mise à jour.

Articles à la une