X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=support%2Fdoc%2Ftools.md;h=e6c4c2010820d542d558917f37654f5ee9264190;hb=9162476fe9fe022ff24bd42ff828aca7c68129ef;hp=7f93c94f209a1293cbfe8cdef10aba6a09eefbef;hpb=6d8c8ea73a774c3568e6d28a4cbebcf7979d5c2a;p=github%2FChocobozzz%2FPeerTube.git diff --git a/support/doc/tools.md b/support/doc/tools.md index 7f93c94f2..e6c4c2010 100644 --- a/support/doc/tools.md +++ b/support/doc/tools.md @@ -1,45 +1,66 @@ +# CLI tools guide + -**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)* +**Table of Contents** -- [CLI tools guide](#cli-tools-guide) +- [Remote Tools](#remote-tools) + - [Dependencies](#dependencies) + - [Installation](#installation) - [CLI wrapper](#cli-wrapper) - - [Remote Tools](#remote-tools) - - [Dependencies](#dependencies) - - [Installation](#installation) - [peertube-import-videos.js](#peertube-import-videosjs) - [peertube-upload.js](#peertube-uploadjs) - [peertube-watch.js](#peertube-watchjs) - - [Server tools](#server-tools) - - [parse-log](#parse-log) - - [create-transcoding-job.js](#create-transcoding-jobjs) - - [create-import-video-file-job.js](#create-import-video-file-jobjs) - - [prune-storage.js](#prune-storagejs) - - [optimize-old-videos.js](#optimize-old-videosjs) - - [update-host.js](#update-hostjs) - - [REPL (Read Eval Print Loop)](#repl-read-eval-print-loop) - - [.help](#help) - - [Lodash example](#lodash-example) - - [YoutubeDL example](#youtubedl-example) - - [Models examples](#models-examples) + - [peertube-plugins.js](#peertube-pluginsjs) + - [peertube-redundancy.js](#peertube-redundancyjs) +- [Server tools](#server-tools) + - [parse-log](#parse-log) + - [create-transcoding-job.js](#create-transcoding-jobjs) + - [create-import-video-file-job.js](#create-import-video-file-jobjs) + - [prune-storage.js](#prune-storagejs) + - [optimize-old-videos.js](#optimize-old-videosjs) + - [update-host.js](#update-hostjs) + - [reset-password.js](#reset-passwordjs) + - [plugin install/uninstall](#plugin-installuninstall) + - [REPL (Read Eval Print Loop)](#repl-read-eval-print-loop) + - [.help](#help) + - [Lodash example](#lodash-example) + - [YoutubeDL example](#youtubedl-example) + - [Models examples](#models-examples) -# CLI tools guide - - [CLI wrapper](#cli-wrapper) - - [Remote tools](#remote-tools) - - [peertube-import-videos.js](#peertube-import-videosjs) - - [peertube-upload.js](#peertube-uploadjs) - - [peertube-watch.js](#peertube-watch) - - [Server tools](#server-tools) - - [parse-log](#parse-log) - - [create-transcoding-job.js](#create-transcoding-jobjs) - - [create-import-video-file-job.js](#create-import-video-file-jobjs) - - [prune-storage.js](#prune-storagejs) +## Remote Tools + +You need at least 512MB RAM to run the script. +Scripts can be launched directly from a PeerTube server, or from a separate server, even a desktop PC. +You need to follow all the following steps even if you are on a PeerTube server (including cloning the git repository in a different directory than your production installation because the scripts utilize non-production dependencies). + +### Dependencies + +Install the [PeerTube dependencies](dependencies.md) except PostgreSQL and Redis. + +### Installation -## CLI wrapper +Clone the PeerTube repo to get the latest version (even if you are on your PeerTube server): + +``` +$ git clone https://github.com/Chocobozzz/PeerTube.git +$ CLONE="$(pwd)/PeerTube" +$ cd ${CLONE} +``` -The wrapper provides a convenient interface to most scripts, and requires the [same dependencies](#dependencies). You can access it as `peertube` via an alias in your `.bashrc` like `alias peertube="node ${PEERTUBE_PATH}/dist/server/tools/peertube.js"`: +Install dependencies and build CLI tools: + +``` +$ NOCLIENT=1 yarn install --pure-lockfile +$ npm run setup:cli +``` + +### CLI wrapper + +The wrapper provides a convenient interface to the following scripts. +You can access it as `peertube` via an alias in your `.bashrc` like `alias peertube="cd /your/peertube/directory/ && node ./dist/server/tools/peertube.js"` (you have to keep the `cd` command): ``` Usage: peertube [command] [options] @@ -55,18 +76,21 @@ The wrapper provides a convenient interface to most scripts, and requires the [s upload|up upload a video import-videos|import import a video from a streaming platform watch|w watch a video in the terminal ✩°。⋆ + repl initiate a REPL to access internals + plugins|p [action] manage instance plugins + redundancy|r [action] manage video redundancies help [cmd] display help for [cmd] ``` The wrapper can keep track of instances you have an account on. We limit to one account per instance for now. ```bash -$ peertube auth add -u "PEERTUBE_URL" -U "PEERTUBE_USER" --password "PEERTUBE_PASSWORD" +$ peertube auth add -u 'PEERTUBE_URL' -U 'PEERTUBE_USER' --password 'PEERTUBE_PASSWORD' $ peertube auth list ┌──────────────────────────────┬──────────────────────────────┐ │ instance │ login │ ├──────────────────────────────┼──────────────────────────────┤ -│ "PEERTUBE_URL" │ "PEERTUBE_USER" │ +│ 'PEERTUBE_URL' │ 'PEERTUBE_USER' │ └──────────────────────────────┴──────────────────────────────┘ ``` @@ -82,53 +106,31 @@ And now that your video is online, you can watch it from the confort of your ter $ peertube watch https://peertube.cpy.re/videos/watch/e8a1af4e-414a-4d58-bfe6-2146eed06d10 ``` -## Remote Tools - -You need at least 512MB RAM to run the script. -Scripts can be launched directly from a PeerTube server, or from a separate server, even a desktop PC. -You need to follow all the following steps even if you are on a PeerTube server (including cloning the git repository in a different directory than your production installation because the scripts utilize non-production dependencies). - -### Dependencies - -Install the [PeerTube dependencies](dependencies.md). - -### Installation - -Clone the PeerTube repo to get the latest version (even if you are on your PeerTube server): - -``` -$ git clone https://github.com/Chocobozzz/PeerTube.git -$ CLONE="$(pwd)/PeerTube" -``` - -Run ``yarn install`` -``` -$ cd ${CLONE} -$ yarn install -``` +To list, install, uninstall dynamically plugins/themes of an instance: -Build server tools: -``` -$ cd ${CLONE} -$ npm run build:server +```bash +$ peertube plugins list +$ peertube plugins install --path /local/plugin/path +$ peertube plugins install --npm-name peertube-plugin-myplugin +$ peertube plugins uninstall --npm-name peertube-plugin-myplugin ``` -### peertube-import-videos.js +#### peertube-import-videos.js -You can use this script to import videos from all [supported sites of youtube-dl](https://rg3.github.io/youtube-dl/supportedsites.html) into PeerTube. +You can use this script to import videos from all [supported sites of youtube-dl](https://rg3.github.io/youtube-dl/supportedsites.html) into PeerTube. Be sure you own the videos or have the author's authorization to do so. ```sh $ node dist/server/tools/peertube-import-videos.js \ - -u "PEERTUBE_URL" \ - -U "PEERTUBE_USER" \ - --password "PEERTUBE_PASSWORD" \ - -t "TARGET_URL" + -u 'PEERTUBE_URL' \ + -U 'PEERTUBE_USER' \ + --password 'PEERTUBE_PASSWORD' \ + --target-url 'TARGET_URL' ``` * `PEERTUBE_URL` : the full URL of your PeerTube server where you want to import, eg: https://peertube.cpy.re * `PEERTUBE_USER` : your PeerTube account where videos will be uploaded -* `PEERTUBE_PASSWORD` : password of your PeerTube account (if omitted, you will be prompted for it) +* `PEERTUBE_PASSWORD` : password of your PeerTube account (if `--password PEERTUBE_PASSWORD` is omitted, you will be prompted for it) * `TARGET_URL` : the target url you want to import. Examples: * YouTube: * Channel: https://www.youtube.com/channel/ChannelId @@ -142,8 +144,21 @@ Already downloaded videos will not be uploaded twice, so you can run and re-run Videos will be publicly available after transcoding (you can see them before that in your account on the web interface). +**NB**: If you want to synchronize a Youtube channel to your PeerTube instance (ensure you have the agreement from the author), +you can add a [crontab rule](https://help.ubuntu.com/community/CronHowto) (or an equivalent of your OS) and insert +these rules (ensure to customize them to your needs): + +``` +# Update youtube-dl every day at midnight +0 0 * * * /usr/bin/npm rebuild youtube-dl --prefix /PATH/TO/PEERTUBE/ + +# Synchronize the YT channel every sunday at 22:00 all the videos published since last monday included +0 22 * * 0 /usr/bin/node /PATH/TO/PEERTUBE/dist/server/tools/peertube-import-videos.js -u '__PEERTUBE_URL__' -U '__USER__' --password '__PASSWORD__' --target-url 'https://www.youtube.com/channel/___CHANNEL__' --since $(date --date="-6 days" +%Y-%m-%d) +``` + +Also you may want to subscribe to the PeerTube channel in order to manually check the synchronization is successful. -### peertube-upload.js +#### peertube-upload.js You can use this script to import videos directly from the CLI. @@ -154,7 +169,7 @@ $ cd ${CLONE} $ node dist/server/tools/peertube-upload.js --help ``` -### peertube-watch.js +#### peertube-watch.js You can use this script to play videos directly from the CLI. @@ -170,6 +185,50 @@ It provides support for different players: - chromecast +#### peertube-plugins.js + +Install/update/uninstall or list local or NPM PeerTube plugins: + +``` +$ cd ${CLONE} +$ node dist/server/tools/peertube-plugins.js --help +$ node dist/server/tools/peertube-plugins.js list --help +$ node dist/server/tools/peertube-plugins.js install --help +$ node dist/server/tools/peertube-plugins.js update --help +$ node dist/server/tools/peertube-plugins.js uninstall --help + +$ node dist/server/tools/peertube-plugins.js install --path /my/plugin/path +$ node dist/server/tools/peertube-plugins.js install --npm-name peertube-theme-example +``` + +#### peertube-redundancy.js + +Manage (list/add/remove) video redundancies: + +To list your videos that are duplicated by remote instances: + +``` +$ node dist/server/tools/peertube.js redundancy list-remote-redundancies +``` + +To list remote videos that your instance duplicated: + +``` +$ node dist/server/tools/peertube.js redundancy list-my-redundancies +``` + +To duplicate a specific video in your redundancy system: + +``` +$ node dist/server/tools/peertube.js redundancy add --video 823 +``` + +To remove a video redundancy: + +``` +$ node dist/server/tools/peertube.js redundancy remove --video 823 +``` + ## Server tools These scripts should be run on the server, in `peertube-latest` directory. @@ -179,6 +238,7 @@ These scripts should be run on the server, in `peertube-latest` directory. To parse PeerTube last log file: ``` +$ cd /var/www/peertube/peertube-latest $ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run parse-log -- --level info ``` @@ -189,29 +249,41 @@ $ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production You can use this script to force transcoding of an existing video. PeerTube needs to be running. ``` +$ cd /var/www/peertube/peertube-latest $ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run create-transcoding-job -- -v [videoUUID] ``` Or to transcode to a specific resolution: ``` +$ cd /var/www/peertube/peertube-latest $ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run create-transcoding-job -- -v [videoUUID] -r [resolution] ``` - +The resolution should be an integer (`1080`, `720`, `480`, etc.) + +To generate an HLS playlist for a video: + +``` +$ cd /var/www/peertube/peertube-latest +$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run create-transcoding-job -- --generate-hls -v [videoUUID] +``` + ### create-import-video-file-job.js You can use this script to import a video file to replace an already uploaded file or to add a new resolution to a video. PeerTube needs to be running. ``` +$ cd /var/www/peertube/peertube-latest $ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run create-import-video-file-job -- -v [videoUUID] -i [videoFile] ``` ### prune-storage.js Some transcoded videos or shutdown at a bad time can leave some unused files on your storage. -To delete them (a confirmation will be demanded first): +Stop PeerTube and delete these files (a confirmation will be demanded first): ``` -$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run prune-storage +$ cd /var/www/peertube/peertube-latest +$ sudo systemctl stop peertube && sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run prune-storage ``` ### optimize-old-videos.js @@ -222,25 +294,64 @@ very large files that are too large for streaming. This script re-transcodes these videos so that they can be watched properly, even on slow connections. ``` +$ cd /var/www/peertube/peertube-latest $ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run optimize-old-videos ``` ### update-host.js +**Changing the hostname is unsupported and may be a risky operation, especially if you have already federated.** If you started PeerTube with a domain, and then changed it you will have invalid torrent files and invalid URLs in your database. To fix this, you have -to run: +to run the command below (keep in mind your follower instances will NOT update their URLs). ``` +$ cd /var/www/peertube/peertube-latest $ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run update-host ``` -### REPL ([Read Eval Print Loop](https://nodejs.org/docs/latest-v8.x/api/repl.html)) +### reset-password.js + +To reset a user password from CLI, run: + +``` +$ cd /var/www/peertube/peertube-latest +$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run reset-password -- -u target_username +``` + + +### plugin install/uninstall + +The difference with `peertube plugins` CLI is that these scripts can be used even if PeerTube is not running. +If PeerTube is running, you need to restart it for the changes to take effect (whereas with `peertube plugins` CLI, plugins/themes are dynamically loaded on the server). + +To install/update a plugin or a theme from the disk: + +``` +$ cd /var/www/peertube/peertube-latest +$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run plugin:install -- --plugin-path /local/plugin/path +``` + +From NPM: + +``` +$ cd /var/www/peertube/peertube-latest +$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run plugin:install -- --npm-name peertube-plugin-myplugin +``` + +To uninstall a plugin or a theme: + +``` +$ cd /var/www/peertube/peertube-latest +$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run plugin:uninstall -- --npm-name peertube-plugin-myplugin +``` + +### REPL (Read Eval Print Loop) If you want to interact with the application libraries and objects even when PeerTube is not running, there is a REPL for that. -usage: `node ./dist/server/tools/repl.js` +usage: `node ./dist/server/tools/peertube-repl.js` "The default evaluator will, by default, assign the result of the most recently evaluated expression to the special variable `_` (underscore). Explicitly setting `_` to a value will disable this behavior."