From d4e0e34d32d859c74cc0904e2fa21d55be27e266 Mon Sep 17 00:00:00 2001 From: unfr Date: Wed, 13 Aug 2025 08:45:18 +0200 Subject: [PATCH] reecriture README via IA --- readme.md | 304 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 192 insertions(+), 112 deletions(-) diff --git a/readme.md b/readme.md index f32192c..ba41499 100644 --- a/readme.md +++ b/readme.md @@ -1,83 +1,88 @@ -## Postauto -### Pour poster automatiquement avec une simple commande depuis un VPS , serveur dédié ou seedbox. +# Postauto +### Poster automatiquement via une simple commande depuis un VPS, dédié ou seedbox -Postauto est un script permettant via une simple commande d'ajouter un fichier à traiter dans une base de données. -Une fois votre fichier ajouté il sera traité automatiquement. +**Postauto** est un ensemble de scripts (bash + une petite UI web Node.js) qui : +- génèrent les **PAR2** +- postent via **Nyuu** (avec **obfuscation**) +- envoient automatiquement sur le site (MediaInfo/BDInfo inclus) +- proposent un **suivi sur une page web** -#### Possibilités. +## Sommaire +- [Prérequis](#prérequis) +- [Installation](#installation) +- [Configuration (bash)](#configuration-bash--homeuserautopostconfsh) +- [Configuration (UI web)](#configuration-ui-web--homeuserautopostconfigjs) +- [Création de la base](#création-de-la-base) +- [Commandes CLI](#commandes-cli) +- [Interface web](#interface-web) + - [Configuration Nginx](#configuration-nginx) +- [Mise à jour](#mise-à-jour) +- [Désinstallation](#désinstallation) +- [Limitations](#limitations) +- [Dépannage](#dépannage) -- Création des PAR2 -- Post via NYUU ( obfuscation totale) -- ✨Envoi automatique sur le site✨ (avec MediaInfo/BDInfo directement ajouté) -- Suivi sur une page web +## Prérequis +- Linux (script bash) +- Accès **SSH** (sur `/home/$USER`) +- Outils de base : `basename`, `curl`, `screen`, `nginx` (pour l’UI web) +- Testé avec : + - VPS / dédiés ✅ + - Seedbox : Ultra.cc ✅, Whatbox ✅, Dediseedbox ❌ (limitations) -#### Limitations. +> L’installateur installe/emballe tout le reste (mediainfo, sqlite3 si besoin, 7z, BDInfo, Nyuu, ParPar, Node v22, modules npm…). - - [ ] Le script est écrit en bash il ne tourne donc que sous linux. - - [ ] Il faut impérativement un accès SSH sur /home/$USER -- VPS et Dédié pas de souci de ce coté. -- Seedbox nous avons testé via ultracc whatbox et dediseedbox ( ultracc et whatbox ok, dediseedbox pas ok). - - [ ] Il faut avoir les applications suivantes de disponibles. +## Installation -| Commande | README | -| ------ | ------ | -| basename | Normalement installé par défaut | -| curl | à installer si nécessaire | -| screen | à installer si nécessaire | -| nginx | à installer si vous désirez utiliser l'interface de suivi | - -#### Installation. -##### 2 solutions possible - -- vous disposez des droits sudo : - -```sh -wget -qO install.sh https://tig.unfr.pw/UNFR/postauto/raw/branch/main/install.sh && chmod +x install.sh && sudo --preserve-env=HOME ./install.sh -``` -> Cela installera via les paquets debian sqlite et mediinfo (meilleur compatibilité) - -- vous ne disposez pas des droits sudo : - -```sh -wget -qO install.sh https://tig.unfr.pw/UNFR/postauto/raw/branch/main/install.sh && chmod +x install.sh && ./install.sh +### Avec droits sudo (recommandé) +Installe mediainfo/sqlite via paquets Debian (meilleure compatibilité) : +```bash +wget -qO install.sh https://tig.unfr.pw/UNFR/postauto/raw/branch/main/install.sh \ + && chmod +x install.sh \ + && sudo --preserve-env=HOME ./install.sh ``` -#### Update - -```sh -postauto stop && wget -qO update.sh https://tig.unfr.pw/UNFR/postauto/raw/branch/main/update.sh && chmod +x update.sh && ./update.sh +### Sans sudo +Utilise des binaires « standalone » dans `~/bin` : +```bash +wget -qO install.sh https://tig.unfr.pw/UNFR/postauto/raw/branch/main/install.sh \ + && chmod +x install.sh \ + && ./install.sh ``` -##### Update passage EN 7z (12/03/2024) +## Configuration (bash) — `/home/$USER/autopost/conf.sh` -```sh -cd autopost -wget -qO compress.sh https://tig.unfr.pw/UNFR/postauto/raw/branch/main/autopost/compress.sh && chmod +x compress.sh && ./compress.sh -``` +> Variables **obligatoires** (placeholders à remplacer), + règles **sqlite/mysql**. -#### Configuration. -Éditer le fichier /home/$USER/autopost/conf.sh -```sh +```bash #!/bin/bash -#CONFIG A MODIF +# CONFIG À MODIFIER URL_API="A NOUS DEMANDER SUR DISCORD" APIKEY="A RETROUVER DANS VOTRE PROFIL" -DB_FILE="/home/$USER/autopost/base_autopost.db" + DOSSIER_GLOBAL="/home/$USER/" DOSSIER_NFO="/home/$USER/autopost/mediainfo/" DOSSIER_LOGS="/home/$USER/autopost/logs/" -DOSSIER_NZB_ATTENTE="/home/$USER/ATTENTE/" -DOSSIER_NZB_FINAL="/home/$USER/FINIS/" +DOSSIER_NZB_ATTENTE="/home/$USER/autopost/ATTENTE/" +DOSSIER_NZB_FINAL="/home/$USER/autopost/FINIS/" -#CONFIG FOURNISSEUR USENET DE POST +# cp -rl | cp -rs | ln -s | mv | cp +MOVE_CMD="cp -rl" + +# CONFIG FOURNISSEUR USENET DE POST (requis) NG_HOST="" NG_PORT="" NG_USER="" NG_PASS="" NG_NBR_CONN="" -dbtype="sqlite" # ou "mysql" +# Base de données +dbtype="sqlite" # ou "mysql" +MYSQL_TABLE="release" # OBLIGATOIRE + +# sqlite -> DB_FILE requis, champs MySQL facultatifs DB_FILE="/home/$USER/autopost/base_autopost.db" + +# mysql -> champs MySQL requis, DB_FILE facultatif MYSQL_HOST="" MYSQL_PORT= MYSQL_USER="" @@ -85,61 +90,50 @@ MYSQL_PASS="" MYSQL_DB="" ``` -#### Création du fichier de base de données. -```sh -postauto createdb -``` +**Rappels :** +- Si `dbtype="sqlite"` → **`DB_FILE` requis** ; `MYSQL_*` facultatifs. +- Si `dbtype="mysql"` → **`MYSQL_HOST/PORT/USER/PASS/DB` requis** ; `DB_FILE` facultatif. +- Les dossiers `DOSSIER_*` doivent **exister**. -#### Commande +## Configuration (UI web) — `/home/$USER/autopost/config.js` -| commande | README | -| ------ | ------ | -| start | Permet de démarrer le script. | -| stop | Permet d'arrêter le script. | -| restart | Permet de redémarrer le script. | -| show | Permet de rentrer dans la fenêtre d'exécution du script (ctrl a+d pour en sortir). | -| status | Voir les 500 derniers enregistrements du fichier DB avec leur status (Attente, Echec, Succès) (Attente, Echec, Succès). | -| add | Ajouté un fichier MKV à traiter dans la base (doit être suivi du chemin complet de votre fichier). | -| createdb | Permet de créer la DB (si vous souhaitez écraser la DB une confirmation vous sera demandé). | -| log | Permet de voir le log de ppost d'un fichier précis. | -| check | Permet de vérifier la présence d'un fichier sur le site. | -| update | Permet d'updater le script. | +> Champs **obligatoires** + règles **sqlite/mysql** + proxy/HTTPS. - -#### interface web - -Une interface est disponible, il vous faut nginx pour que celle-ci fonctionne - -#### Configuration de l'interface web. -Éditer le fichier /home/$USER/autopost/config.js ```js const path = require('path'); module.exports = { - // Port sur lequel le serveur écoute - // Attention si vous êtes sur une seedbox de bien choisir un port laisser libre par votre hébergeur - // chez ultracc par exemple la commande est app-ports free - port: Voir indications ci dessus, + // Réseau + port: 3000, // ⚠️ Choisissez un port autorisé par votre hébergeur (Ultra.cc: `app-ports free`) + name: 'NomDuNoeud', // Nom affiché dans l’UI + background_color: 'slate-900', // Tailwind color: https://tailwindcss.com/docs/colors - // Chemin vers le fichier de base de données SQLite + // Base de données + dbtype: 'sqlite', // 'sqlite' ou 'mysql' + + // sqlite -> dbFile requis dbFile: path.join(__dirname, 'base_autopost.db'), - - //MySQL + + // mysql -> champs requis DB_HOST: '', - DB_PORT: , + DB_PORT: 3306, DB_USER: '', DB_PASSWORD: '', DB_DATABASE: '', + DB_TABLE: 'release', - // Chemins personnalisables pour les dossiers + // Dossiers finishdirectory: path.join(__dirname, 'FINIS'), - logdirectory: path.join(__dirname, 'logs'), - infodirectory: path.join(__dirname, 'mediainfo'), + logdirectory: path.join(__dirname, 'logs'), + infodirectory: path.join(__dirname, 'mediainfo'), - // Secret pour la configuration des sessions "curl -L pw.vdx.sh/w/32" - sessionSecret: 'Voir commande ci dessus', + // Sessions (générer un secret : `curl -L pw.vdx.sh/w/32`) + sessionSecret: 'collez-ici-le-secret-généré', + trustProxy: 0, // 0 = pas de proxy, 1 = Nginx, 2 = Cloudflare->Nginx, etc. + cookieSecure: false, // true si HTTPS bout-à-bout (reverse proxy compris) + sessionStorePath: './sessions', - // Informations d'authentification + // Auth UI (à changer !) auth: { username: 'user', password: 'pass' @@ -147,37 +141,123 @@ module.exports = { }; ``` -##### Configuration de nginx +**Rappels :** +- `dbtype: 'sqlite'` → **`dbFile` requis** ; `DB_*` facultatifs. +- `dbtype: 'mysql'` → **`DB_HOST/PORT/USER/PASSWORD/DATABASE` requis** ; `dbFile` facultatif. +- Si vous êtes derrière Nginx/Cloudflare, ajustez **`trustProxy`** et **`cookieSecure`**. +- Les dossiers `finishdirectory`, `logdirectory`, `infodirectory` doivent **exister**. -Ajouter ce bloc dans la configuration de votre nom de domaine +## Création de la base +```bash +postauto createdb +``` + +## Commandes CLI + +| Commande | Description | +|-----------|-------------| +| `start` | Démarre le script principal. | +| `stop` | Arrête le script. | +| `restart` | Redémarre le script. | +| `show` | Entre dans la session `screen` (Ctrl+A puis D pour détacher). | +| `status` | Affiche les 500 derniers enregistrements avec leur statut (Attente / Échec / Succès). | +| `add` | Ajoute un **fichier MKV** à traiter (chemin complet requis). | +| `createdb`| Crée (ou recrée, avec confirmation) la base de données. | +| `log` | Affiche le log de post pour un fichier donné. | +| `check` | Vérifie la présence d’un fichier sur le site. | +| `update` | Met à jour les scripts. | + +> Autocomplétion bash fournie (install/update l’activent automatiquement). + +## Interface web + +- L’installateur installe **Node v22** (via `nvm`) et tous les modules requis. +- Lancer l’UI (ex. en arrière-plan) : + ```bash + postauto restart + ``` + (ou configurez un service systemd / `pm2` selon vos préférences) + +### Configuration Nginx + +> **Important :** les routes statiques sont servies sous **`/autopost`**. ```nginx +# Remplacez 127.0.0.1:3000 par le host:port de votre UI (voir config.js: port) location /autopost/ { - proxy_pass http://127.0.0.1:XXXXX; - proxy_http_version 1.1; - proxy_set_header X-Forwarded-Host $http_host; + proxy_pass http://127.0.0.1:3000; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Real-IP $remote_addr; } -location /js/ { - proxy_pass http://127.0.0.1:XXXXX; - proxy_http_version 1.1; - proxy_set_header X-Forwarded-Host $http_host; + +location /autopost/js/ { + proxy_pass http://127.0.0.1:3000; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Real-IP $remote_addr; } -location /jquery/ { - proxy_pass http://127.0.0.1:XXXXX; - proxy_http_version 1.1; - proxy_set_header X-Forwarded-Host $http_host; + +location /autopost/jquery/ { + proxy_pass http://127.0.0.1:3000; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Real-IP $remote_addr; } ``` -> Pensez à bien remplacer XXXXX par le port que vous avez mis dans votre config.js +> Réglez **`trustProxy`** (1 pour Nginx, 2 pour Cloudflare→Nginx) et mettez **`cookieSecure: true`** si le site est servi en **HTTPS**. +## Mise à jour -#### Désinstallation. - -```sh -wget -qO uninstall.sh https://tig.unfr.pw/UNFR/postauto/raw/branch/main/uninstall.sh && chmod +x uninstall.sh && ./uninstall.sh +```bash +postauto stop \ + && wget -qO update.sh https://tig.unfr.pw/UNFR/postauto/raw/branch/main/update.sh \ + && chmod +x update.sh \ + && ./update.sh ``` -#### Dévelopement. +### Passage en 7z (12/03/2024) +```bash +cd ~/autopost +wget -qO compress.sh https://tig.unfr.pw/UNFR/postauto/raw/branch/main/autopost/compress.sh \ + && chmod +x compress.sh \ + && ./compress.sh +``` -Comme toujours vos idées et axes d'amélioration sont les bienvenus. \ No newline at end of file +## Désinstallation + +```bash +wget -qO uninstall.sh https://tig.unfr.pw/UNFR/postauto/raw/branch/main/uninstall.sh \ + && chmod +x uninstall.sh \ + && ./uninstall.sh +``` + +- Propose d’arrêter `postauto`, de supprimer la conf, la base, les NZB, et les fichiers Node. +- Nettoie l’autocomplétion (`~/.bash_completion.d/postauto`) et l’ancien bloc éventuel dans `~/.bashrc`. + +## Limitations +- Bash → Linux uniquement. +- Accès SSH requis sur `/home/$USER`. +- Les seedbox peuvent restreindre les ports et/ou l’exécution de services persistants (voir hébergeur). + +## Dépannage + +- **Port refusé** : choisissez un port autorisé (Ultra.cc : `app-ports free`). +- **Node manquant** : relancez `install.sh` (il installe `nvm` + Node v22). +- **MediaInfo/sqlite** : avec sudo, installés via apt ; sans sudo, binaires fournis dans `~/bin`. +- **Erreur GLIBC** sur sqlite ou autre binaire : utilisez la version embarquée par l’installateur (dans `~/bin`). +- **Sessions** derrière Nginx : mettez `trustProxy` à `1` (ou `2` via Cloudflare→Nginx) et `cookieSecure: true` si HTTPS. +- **Dossiers manquants** : créez/ajustez `DOSSIER_*` (bash) et `*directory` (UI). + +## Développement +Vos idées et axes d’amélioration sont les bienvenus — PRs et issues appréciés 🙂