Dependencies
⚠️ Warning: dependencies guide is maintained by the community. Some parts may be outdated! ⚠️
Main dependencies supported by PeerTube:
node
LTS (>= 20.19 or >= 22.12)yarn
1.x for PeerTube <= 7.3 orpnpm
>= 10.x for PeerTube nextpostgres
>=10.xredis-server
>=6.xffmpeg
>=4.3 (using a ffmpeg static build is not recommended)python
>=3.8pip
note: only LTS versions of external dependencies are supported. If no LTS version matching the version constraint is available, only release versions are supported.
Debian / Ubuntu and derivatives
On a fresh Debian/Ubuntu, as root user, install basic utility programs needed for the installation
shsudo apt-get install curl sudo unzip vim
It would be wise to disable root access and to continue this tutorial with a user with sudoers group access. You can see a guide for how to do this in Debian/Ubuntu here.
Install NodeJS 20.x: https://nodejs.org/en/download/package-manager/all#debian-and-ubuntu-based-linux-distributions
Install PNPM:
shsudo npm install -g pnpm
Install yarn, and be sure to have a recent version: https://yarnpkg.com/en/docs/install#linux-tab
Install Python:
shsudo apt update sudo apt install python3-dev python3-pip python-is-python3 python --version # Should be >= 3.8
Install common dependencies:
shsudo 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 >= 6.x
Now that dependencies are installed, before running PeerTube you should start PostgreSQL and Redis:
sudo systemctl start redis postgresql
Arch Linux
Run:
sudo pacman -S nodejs-lts-iron yarn ffmpeg postgresql openssl redis git wget unzip python python-pip base-devel npm nginx pnpm
Now that dependencies are installed, before running PeerTube you should start PostgreSQL and Redis:
sudo systemctl start redis postgresql
CentOS 7
Install NodeJS 20.x: https://nodejs.org/en/download/package-manager/all#centos-fedora-and-red-hat-enterprise-linux
Install yarn: https://yarnpkg.com/en/docs/install
Install PNPM:
shsudo npm install -g pnpm
Install or compile ffmpeg:
Install Packages:
shsudo 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
You need to use a more up to date version of G++ in order to run the
npm run install-node-dependencies
command, hence the installation of devtoolset-7.shsudo 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:shsudo -H -u peertube CC=/opt/rh/devtoolset-7/root/usr/bin/gcc CXX=/opt/rh/devtoolset-7/root/usr/bin/g++ npm run install-node-dependencies -- --production
Initialize the PostgreSQL database:
shsudo 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
Install NodeJS 20.x: https://nodejs.org/en/download/package-manager/all#centos-fedora-and-red-hat-enterprise-linux
Install yarn: https://yarnpkg.com/en/docs/install
Install PNPM:
shsudo npm install -g pnpm
Install or compile ffmpeg:
shsudo 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
Install packages:
shsudo 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
You'll need a symlink for python3 to python for youtube-dl to work
shsudo ln -s /usr/bin/python3 /usr/bin/python
Initialize the PostgreSQL database:
shsudo 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
Pull the latest updates:
shsudo dnf update -y
Install NodeJS 20.x:
shsudo dnf module install -y nodejs:20
Install yarn:
shsudo npm install --global yarn
Install PNPM:
shsudo npm install --global pnpm
Install or compile ffmpeg (if you want to compile... enjoy):
shsudo 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
Install PostgreSQL and Python3 and other stuff:
shsudo dnf install -y nginx postgresql postgresql-server postgresql-contrib openssl gcc-c++ make wget redis git python3 python3-pip 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
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
Upgrade your packages:
shdnf upgrade
(Optional) Install certbot (choose instructions for your distribution): https://certbot.eff.org/all-instructions
Install NodeJS 20.x: https://nodejs.org/en/download/package-manager/all#centos-fedora-and-red-hat-enterprise-linux
Install yarn: https://yarnpkg.com/en/docs/install
Install PNPM:
shsudo npm install --global pnpm
Enable RPM Fusion for Fedora (available for x86, x86_64, armhfp)
shsudo 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.Run:
shsudo 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 >= 6.x
Configure nginx
shsudo 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
Post-installation
from PostgreSQL documentation:
Due to policies for Red Hat family distributions, the PostgreSQL installation will not be enabled for automatic start or have the database initialized automatically.
sh# 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
Firewall
By default, you cannot access your server via public IP. To do so, you must configure the firewall.
Ports used by peertube dev setup:
shsudo firewall-cmd --permanent --zone=public --add-port=3000/tcp sudo firewall-cmd --permanent --zone=public --add-port=9000/tcp
- Optional
shsudo firewall-cmd --permanent --zone=public --add-service=http sudo firewall-cmd --permanent --zone=public --add-service=https
- Reload firewall
shsudo firewall-cmd --reload
Configure max ports
This is necessary if you are running dev setup, otherwise you will have errors with
nodemon
shecho fs.inotify.max_user_watches=582222 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
Red Hat Enterprise Linux 8
Register system as root user to Red Hat Subscription Management (create a free Red Hat account if you don't have one yet).
sh# subscription-manager register --username <username> --password <password> --auto-attach # dnf upgrade # reboot
Install NodeJS
shsudo dnf module install nodejs:20
Install Yarn
shcurl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo sudo dnf install yarn
Install PNPM:
shsudo npm install --global pnpm
Install FFmpeg
shsudo 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
Run:
shsudo dnf install nginx postgresql postgresql-server postgresql-contrib openssl gcc-c++ make wget redis git
You'll need a symlink for python3 to python for youtube-dl to work
shsudo alternatives --set python3 /usr/bin/python
Initialize the PostgreSQL database:
shsudo 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:
shsudo 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:
Configure nginx
shsudo 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
Firewall
By default, you cannot access your server via public IP. To do so, you must configure firewall:
- Ports used by peertube dev setup:
shsudo firewall-cmd --permanent --zone=public --add-port=3000/tcp sudo firewall-cmd --permanent --zone=public --add-port=9000/tcp
- Optional
shsudo firewall-cmd --permanent --zone=public --add-service=http sudo firewall-cmd --permanent --zone=public --add-service=https
- Reload firewall
shsudo firewall-cmd --reload
Configure max ports
This is necessary if you are running dev setup, otherwise you will have errors with
nodemon
shecho fs.inotify.max_user_watches=582222 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
FreeBSD
On a fresh install of FreeBSD, new system or new jail:
bootstrap pkg, initialize db and install peertube's dependencies, always as root (sudo not yet installed):
shpkg pkg update pkg install -y sudo bash wget git python nginx pkgconf postgresql13-server postgresql13-contrib redis openssl node npm yarn ffmpeg unzip
Install PNPM:
shsudo npm install --global pnpm
Allow users in the wheel group (hope you don't forgot to add your user on wheel group!) to use sudo.
shvisudo
Uncomment the line 90
%wheel ALL=(ALL) ALL
Enable nginx, redis, postgresql services and initialize database.
shsysrc postgresql_enable="YES" sysrc redis_enable="YES" sysrc nginx_enable="YES"
Initialize database and start services
shservice postgresql initdb service postgresql start service redis start service nginx start
macOS
Add the packages:
shbrew install bash ffmpeg nginx postgresql openssl gcc make redis git yarn pnpm
You may need to update your default version of bash.
How to change your default shell
shwhich -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.Run the services:
shbrew services run postgresql brew services run redis
On macOS, the
postgresql
user can be_postgres
instead ofpostgres
. Ifsudo -u postgres createuser -P peertube
gives you anunknown user: postgres
error, you can trysudo -u _postgres createuser -U peertube
.
Gentoo
Add this to
/etc/portage/sets/peertube
:net-libs/nodejs sys-apps/yarn sys-apps/pnpm 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
If you are on a "stable" Gentoo you need to accept the testing keyword ~amd64 yarn:
shmkdir -p /etc/portage/package.keywords cat << EOF >> /etc/portage/package.keywords/peertube # required by yarn (argument) for PeerTube sys-apps/yarn ~amd64 sys-apps/pnpm ~amd64 EOF
Compile the peertube set:
shemerge -a @peertube
Initialize the PostgreSQL database if you just merged it:
shemerge --config postgresql
(For OpenRC) Enable and then start the services (replace with the correct PostgreSQL slot):
shrc-update add redis rc-update add postgresql-11 rc-service redis start rc-service postgresql-11 start
Create Python version symlink for youtube-dl:
shemerge -1 python-exec
OpenBSD
Install Packages:
shpkg_add sudo bash wget git python nginx pkgconf postgresql-server postgresql-contrib redis openssl
Install yarn:
shnpm install --global yarn
Install PNPM:
shsudo npm install --global pnpm
Allow users in the wheel group to use sudo
shvisudo
Uncomment line #43:
%wheel ALL=(ALL) ALL
Enable services:
shrcctl enable postgresql redis nginx
Other distributions
Feel free to update this file in a pull request!