Dependencies
⚠️ Warning: dependencies guide is maintained by the community. Some parts may be outdated! ⚠️
Main dependencies supported by PeerTube:
nodeLTS (>= 20.19 and < 21 or >= 22.12 and <23)yarn1.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 vimIt 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 pnpmInstall 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.8Install 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 postgresqlArch Linux
Run:
sudo pacman -S nodejs-lts-iron yarn ffmpeg postgresql openssl redis git wget unzip python python-pip base-devel npm nginx pnpmNow that dependencies are installed, before running PeerTube you should start PostgreSQL and Redis:
sudo systemctl start redis postgresqlCentOS 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 pnpmInstall 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-7You need to use a more up to date version of G++ in order to run the
npm run install-node-dependenciescommand, hence the installation of devtoolset-7.shsudo scl enable devtoolset-7 bashLater 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 -- --productionInitialize 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 postgresqlCentos 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 pnpmInstall 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 ffmpegInstall 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 unzipYou'll need a symlink for python3 to python for youtube-dl to work
shsudo ln -s /usr/bin/python3 /usr/bin/pythonInitialize 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 postgresqlRocky Linux 8.4
Pull the latest updates:
shsudo dnf update -yInstall NodeJS 20.x:
shsudo dnf module install -y nodejs:20Install yarn:
shsudo npm install --global yarnInstall PNPM:
shsudo npm install --global pnpmInstall 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 -yInstall 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 postgresqlUnknown 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 pnpmEnable 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.rpmThis is necessary because
ffmpegis 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.xConfigure 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.confPost-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.serviceFirewall
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 --reloadConfigure max ports
This is necessary if you are running dev setup, otherwise you will have errors with
nodemonshecho 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 # rebootInstall NodeJS
shsudo dnf module install nodejs:20Install Yarn
shcurl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo sudo dnf install yarnInstall PNPM:
shsudo npm install --global pnpmInstall 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 ffmpegRun:
shsudo dnf install nginx postgresql postgresql-server postgresql-contrib openssl gcc-c++ make wget redis gitYou'll need a symlink for python3 to python for youtube-dl to work
shsudo alternatives --set python3 /usr/bin/pythonInitialize the PostgreSQL database:
shsudo PGSETUP_INITDB_OPTIONS='--auth-host=md5' postgresql-setup --initdb --unit postgresqlNow that dependencies are installed, before running PeerTube you should enable and start PostgreSQL and Redis:
shsudo systemctl enable --now redis sudo systemctl enable --now postgresqlIf 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 nginxFirewall
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 --reloadConfigure max ports
This is necessary if you are running dev setup, otherwise you will have errors with
nodemonshecho 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 unzipInstall PNPM:
shsudo npm install --global pnpmAllow users in the wheel group (hope you don't forgot to add your user on wheel group!) to use sudo.
shvisudoUncomment the line 90
%wheel ALL=(ALL) ALLEnable 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 pnpmYou 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 bashIn a new shell, type
bash --versionto assert your changes took effect and correctly modified your default bash version.Run the services:
shbrew services run postgresql brew services run redisOn macOS, the
postgresqluser can be_postgresinstead ofpostgres. Ifsudo -u postgres createuser -P peertubegives you anunknown user: postgreserror, 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/certbotIf 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 EOFCompile the peertube set:
shemerge -a @peertubeInitialize 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 startCreate 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 opensslInstall yarn:
shnpm install --global yarnInstall PNPM:
shsudo npm install --global pnpmAllow users in the wheel group to use sudo
shvisudoUncomment line #43:
%wheel ALL=(ALL) ALLEnable services:
shrcctl enable postgresql redis nginx
Other distributions
Feel free to update this file in a pull request!

