aboutsummaryrefslogtreecommitdiffhomepage
path: root/support/doc/dependencies.md
blob: 5cf1d5879a28471107432cbeb259ee9ed9d5fb7b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
# Dependencies

:warning: **Warning**: dependencies guide is maintained by the community. Some parts may be outdated! :warning:

Main dependencies version supported by PeerTube:

 * `node` >=14.x
 * `yarn` >=1.x
 * `postgres` >=10.x
 * `redis-server` >=5.x
 * `ffmpeg` >=4.3


_note_: only **LTS** versions of external dependencies are supported. If no LTS version matching the version constraint is available, only **release** versions are supported.

<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->

- [Debian / Ubuntu and derivatives](#debian-ubuntu-and-derivatives)
- [Arch Linux](#arch-linux)
- [CentOS 7](#centos-7)
- [Centos 8](#centos-8)
- [Rocky Linux 8.4](#rocky-linux-84)
- [Fedora](#fedora)
- [Red Hat Enterprise Linux 8](#red-hat-enterprise-linux-8)
- [FreeBSD](#freebsd)
- [macOS](#macos)
- [Gentoo](#gentoo)
- [OpenBSD](#openbsd)
- [Other distributions](#other-distributions)

<!-- END doctoc generated TOC please keep comment here to allow auto update -->

## Debian / Ubuntu and derivatives

1. On a fresh Debian/Ubuntu, as root user, install basic utility programs needed for the installation

```
# apt-get install curl sudo unzip vim
```

2. It would be wise to disable root access and to continue this tutorial with a user with sudoers group access

3. Install NodeJS 16.x:
[https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions](https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions)
4. Install yarn, and be sure to have [a recent version](https://github.com/yarnpkg/yarn/releases/latest):
[https://yarnpkg.com/en/docs/install#linux-tab](https://yarnpkg.com/en/docs/install#linux-tab)

5. Install Python:

On Ubuntu <= bionic (18.04 LTS) or Debian <= Buster:

```
sudo apt update
sudo apt install python-dev
python --version # Should be >= 2.x or >= 3.x
```

On Ubuntu >= focal (20.04 LTS) or Debian >= Bullseye:

```
sudo apt update
sudo apt install python3-dev python-is-python3 # python-is-python2 should also work
python --version # Should be >= 2.x or >= 3.x
```

6. Install common dependencies:

```
sudo apt update
sudo apt install certbot nginx ffmpeg postgresql postgresql-contrib openssl g++ make redis-server git cron wget
ffmpeg -version # Should be >= 4.1
g++ -v # Should be >= 5.x
redis-server --version # Should be >= 5.x
```

Now that dependencies are installed, before running PeerTube you should start PostgreSQL and Redis:

```
sudo systemctl start redis postgresql
```

## Arch Linux

1. Run:

```
sudo pacman -S nodejs-lts-fermium yarn ffmpeg postgresql openssl redis git wget unzip python base-devel npm nginx
```

Now that dependencies are installed, before running PeerTube you should start PostgreSQL and Redis:

```
sudo systemctl start redis postgresql
```

## CentOS 7

1. Install NodeJS 16.x:
[https://nodejs.org/en/download/package-manager/#enterprise-linux-and-fedora](https://nodejs.org/en/download/package-manager/#enterprise-linux-and-fedora)

2. Install yarn:
[https://yarnpkg.com/en/docs/install](https://yarnpkg.com/en/docs/install)

3. Install or compile ffmpeg:

* Install - [https://linoxide.com/linux-how-to/install-ffmpeg-centos-7/](https://linoxide.com/linux-how-to/install-ffmpeg-centos-7/)
* Compile - [https://gist.github.com/mustafaturan/7053900#file-latest-ffmpeg-centos6-sh](https://gist.github.com/mustafaturan/7053900#file-latest-ffmpeg-centos6-sh)

4. Install Packages:

```
sudo yum update
sudo yum install epel-release centos-release-scl
sudo yum update
sudo yum install nginx postgresql postgresql-server postgresql-contrib openssl gcc-c++ make wget redis git devtoolset-7
```

5. You need to use a more up to date version of G++ in order to run the yarn install command, hence the installation of devtoolset-7.

```
sudo scl enable devtoolset-7 bash
```

Later when you invoke any node command, please prefix them with `CC=/opt/rh/devtoolset-7/root/usr/bin/gcc CXX=/opt/rh/devtoolset-7/root/usr/bin/g++`, such as with:

```
sudo -H -u peertube CC=/opt/rh/devtoolset-7/root/usr/bin/gcc CXX=/opt/rh/devtoolset-7/root/usr/bin/g++ yarn install --production --pure-lockfile
```

6. Initialize the PostgreSQL database:

```
sudo PGSETUP_INITDB_OPTIONS='--auth-host=md5' postgresql-setup --initdb --unit postgresql
```

Now that dependencies are installed, before running PeerTube you should enable and start PostgreSQL and Redis:

```
sudo systemctl enable --now redis
sudo systemctl enable --now postgresql
```

## Centos 8

1. Install NodeJS 16.x:
[https://nodejs.org/en/download/package-manager/#enterprise-linux-and-fedora](https://nodejs.org/en/download/package-manager/#enterprise-linux-and-fedora)

2. Install yarn:
[https://yarnpkg.com/en/docs/install](https://yarnpkg.com/en/docs/install)

3. Install or compile ffmpeg:

```
sudo dnf install epel-release dnf-utils
sudo yum-config-manager --set-enabled powertools
sudo yum-config-manager --add-repo=https://negativo17.org/repos/epel-multimedia.repo
sudo dnf install ffmpeg
```

4. Install packages:

```
sudo dnf update
sudo dnf install epel-release
sudo dnf update
sudo dnf install nginx postgresql postgresql-server postgresql-contrib openssl gcc-c++ make wget redis git unzip
```

5. You'll need a symlink for python3 to python for youtube-dl to work

```
sudo ln -s /usr/bin/python3 /usr/bin/python
```

6. Initialize the PostgreSQL database:

```
sudo PGSETUP_INITDB_OPTIONS='--auth-host=md5' postgresql-setup --initdb --unit postgresql
```

Now that dependencies are installed, before running PeerTube you should enable and start PostgreSQL and Redis:

```
sudo systemctl enable --now redis
sudo systemctl enable --now postgresql
```

## Rocky Linux 8.4

1. Pull the latest updates:
```
sudo dnf update -y
```

2. Install NodeJS 16.x:
```
sudo dnf module install -y nodejs:16
```

3. Install yarn:
```
sudo npm install --global yarn
```

4. Install or compile ffmpeg (if you want to compile... enjoy):
```
sudo dnf install -y epel-release
sudo dnf --enablerepo=powertools install -y SDL2 SDL2-devel
sudo dnf install -y --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-8.noarch.rpm
sudo dnf install -y ffmpeg
sudo dnf update -y
```

5. Install PostgreSQL and Python3 and other stuff:
```
sudo dnf install -y nginx postgresql postgresql-server postgresql-contrib openssl gcc-c++ make wget redis git python3
sudo ln -s /usr/bin/python3 /usr/bin/python
sudo PGSETUP_INITDB_OPTIONS='--auth-host=md5' postgresql-setup --initdb --unit postgresql
sudo systemctl enable --now redis
sudo systemctl enable --now postgresql
```

6. Configure the peertube user:
```
sudo useradd -m -d /var/www/peertube -s /bin/bash -p peertube peertube
```

7. Unknown missing steps:
- Steps missing here... these were adapted from the CentOS 8 steps which abruptly ended.
- /var/www/peertube does not exist yet (expected? done in future steps? documentation?).
- Nothing about Certbot, NGINX, Firewall settings, and etc.
- Hopefully someone can suggest what is missing here with some hints so I can add it?

## Fedora

1. Upgrade your packages:

```
dnf upgrade
```

2. Add a user with sudoers group access:

```
useradd my-peertube-user
passwd my-peertube-user
usermod my-peertube-user -a -G wheel	# Add my-peertube-user to sudoers
su my-peertube-user
```

3. (Optional) Install certbot (choose instructions for your distribution):
[https://certbot.eff.org/all-instructions](https://certbot.eff.org/all-instructions)

4. Install NodeJS 16.x:
[https://nodejs.org/en/download/package-manager/#enterprise-linux-and-fedora](https://nodejs.org/en/download/package-manager/#enterprise-linux-and-fedora)

5. Install yarn:
[https://yarnpkg.com/en/docs/install](https://yarnpkg.com/en/docs/install)

6. Enable [RPM Fusion](https://rpmfusion.org) for Fedora (available for x86, x86_64, armhfp)

```
sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
```
This is necessary because `ffmpeg` is not in the Fedora repos.

7. Run:

```
sudo dnf install nginx ffmpeg postgresql-server postgresql-contrib openssl gcc-c++ make redis git vim
ffmpeg -version # Should be >= 4.1
g++ -v # Should be >= 5.x
redis-server --version # Should be >= 5.x
```

8. Configure nginx

```
sudo mkdir /etc/nginx/sites-available
sudo mkdir /etc/nginx/sites-enabled
sudo ln -s /etc/nginx/sites-enabled/peertube /etc/nginx/conf.d/peertube.conf
```

9. Post-installation

_from [PostgreSQL documentation](https://www.postgresql.org/download/linux/redhat/):_
> Due to policies for Red Hat family distributions, the PostgreSQL installation will not be enabled for automatic start or have the database initialized automatically.

```
# PostgreSQL
sudo PGSETUP_INITDB_OPTIONS='--auth-host=md5' postgresql-setup --initdb --unit postgresql
sudo systemctl enable postgresql.service
sudo systemctl start postgresql.service
# Nginx
sudo systemctl enable nginx.service
sudo systemctl start nginx.service
# Redis
sudo systemctl enable redis.service
sudo systemctl start redis.service
```

10. Firewall

By default, you cannot access your server via public IP. To do so, you must configure firewall:

-  Ports used by peertube dev setup:
```
sudo firewall-cmd --permanent --zone=public --add-port=3000/tcp
sudo firewall-cmd --permanent --zone=public --add-port=9000/tcp
```
- Optional

```
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
```

- Reload firewall

```
sudo firewall-cmd --reload
```

11. Configure max ports

This is necessary if you are running dev setup, otherwise you will have errors with `nodemon`

```
echo fs.inotify.max_user_watches=582222 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
```

[More info](https://stackoverflow.com/questions/34662574/node-js-getting-error-nodemon-internal-watch-failed-watch-enospc#34664097)

## Red Hat Enterprise Linux 8

1. Register system as root user to Red Hat Subscription Management (create a free Red Hat account if you don't have one yet).

```
# subscription-manager register --username <username> --password <password> --auto-attach
# dnf upgrade
# reboot
```

2. Install Node.JS

```
sudo dnf module install nodejs:16
```

3. Install Yarn

```
curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
sudo dnf install yarn
```

4. Install FFmpeg

```
sudo subscription-manager repos --enable "codeready-builder-for-rhel-8-$(arch)-rpms"
sudo dnf install --nogpgcheck https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo dnf install --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm
sudo dnf upgrade
sudo dnf install ffmpeg
```

5. Run:

```
sudo dnf install nginx postgresql postgresql-server postgresql-contrib openssl gcc-c++ make wget redis git
```

6. You'll need a symlink for python3 to python for youtube-dl to work

```
sudo alternatives --set python3 /usr/bin/python
```

7. Initialize the PostgreSQL database:

```
sudo PGSETUP_INITDB_OPTIONS='--auth-host=md5' postgresql-setup --initdb --unit postgresql
```

Now that dependencies are installed, before running PeerTube you should enable and start PostgreSQL and Redis:

```
sudo systemctl enable --now redis
sudo systemctl enable --now postgresql
```

If you are running the production guide, you also need to slightly pre-configure nginx, because nginx is packaged differently in the Red Hat family distributions:

8. Configure nginx

```
sudo mkdir /etc/nginx/sites-available
sudo mkdir /etc/nginx/sites-enabled
sudo ln -s /etc/nginx/sites-enabled/peertube /etc/nginx/conf.d/peertube.conf
sudo systemctl enable --now nginx
```

9. Prepare directory

To add the 'peertube' user, you first have to create the 'www' folder and once the 'peertube' user is added, you have to set the access permissions.

```
sudo mkdir /var/www

sudo useradd -m -d /var/www/peertube -s /bin/bash -p peertube peertube
sudo passwd peertube

sudo chmod 755 /var/www/peertube/
```

10. Firewall

By default, you cannot access your server via public IP. To do so, you must configure firewall:

-  Ports used by peertube dev setup:
```
sudo firewall-cmd --permanent --zone=public --add-port=3000/tcp
sudo firewall-cmd --permanent --zone=public --add-port=9000/tcp
```
- Optional

```
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
```

- Reload firewall

```
sudo firewall-cmd --reload
```

11. Configure max ports

This is necessary if you are running dev setup, otherwise you will have errors with `nodemon`

```
echo fs.inotify.max_user_watches=582222 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
```

[More info](https://stackoverflow.com/questions/34662574/node-js-getting-error-nodemon-internal-watch-failed-watch-enospc#34664097)


## FreeBSD

On a fresh install of [FreeBSD](https://www.freebsd.org), new system or new jail:

1. bootstrap pkg, initialize db and install peertube's dependencies, always as root (sudo not yet installed):

```
pkg
pkg update
pkg install -y sudo bash wget git python nginx pkgconf postgresql13-server postgresql13-contrib redis openssl node npm yarn ffmpeg unzip
```

2. Allow users in the wheel group (hope you don't forgot to add your user on wheel group!) to use sudo.

```
# visudo
```

Uncomment the line 90

```
%wheel ALL=(ALL) ALL
```

3. Enable nginx, redis, postgresql services and initialize database.

```
sysrc postgresql_enable="YES"
sysrc redis_enable="YES"
sysrc nginx_enable="YES"
```

Initialize database and start services

```
service postgresql initdb
service postgresql start
service redis start
service nginx start
```

## macOS

1. Add the packages:

```sh
brew install bash ffmpeg nginx postgresql openssl gcc make redis git yarn
```

You may need to update your default version of bash.

**How to change your default shell**

```sh
which -a bash # Check where bash is installed
bash --version # You need a version at least as recent as 4.0
sudo vim /etc/shells # Add in this file : /usr/local/bin/bash
chsh -s /usr/local/bin/bash # To set the brew-installed bash as default bash
```

In a new shell, type `bash --version` to assert your changes took effect and
correctly modified your default bash version.

2. Run the services:

```sh
brew services run postgresql
brew services run redis
```

On macOS, the `postgresql` user can be `_postgres` instead of `postgres`.
If `sudo -u postgres createuser -P peertube` gives you an `unknown user: postgres` error, you can try `sudo -u _postgres createuser -U peertube`.

## Gentoo

1. Add this to ``/etc/portage/sets/peertube``:

```
net-libs/nodejs
sys-apps/yarn
media-video/ffmpeg[x264] # Optionally add vorbis,vpx
dev-db/postgresql
dev-db/redis
dev-vcs/git
app-arch/unzip
dev-lang/python
dev-lang/python-exec
www-servers/nginx

# Optional, client for Let’s Encrypt:
# app-crypt/certbot
```

2. If you are on a "stable" Gentoo you need to accept the testing keyword ~amd64 yarn:

```
mkdir -p /etc/portage/package.keywords
cat << EOF >> /etc/portage/package.keywords/peertube
# required by yarn (argument) for PeerTube
sys-apps/yarn ~amd64
EOF
```

3. Compile the peertube set:

```
emerge -a @peertube
```

4. Initialize the PostgreSQL database if you just merged it:

```
emerge --config postgresql
```

5. (For OpenRC) Enable and then start the services (replace with the correct PostgreSQL slot):

```
rc-update add redis
rc-update add postgresql-11
rc-service redis start
rc-service postgresql-11 start
```

6. Create Python version symlink for youtube-dl:

```
emerge -1 python-exec
```

## OpenBSD

1. Install Packages:

```
pkg_add sudo bash wget git python nginx pkgconf postgresql-server postgresql-contrib redis openssl
```

2. Install yarn:

```
npm install --global yarn
```

3. Allow users in the wheel group to use sudo

```
visudo
```
Uncomment line #43:

```
%wheel ALL=(ALL) ALL
```

4. Enable services:

```
rcctl enable postgresql redis nginx
```

## Other distributions

Feel free to update this file in a pull request!