support/doc/dependencies.md
:warning: Warning: dependencies guide is maintained by the community. Some parts may be outdated! :warning:
Main dependencies supported by PeerTube:
node LTS (>= 20.19 and < 21 or >= 22.12 and <23)yarn 1.x for PeerTube <= 7.3 or pnpm >= 10.x for PeerTube >= 8.0postgres >=10.xredis-server >=6.2ffmpeg >=4.3 (using a ffmpeg static build is not recommended)python >=3.8pipnote: only LTS versions of external dependencies are supported. If no LTS version matching the version constraint is available, only release versions are supported.
[[toc]]
On a fresh Debian/Ubuntu, as root user, install basic utility programs needed for the installation
sudo 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://nodesource.com/products/distributions
PeerTube <= v7.3 only Install yarn, and be sure to have a recent version: https://yarnpkg.com/en/docs/install#linux-tab
PeerTube >= v8.0 only Install PNPM:
sudo npm install -g pnpm
Install Python:
sudo apt update
sudo apt install python3-dev python3-pip python-is-python3
python --version # Should be >= 3.8
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 >= 6.x
Now that dependencies are installed, before running PeerTube you should start PostgreSQL and Redis:
sudo systemctl start redis postgresql
Run:
sudo pacman -S nodejs-lts-iron yarn ffmpeg postgresql openssl redis git wget unzip python python-pip base-devel npm nginx
sudo pacman -S yarn # PeerTube <= v7.3 only
sudo pacman -S pnpm # PeerTube >= v8.0 only
Now that dependencies are installed, before running PeerTube you should start PostgreSQL and Redis:
sudo systemctl start redis postgresql
Install NodeJS 20.x: https://nodesource.com/products/distributions
PeerTube <= v7.3 only Install yarn:
PeerTube >= v8.0 only Install PNPM:
sudo npm install -g pnpm
Install or compile ffmpeg:
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
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.
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++ npm run install-node-dependencies -- --production
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
Install NodeJS 20.x: https://nodesource.com/products/distributions
PeerTube <= v7.3 only Install yarn: https://yarnpkg.com/en/docs/install
PeerTube >= v8.0 only Install PNPM:
sudo npm install -g pnpm
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
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
You'll need a symlink for python3 to python for youtube-dl to work
sudo ln -s /usr/bin/python3 /usr/bin/python
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
Pull the latest updates:
sudo dnf update -y
Install NodeJS 20.x:
sudo dnf module install -y nodejs:20
PeerTube <= v7.3 only Install yarn:
sudo npm install --global yarn
PeerTube >= v8.0 only Install PNPM:
sudo npm install --global pnpm
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
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 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:
Upgrade your packages:
dnf upgrade
(Optional) Install certbot (choose instructions for your distribution): https://certbot.eff.org/all-instructions
Install NodeJS 20.x: https://nodesource.com/products/distributions
PeerTube <= v7.3 only Install yarn: https://yarnpkg.com/en/docs/install
PeerTube >= v8.0 only Install PNPM:
sudo npm install --global pnpm
Enable RPM Fusion 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.
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 >= 6.x
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
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.
# 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:
sudo firewall-cmd --permanent --zone=public --add-port=3000/tcp
sudo firewall-cmd --permanent --zone=public --add-port=9000/tcp
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
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
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
Install NodeJS
sudo dnf module install nodejs:20
PeerTube <= v7.3 only Install Yarn
curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
sudo dnf install yarn
PeerTube >= v8.0 only Install PNPM:
sudo npm install --global pnpm
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
Run:
sudo 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
sudo alternatives --set python3 /usr/bin/python
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:
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
Firewall
By default, you cannot access your server via public IP. To do so, you must configure firewall:
sudo firewall-cmd --permanent --zone=public --add-port=3000/tcp
sudo firewall-cmd --permanent --zone=public --add-port=9000/tcp
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
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
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):
pkg
pkg update
pkg install -y sudo bash wget git python nginx pkgconf postgresql13-server postgresql13-contrib redis openssl node npm yarn ffmpeg unzip
install sharp build dependencies: https://sharp.pixelplumbing.com/install/#building-from-source
PeerTube <= v7.3 only Install Yarn:
pkg install -y yarn
PeerTube >= v8.0 only Install PNPM:
sudo 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.
visudo
Uncomment the line 90
%wheel ALL=(ALL) ALL
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
Add the packages:
brew install ffmpeg nginx postgresql openssl gcc make redis git
brew install yarn # PeerTube <= v7.3 only
brew install pnpm # PeerTube >= v8.0 only
Run the services:
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.
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:
mkdir -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:
emerge -a @peertube
Initialize the PostgreSQL database if you just merged it:
emerge --config postgresql
(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
Create Python version symlink for youtube-dl:
emerge -1 python-exec
Install Packages:
pkg_add sudo bash wget git python nginx pkgconf postgresql-server postgresql-contrib redis openssl
PeerTube <= v7.3 only Install yarn:
npm install --global yarn
PeerTube >= v8.0 only Install PNPM:
sudo npm install --global pnpm
Allow users in the wheel group to use sudo
visudo
Uncomment line #43:
%wheel ALL=(ALL) ALL
Enable services:
rcctl enable postgresql redis nginx
Feel free to update this file in a pull request!