]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - support/doc/tools.md
Add videos list admin component
[github/Chocobozzz/PeerTube.git] / support / doc / tools.md
CommitLineData
c141f68b
RK
1# CLI tools guide
2
12b119c0
RK
3<!-- START doctoc generated TOC please keep comment here to allow auto update -->
4<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
1f8ac024 5**Table of Contents**
c141f68b 6
c141f68b
RK
7- [Remote Tools](#remote-tools)
8 - [Dependencies](#dependencies)
9 - [Installation](#installation)
d639c3bf
C
10 - [CLI wrapper](#cli-wrapper)
11 - [peertube-import-videos.js](#peertube-import-videosjs)
12 - [peertube-upload.js](#peertube-uploadjs)
8dd2d050 13 - [peertube-plugins.js](#peertube-pluginsjs)
e669ff58 14 - [peertube-redundancy.js](#peertube-redundancyjs)
c141f68b
RK
15- [Server tools](#server-tools)
16 - [parse-log](#parse-log)
c2bd7a6f 17 - [regenerate-thumbnails.js](#regenerate-thumbnailsjs)
c141f68b
RK
18 - [create-transcoding-job.js](#create-transcoding-jobjs)
19 - [create-import-video-file-job.js](#create-import-video-file-jobjs)
20 - [prune-storage.js](#prune-storagejs)
c141f68b 21 - [update-host.js](#update-hostjs)
31b48aad 22 - [reset-password.js](#reset-passwordjs)
13126d99 23 - [plugin install/uninstall](#plugin-installuninstall)
12b119c0
RK
24
25<!-- END doctoc generated TOC please keep comment here to allow auto update -->
26
d639c3bf
C
27## Remote Tools
28
29You need at least 512MB RAM to run the script.
30Scripts can be launched directly from a PeerTube server, or from a separate server, even a desktop PC.
31You 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).
32
33### Dependencies
34
7e9d3f25 35Install the [PeerTube dependencies](dependencies.md) except PostgreSQL and Redis.
d639c3bf
C
36
37### Installation
38
39Clone the PeerTube repo to get the latest version (even if you are on your PeerTube server):
40
c83af8f9 41```bash
d639c3bf
C
42$ git clone https://github.com/Chocobozzz/PeerTube.git
43$ CLONE="$(pwd)/PeerTube"
d639c3bf 44$ cd ${CLONE}
d639c3bf
C
45```
46
7e9d3f25
C
47Install dependencies and build CLI tools:
48
c83af8f9 49```bash
7e9d3f25
C
50$ NOCLIENT=1 yarn install --pure-lockfile
51$ npm run setup:cli
d639c3bf
C
52```
53
54### CLI wrapper
8704acf4 55
bb8f7872
C
56The wrapper provides a convenient interface to the following scripts.
57You 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):
8704acf4
RK
58
59```
60 Usage: peertube [command] [options]
61
62 Options:
63
64 -v, --version output the version number
65 -h, --help output usage information
66
67 Commands:
68
69 auth [action] register your accounts on remote instances to use them with other commands
70 upload|up upload a video
71 import-videos|import import a video from a streaming platform
e669ff58
C
72 plugins|p [action] manage instance plugins
73 redundancy|r [action] manage video redundancies
8704acf4
RK
74 help [cmd] display help for [cmd]
75```
76
77The wrapper can keep track of instances you have an account on. We limit to one account per instance for now.
78
79```bash
5b036b8e 80$ peertube auth add -u 'PEERTUBE_URL' -U 'PEERTUBE_USER' --password 'PEERTUBE_PASSWORD'
8704acf4
RK
81$ peertube auth list
82┌──────────────────────────────┬──────────────────────────────┐
83│ instance │ login │
84├──────────────────────────────┼──────────────────────────────┤
5b036b8e 85│ 'PEERTUBE_URL' │ 'PEERTUBE_USER' │
8704acf4
RK
86└──────────────────────────────┴──────────────────────────────┘
87```
88
89You can now use that account to upload videos without feeding the same parameters again.
90
91```bash
92$ peertube up <videoFile>
93```
94
9b474844
C
95To list, install, uninstall dynamically plugins/themes of an instance:
96
97```bash
98$ peertube plugins list
99$ peertube plugins install --path /local/plugin/path
100$ peertube plugins install --npm-name peertube-plugin-myplugin
101$ peertube plugins uninstall --npm-name peertube-plugin-myplugin
102```
103
d639c3bf 104#### peertube-import-videos.js
358770db 105
1f8ac024 106You can use this script to import videos from all [supported sites of youtube-dl](https://rg3.github.io/youtube-dl/supportedsites.html) into PeerTube.
358770db 107Be sure you own the videos or have the author's authorization to do so.
2519d9fe 108
a5f0521f 109```sh
8704acf4 110$ node dist/server/tools/peertube-import-videos.js \
5b036b8e
C
111 -u 'PEERTUBE_URL' \
112 -U 'PEERTUBE_USER' \
9024bece 113 --password 'PEERTUBE_PASSWORD' \
8a08bc1e 114 --target-url 'TARGET_URL'
2519d9fe
L
115```
116
a5f0521f
RK
117* `PEERTUBE_URL` : the full URL of your PeerTube server where you want to import, eg: https://peertube.cpy.re
118* `PEERTUBE_USER` : your PeerTube account where videos will be uploaded
e8a739e8 119* `PEERTUBE_PASSWORD` : password of your PeerTube account (if `--password PEERTUBE_PASSWORD` is omitted, you will be prompted for it)
a5f0521f
RK
120* `TARGET_URL` : the target url you want to import. Examples:
121 * YouTube:
122 * Channel: https://www.youtube.com/channel/ChannelId
123 * User https://www.youtube.com/c/UserName or https://www.youtube.com/user/UserName
124 * Video https://www.youtube.com/watch?v=blabla
125 * Vimeo: https://vimeo.com/xxxxxx
126 * Dailymotion: https://www.dailymotion.com/xxxxx
2519d9fe 127
2186386c
C
128The script will get all public videos from Youtube, download them and upload to PeerTube.
129Already downloaded videos will not be uploaded twice, so you can run and re-run the script in case of crash, disconnection...
130
131Videos will be publicly available after transcoding (you can see them before that in your account on the web interface).
132
1f8ac024
F
133**NB**: If you want to synchronize a Youtube channel to your PeerTube instance (ensure you have the agreement from the author),
134you can add a [crontab rule](https://help.ubuntu.com/community/CronHowto) (or an equivalent of your OS) and insert
135these rules (ensure to customize them to your needs):
136
137```
138# Update youtube-dl every day at midnight
1390 0 * * * /usr/bin/npm rebuild youtube-dl --prefix /PATH/TO/PEERTUBE/
140
141# Synchronize the YT channel every sunday at 22:00 all the videos published since last monday included
1420 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)
143```
144
145Also you may want to subscribe to the PeerTube channel in order to manually check the synchronization is successful.
358770db 146
d639c3bf 147#### peertube-upload.js
358770db
C
148
149You can use this script to import videos directly from the CLI.
150
2186386c
C
151Videos will be publicly available after transcoding (you can see them before that in your account on the web interface).
152
c83af8f9 153```bash
05e67d62 154$ cd ${CLONE}
8704acf4 155$ node dist/server/tools/peertube-upload.js --help
358770db 156```
a5f0521f 157
8dd2d050
C
158#### peertube-plugins.js
159
160Install/update/uninstall or list local or NPM PeerTube plugins:
161
c83af8f9 162```bash
8dd2d050
C
163$ cd ${CLONE}
164$ node dist/server/tools/peertube-plugins.js --help
165$ node dist/server/tools/peertube-plugins.js list --help
166$ node dist/server/tools/peertube-plugins.js install --help
167$ node dist/server/tools/peertube-plugins.js update --help
168$ node dist/server/tools/peertube-plugins.js uninstall --help
169
170$ node dist/server/tools/peertube-plugins.js install --path /my/plugin/path
171$ node dist/server/tools/peertube-plugins.js install --npm-name peertube-theme-example
172```
173
e669ff58
C
174#### peertube-redundancy.js
175
176Manage (list/add/remove) video redundancies:
177
178To list your videos that are duplicated by remote instances:
179
c83af8f9 180```bash
e669ff58
C
181$ node dist/server/tools/peertube.js redundancy list-remote-redundancies
182```
183
184To list remote videos that your instance duplicated:
185
c83af8f9 186```bash
e669ff58
C
187$ node dist/server/tools/peertube.js redundancy list-my-redundancies
188```
189
190To duplicate a specific video in your redundancy system:
191
c83af8f9 192```bash
e669ff58
C
193$ node dist/server/tools/peertube.js redundancy add --video 823
194```
195
196To remove a video redundancy:
197
c83af8f9 198```bash
e669ff58
C
199$ node dist/server/tools/peertube.js redundancy remove --video 823
200```
201
54a3a12e
C
202## Server tools
203
204These scripts should be run on the server, in `peertube-latest` directory.
a5f0521f 205
0ee02734
C
206### parse-log
207
208To parse PeerTube last log file:
209
c83af8f9 210```bash
cb6a78c2 211$ # Basic installation
c977fd3e 212$ cd /var/www/peertube/peertube-latest
0ee02734 213$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run parse-log -- --level info
cb6a78c2
C
214
215$ # Docker installation
216$ cd /var/www/peertube-docker
217$ docker-compose exec -u peertube peertube npm run parse-log -- --level info
0ee02734
C
218```
219
220`--level` is optional and could be `info`/`warn`/`error`
221
cb6a78c2 222You can also remove SQL or HTTP logs using `--not-tags` (PeerTube >= 3.2):
7992c9e1 223
cb6a78c2
C
224```bash
225$ # Basic installation
7992c9e1
C
226$ cd /var/www/peertube/peertube-latest
227$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run parse-log -- --level debug --not-tags http sql
cb6a78c2
C
228
229$ # Docker installation
230$ cd /var/www/peertube-docker
231$ docker-compose exec -u peertube peertube npm run parse-log -- --level debug --not-tags http sql
7992c9e1
C
232```
233
c2bd7a6f
C
234### regenerate-thumbnails.js
235
cb6a78c2
C
236**PeerTube >= 3.2**
237
c2bd7a6f
C
238Regenerating local video thumbnails could be useful because new PeerTube releases may increase thumbnail sizes:
239
cb6a78c2
C
240```bash
241$ # Basic installation
c2bd7a6f
C
242$ cd /var/www/peertube/peertube-latest
243$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run regenerate-thumbnails
cb6a78c2
C
244
245$ # Docker installation
246$ cd /var/www/peertube-docker
247$ docker-compose exec -u peertube peertube npm run regenerate-thumbnails
c2bd7a6f
C
248```
249
a5f0521f
RK
250### create-transcoding-job.js
251
12b119c0 252You can use this script to force transcoding of an existing video. PeerTube needs to be running.
a5f0521f 253
c83af8f9 254To generate transcoding jobs depending on the instance configuration:
cb6a78c2 255
c83af8f9 256```bash
cb6a78c2 257$ # Basic installation
c977fd3e 258$ cd /var/www/peertube/peertube-latest
54a3a12e 259$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run create-transcoding-job -- -v [videoUUID]
cb6a78c2
C
260
261$ # Docker installation
262$ cd /var/www/peertube-docker
263$ docker-compose exec -u peertube peertube npm run create-transcoding-job -- -v [videoUUID]
a5f0521f 264```
05623b90
F
265
266Or to transcode to a specific resolution:
cb6a78c2 267
c83af8f9 268```bash
cb6a78c2 269$ # Basic installation
c977fd3e 270$ cd /var/www/peertube/peertube-latest
05623b90 271$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run create-transcoding-job -- -v [videoUUID] -r [resolution]
cb6a78c2
C
272
273$ # Docker installation
274$ cd /var/www/peertube-docker
275$ docker-compose exec -u peertube peertube npm run create-transcoding-job -- -v [videoUUID] -r [resolution]
05623b90 276```
cb6a78c2 277
1c5c31a1 278The resolution should be an integer (`1080`, `720`, `480`, etc.)
1f8ac024 279
8b7bd166
C
280To generate an HLS playlist for a video:
281
c83af8f9 282```bash
cb6a78c2 283$ # Basic installation
c977fd3e 284$ cd /var/www/peertube/peertube-latest
8b7bd166 285$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run create-transcoding-job -- --generate-hls -v [videoUUID]
cb6a78c2
C
286
287$ # Docker installation
288$ cd /var/www/peertube-docker
289$ docker-compose exec -u peertube peertube npm run create-transcoding-job -- --generate-hls -v [videoUUID]
8b7bd166
C
290```
291
a5f0521f
RK
292### create-import-video-file-job.js
293
12b119c0 294You 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.
a5f0521f 295
c83af8f9 296```bash
cb6a78c2 297$ # Basic installation
c977fd3e 298$ cd /var/www/peertube/peertube-latest
54a3a12e 299$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run create-import-video-file-job -- -v [videoUUID] -i [videoFile]
cb6a78c2
C
300
301$ # Docker installation
302$ cd /var/www/peertube-docker
303$ docker-compose exec -u peertube peertube npm run create-import-video-file-job -- -v [videoUUID] -i [videoFile]
54a3a12e
C
304```
305
306### prune-storage.js
307
308Some transcoded videos or shutdown at a bad time can leave some unused files on your storage.
7089e7b4 309Stop PeerTube and delete these files (a confirmation will be demanded first):
54a3a12e 310
c83af8f9 311```bash
c977fd3e 312$ cd /var/www/peertube/peertube-latest
7089e7b4 313$ sudo systemctl stop peertube && sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run prune-storage
23687332
C
314```
315
edb4ffc7 316
23687332
C
317### update-host.js
318
fffc7c08 319**Changing the hostname is unsupported and may be a risky operation, especially if you have already federated.**
12b119c0
RK
320If you started PeerTube with a domain, and then changed it you will have
321invalid torrent files and invalid URLs in your database. To fix this, you have
fffc7c08 322to run the command below (keep in mind your follower instances will NOT update their URLs).
23687332 323
c83af8f9 324```bash
cb6a78c2 325$ # Basic installation
c977fd3e 326$ cd /var/www/peertube/peertube-latest
23687332 327$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run update-host
cb6a78c2
C
328
329$ # Docker installation
330$ cd /var/www/peertube-docker
331$ docker-compose exec -u peertube peertube npm run update-host
ecf06378 332```
1e59ca3b 333
31b48aad
C
334### reset-password.js
335
336To reset a user password from CLI, run:
337
c83af8f9 338```bash
cb6a78c2 339$ # Basic installation
c977fd3e 340$ cd /var/www/peertube/peertube-latest
31b48aad 341$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run reset-password -- -u target_username
cb6a78c2
C
342
343$ # Docker installation
344$ cd /var/www/peertube-docker
345$ docker-compose exec -u peertube peertube npm run reset-password -- -u target_username
31b48aad
C
346```
347
9b474844
C
348
349### plugin install/uninstall
350
351The difference with `peertube plugins` CLI is that these scripts can be used even if PeerTube is not running.
352If 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).
353
8dd2d050 354To install/update a plugin or a theme from the disk:
9b474844 355
c83af8f9 356```bash
c977fd3e 357$ cd /var/www/peertube/peertube-latest
e9bdf8b4 358$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run plugin:install -- --plugin-path /local/plugin/path
cb6a78c2
C
359
360$ # Docker installation
361$ cd /var/www/peertube-docker
362$ docker-compose exec -u peertube peertube npm run plugin:install -- --plugin-path /local/plugin/path
9b474844
C
363```
364
365From NPM:
366
c83af8f9 367```bash
c977fd3e 368$ cd /var/www/peertube/peertube-latest
e9bdf8b4 369$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run plugin:install -- --npm-name peertube-plugin-myplugin
cb6a78c2
C
370
371$ # Docker installation
372$ cd /var/www/peertube-docker
373$ docker-compose exec -u peertube peertube npm run plugin:install -- --npm-name peertube-plugin-myplugin
9b474844
C
374```
375
376To uninstall a plugin or a theme:
377
c83af8f9 378```bash
c977fd3e 379$ cd /var/www/peertube/peertube-latest
e9bdf8b4 380$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run plugin:uninstall -- --npm-name peertube-plugin-myplugin
cb6a78c2
C
381
382$ # Docker installation
383$ cd /var/www/peertube-docker
384$ docker-compose exec -u peertube peertube npm run plugin:uninstall -- --npm-name peertube-plugin-myplugin
9b474844 385```