——————————————-
rustdesk
This tutorial is for users of Debian GNU/Linux who want to setup a self-hosted PeerTube instance. The official documentation and the Linode documentation together were all I needed to get everything up. Although tempted to setup the reverse proxy virtual hosts using apache, I figured no need to get spicy on the first spin ups. To begin with, install node and some development dependencies and then use npm to install yarn. Here's what I did:
sudo apt-get update -y && sudo apt-get upgrade -y sudo apt-get install build-essential gnupg curl unzip sudo curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt-get install nodejs -y sudo npm install -g yarn
After that, install all remaining dependencies. I like doing things in this order just to ensure node and yarn are happy before I move on. This comes from trauma dealing with node and yarn over in Mastodon territory. Here's the other pre-requisites:
sudo apt-get install sudo ufw python3-dev python3-pip python-is-python3 certbot nginx ffmpeg postgresql postgresql-contrib openssl g++ make redis-server git cron wget letsencrypt python3-certbot-nginx postfix mailutils
Of course, this would be a good time at this stage to make sure that A records and PTR records are set up for the IP address being allocated to this project. I did that. While those were caching, I set up the non-root and postgres management user and established the web root as its home directory:
sudo systemctl start redis postgresql sudo systemctl enable --now nginx postgresql redis-server sudo useradd -m -d /var/www/peertube -s /bin/bash -p peertube peertube sudo passwd peertube ls -ld /var/www/peertube [standard out should be drwxr-xr-x]
After setting up the user and home directory, I created the database and associated rights/privileges, and downloaded the latest peertube repository:
sudo -u postgres createuser -P peertube sudo -u postgres createdb -O peertube -E UTF8 -T template0 peertube_prod sudo -u postgres psql -c "CREATE EXTENSION pg_trgm;" peertube_prod sudo -u postgres psql -c "CREATE EXTENSION unaccent;" peertube_prod VERSION=$(curl -s https://api.github.com/repos/chocobozzz/peertube/releases/latest | grep tag_name | cut -d '"' -f 4) && echo "Latest Peertube version is $VERSION"
After that was done, it was now time to create some directories and files for peer tube to be customized to your particular server and then download and build the latest version:
cd /var/www/peertube VERSION=$(curl -s https://api.github.com/repos/chocobozzz/peertube/releases/latest | grep tag_name | cut -d '"' -f 4) && echo "Latest PeerTube version is $VERSION" sudo -u peertube mkdir config storage versions sudo -u peertube chmod 750 config/ cd versions sudo -u peertube wget -q "https://github.com/Chocobozzz/PeerTube/releases/download/${VERSION}/peertube-${VERSION}.zip" sudo -u peertube unzip -q peertube-${VERSION}.zip && sudo -u peertube rm peertube-${VERSION}.zip cd /var/www/peertube sudo -u peertube ln -s versions/peertube-${VERSION} ./peertube-latest cd ./peertube-latest sudo -H -u peertube yarn install --production --pure-lockfile sudo -u peertube cp peertube-latest/config/default.yaml config/default.yaml sudo -u peertube cp peertube-latest/config/production.yaml.example config/production.yaml openssl rand -hex 32 <21122312redacted32b82323132redacted23277b212321> sudo -u peertube nano config/production.yaml
Adjust the webserver, secrets, database, and admin sections to chosen values. I will note that I have smtp setup on this host but I cannot yet get the config working with it. I will update the wiki (link at top) when this fix goes live. Now the nice thing is that they not only provide your nginx reverse proxies, but they give you some sexy sed commands to tweak them to your needs. This is a far cry from setting up rocket chat or r-studio where you are in nomad's land setting up the RPs. Here we go, just replace domain.com with your value:
sudo cp /var/www/peertube/peertube-latest/support/nginx/peertube /etc/nginx/sites-available/peertube sudo sed -i 's/${WEBSERVER_HOST}/domain.com/g' /etc/nginx/sites-available/peertube sudo sed -i 's/${PEERTUBE_HOST}/127.0.0.1:9000/g' /etc/nginx/sites-available/peertube sudo ln -s /etc/nginx/sites-available/peertube /etc/nginx/sites-enabled/peertube sudo systemctl stop nginx sudo certbot certonly --standalone --post-hook "systemctl restart nginx" sudo systemctl reload nginx
Make sure that some needed tcp and kernel stuff is right:
sudo cp /var/www/peertube/peertube-latest/support/sysctl.d/30-peertube-tcp.conf /etc/sysctl.d/ sudo sysctl -p /etc/sysctl.d/30-peertube-tcp.conf <net.core.default_qdisc = fq_codel> <net.ipv4.tcp_congestion_control = bbr>
Build your systemd units:
sudo cp /var/www/peertube/peertube-latest/support/systemd/peertube.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable peertube sudo systemctl start peertube sudo systemctl status peertube
Once that's done, you are just about ready, you only need to reset your root password for logging in to the web panel:
cd /var/www/peertube/peertube-latest sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run reset-password -- -u root
After this, the rest is configuration on the website itself. Obviously, I made sure to harden the server, add the VM to the backup rotation, snapshot rotation, and configured the firewall and required cron jobs (certs, trim). But of course the customized logo preferences don't work so after some forum hunting, I just overwrote the logos manually:
cd /var/www/peertube/peertube-latest/client/dist/assets/images/ <favicon.png and logo.svg>
In my case, I allocated the VM running this instance 8GB of RAM and 8 cores. In searching the official forums, I found the the project founder recommending that - for the fastest transcoding - that you turn on threads to 8, and leave concurrency at 1. For now, this seems to be reasonably quick, and the initial transcoding takes about 85% of the time it took to make the original video. Since creating these instances, I have setup channels, playlists, tested live streaming with OBS Studio and allowed legacy and/or members in good standing in the pubglug to join in on testing the functionality. All is working well … here are the instances I setup:
So far so good, but so what?! Now, when the physical host crashes and/or any VMs fail, I have two ways to restore the instances: 1) A hot spare and 2) dedicated remote hosting. Alright, will something fail so we can test this?! Noooo … I jest … please everything just work. I don't need more stress!
— oemb1905 2024/12/25 00:57