# Postauto ### Poster automatiquement via une simple commande depuis un VPS, dédié ou seedbox **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** ## 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) ## 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) > L’installateur installe/emballe tout le reste (mediainfo, sqlite3 si besoin, 7z, BDInfo, Nyuu, ParPar, Node v22, modules npm…). ## Installation ### 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 ``` ### 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 ``` ## Configuration (bash) — `/home/$USER/autopost/conf.sh` > Variables **obligatoires** (placeholders à remplacer), + règles **sqlite/mysql**. ```bash #!/bin/bash # CONFIG À MODIFIER URL_API="A NOUS DEMANDER SUR DISCORD" APIKEY="A RETROUVER DANS VOTRE PROFIL" DOSSIER_GLOBAL="/home/$USER/" DOSSIER_NFO="/home/$USER/autopost/mediainfo/" DOSSIER_LOGS="/home/$USER/autopost/logs/" DOSSIER_NZB_ATTENTE="/home/$USER/autopost/ATTENTE/" DOSSIER_NZB_FINAL="/home/$USER/autopost/FINIS/" # 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="" # 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="" MYSQL_PASS="" MYSQL_DB="" ``` **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**. ## Configuration (UI web) — `/home/$USER/autopost/config.js` > Champs **obligatoires** + règles **sqlite/mysql** + proxy/HTTPS. ```js const path = require('path'); module.exports = { // 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 // Base de données dbtype: 'sqlite', // 'sqlite' ou 'mysql' // sqlite -> dbFile requis dbFile: path.join(__dirname, 'base_autopost.db'), // mysql -> champs requis DB_HOST: '', DB_PORT: 3306, DB_USER: '', DB_PASSWORD: '', DB_DATABASE: '', DB_TABLE: 'release', // Dossiers finishdirectory: path.join(__dirname, 'FINIS'), logdirectory: path.join(__dirname, 'logs'), infodirectory: path.join(__dirname, 'mediainfo'), // 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', // Auth UI (à changer !) auth: { username: 'user', password: 'pass' } }; ``` **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**. ## 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: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: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: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; } ``` > Réglez **`trustProxy`** (1 pour Nginx, 2 pour Cloudflare→Nginx) et mettez **`cookieSecure: true`** si le site est servi en **HTTPS**. ## Mise à jour ```bash postauto stop \ && wget -qO update.sh https://tig.unfr.pw/UNFR/postauto/raw/branch/main/update.sh \ && chmod +x update.sh \ && ./update.sh ``` ### 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 ``` ## 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 🙂