Tech Expert & Vibe Coder

With 15+ years of experience, I specialize in self-hosting, AI automation, and Vibe Coding – building applications using AI-powered tools like Google Antigravity, Dyad, and Cline. From homelabs to enterprise solutions.

How to Install PeerTube on Proxmox Container With Ubuntu Server

Self-Hosting 7 min read Published Apr 28, 2026

PeerTube is the leading open-source, ActivityPub-federated video platform that gives you full control over your content, comments, and community without Big Tech gatekeepers. Running it inside a lightweight Proxmox LXC container on Ubuntu Server delivers strong isolation, easy snapshots, and efficient resource management—perfect for homelab or small-scale deployments.

This step-by-step guide shows exactly how to create a dedicated Ubuntu container in Proxmox, install PeerTube following the current official production method, configure Nginx and SSL, and get your instance live. By the end you’ll have a fully functional, production-ready PeerTube server.

Why choose this stack? Proxmox LXC containers run near bare-metal speed with minimal overhead, while Ubuntu 24.04 LTS provides the exact dependency compatibility PeerTube expects. You get automatic backups via Proxmox, clear resource limits, and the ability to scale later by adding storage mounts or remote transcoding runners.

Prerequisites and Hardware Recommendations

Before starting, make sure you have:

  • A running Proxmox VE 8.x or newer host with at least 8 GB RAM and fast storage (SSD/NVMe recommended for video workloads).
  • A domain name with an A record pointing to your public IP (or use a dynamic DNS service with port forwarding).
  • Basic comfort with the Proxmox web UI and Linux terminal.

Hardware minimums (from official recommendations): 2 vCPU cores, 4 GB RAM, and enough fast storage for your video library. For comfortable transcoding of multiple resolutions and 100+ concurrent viewers, allocate 4 vCPU cores and 6–8 GB RAM. Transcoding is CPU-heavy; if you plan heavy use, consider offloading it later with remote runners.

Pro Tip: Give the container its own static IP on your LAN so you can access the web UI directly during setup. Later you can expose it via your router or a reverse proxy on the Proxmox host.

Step 1: Create the Ubuntu LXC Container in Proxmox

Log into your Proxmox web interface.

  1. Download the Ubuntu template
    Go to local (or your template storage) → CT TemplatesTemplates. Search for “ubuntu-24.04” and download the latest standard template (e.g., ubuntu-24.04-standard_24.04-1_amd64.tar.gz).
  2. Create the container
    Click Create CT (top right).

    • General: CT ID 201, Hostname peertube, uncheck “Unprivileged container” only if you need nested Docker later (leave checked for maximum security).
    • Template: Select the Ubuntu 24.04 template you downloaded.
    • Disks: 60 GB root disk (thin provisioned). Add a second mount point later if you want separate video storage.
    • CPU: 4 cores.
    • Memory: 6144 MB RAM + 512 MB swap.
    • Network: Bridge vmbr0, IPv4 static 192.168.1.150/24 (adjust to your subnet), Gateway your router IP.
    • DNS: Your router or 1.1.1.1 / 8.8.8.8.
    • Finish and start the container.

This process is identical to the one used in our other self-hosted guides on the site.

Once running, click the container → Console and log in as root (password you set during creation).

Step 2: Prepare the Container for PeerTube

Update the system and install all required dependencies exactly as PeerTube expects in 2026:

apt update && apt upgrade -y
apt install -y curl sudo unzip vim python3-dev python3-pip python-is-python3 \
  certbot nginx ffmpeg postgresql postgresql-contrib openssl g++ make \
  redis-server git cron wget

Install Node.js 22.x LTS (the currently supported range):

curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt install -y nodejs
npm install -g pnpm

Enable and start core services:

systemctl enable --now redis postgresql

Create the dedicated peertube user and directories:

useradd -m -d /var/www/peertube -s /bin/bash peertube
chmod 755 /var/www/peertube
sudo -u peertube mkdir -p /var/www/peertube/{config,storage,versions,backup}

Step 3: Install PeerTube

Fetch the latest stable release dynamically:

VERSION=$(curl -s https://api.github.com/repos/chocobozzz/peertube/releases/latest | grep tag_name | cut -d '"' -f 4)
echo "Installing PeerTube $VERSION"

Download and extract:

cd /var/www/peertube/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
sudo -u peertube ln -s versions/peertube-${VERSION} /var/www/peertube/peertube-latest

Install Node dependencies (this can take 5–10 minutes):

cd /var/www/peertube/peertube-latest
sudo -H -u peertube npm run install-node-dependencies -- --production
sudo -u peertube pnpm add --workspace-root --no-lockfile --prod node-addon-api node-gyp
sudo -u peertube SHARP_FORCE_GLOBAL_LIBVIPS=1 npm explore sharp -- npm run build

Create the production configuration:

sudo -u peertube cp config/default.yaml /var/www/peertube/config/default.yaml
sudo -u peertube cp config/production.yaml.example /var/www/peertube/config/production.yaml

Edit /var/www/peertube/config/production.yaml (use nano or vim):

  • Set webserver: hostname: your-domain.com (no https://)
  • Generate a strong secret with openssl rand -hex 32 and paste under secrets
  • Configure PostgreSQL: host localhost, user peertube, the password you will create next, database peertube_prod
  • Set Redis host localhost
  • Add your admin email under admin: email

Create the PostgreSQL database and user:

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

Step 4: Configure Web Server and SSL

Copy the official Nginx template:

cp /var/www/peertube/peertube-latest/support/nginx/peertube /etc/nginx/sites-available/peertube
ln -s /etc/nginx/sites-available/peertube /etc/nginx/sites-enabled/peertube

Edit the file and replace placeholders:

sed -i 's/${WEBSERVER_HOST}/your-domain.com/g' /etc/nginx/sites-available/peertube
sed -i 's/${PEERTUBE_HOST}/127.0.0.1:9000/g' /etc/nginx/sites-available/peertube

Test and reload Nginx:

nginx -t && systemctl reload nginx

Obtain a free Let’s Encrypt certificate (stop Nginx temporarily for standalone mode):

systemctl stop nginx
certbot certonly --standalone -d your-domain.com --agree-tos --email [email protected]
systemctl start nginx

Update the renewal config to use webroot for future automatic renewals (edit /etc/letsencrypt/renewal/your-domain.com.conf).

Apply PeerTube TCP tuning:

cp /var/www/peertube/peertube-latest/support/sysctl.d/30-peertube-tcp.conf /etc/sysctl.d/
sysctl -p /etc/sysctl.d/30-peertube-tcp.conf

Step 5: Start PeerTube and Verify

Copy and enable the systemd service:

cp /var/www/peertube/peertube-latest/support/systemd/peertube.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable --now peertube

Watch the logs:

journalctl -fu peertube

You should see “PeerTube started on http://127.0.0.1:9000”. Visit https://your-domain.com — you’ll see the welcome screen.

Create your admin account (first run uses the root user):

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

Set a strong password when prompted. Log in at https://your-domain.com/login with username root.

Post-Installation Tasks

  • Change admin username (optional but recommended) via the web UI under Administration → Users.
  • Enable email by filling SMTP settings in production.yaml and restarting PeerTube.
  • Backups: Proxmox snapshots + manual database dump script (see official guide for the exact one-liner).
  • Updates: Simply repeat the VERSION= fetch + download + ln -s steps, then systemctl restart peertube.

For a similar clean LXC + app deployment pattern, see our detailed MMMF on Proxmox guide.

Troubleshooting Common Issues

Service fails to start — Check logs with journalctl -u peertube -n 100. Most often a missing secret, wrong PostgreSQL password, or Node version mismatch.

“Permission denied” on storage — Make sure chown -R peertube:peertube /var/www/peertube/storage and that the directory is writable.

Video transcoding is slow — Increase container CPU cores or move transcoding to a remote runner (advanced feature in PeerTube ≥ v6).

SSL renewal fails — Double-check that port 80 is reachable from the internet during renewal or switch to webroot mode.

Federation not working — Verify that your domain resolves correctly and that the webserver: hostname in production.yaml matches exactly.

Final Thoughts

You now have a fully operational PeerTube instance running securely inside a Proxmox Ubuntu container. This setup gives you complete ownership of your video content, federation with the wider Fediverse, and the reliability of Proxmox snapshots.

The entire process follows PeerTube’s official production guide and Proxmox VE Linux Container documentation to the letter, so you’re using battle-tested methods that thousands of administrators rely on daily.

Ready to upload your first video? Head to the web UI, create a channel, and start sharing. If you run into any edge cases or want to add object storage or remote transcoding later, the official documentation and our other homelab guides have you covered.

Previous article

How to Install Prowlarr on Proxmox Container With Ubuntu Server

Next article

How to Install Caddy on Proxmox Container With Ubuntu Server

Leave a Comment

Your email address will not be published. Required fields are marked *

Search Articles

Jump to another topic without leaving the reading flow.

Categories

Browse more posts grouped by topic.

About the Author

Vipin PG

Vipin PG

Expert Tech Support & Services

Vipin PG is a software professional with 15+ years of hands-on experience in system infrastructure, browser performance, and AI-powered development. Holding an MCA from Kerala University, he has worked across enterprises in Dubai and Kochi before running his independent tech consultancy. He has written 180+ tutorials on Docker, networking, and system troubleshooting - and he actually runs the setups he writes about.

Stay Updated

Get new posts and practical tech notes in your inbox.

Short, high-signal updates covering self-hosting, automation, AI tooling, and infrastructure fixes.