Een eigen PeerTube instance

vrijdag 16 december 2022 - 522 woorden, 3 min read

In navolging van het opzetten van een eigen Mastodon instance als alternatief voor Twitter, heb ik ook een eigen PeerTube instance opgezet voor mijn video's. PeerTube maakt net als Mastodon gebruik van het ActivityPub protocol. Je kunt dus PeerTube accounts volgen vanuit jouw Mastodon of Pixelfed account.

Setup

Voor het opzetten van een PeerTube instance heb ik deze documentatie gevolgd. In deze setup met docker compose heb ik de volgende services achterwege gelaten:

  • webserver, ik maak gebruik van een nginx reverse proxy setup
  • certbot
  • postfix, ik maak gebruik van mijn eigen smtp mailserver

Zo ziet mijn docker-compose.yml er nu uit:

version: "3.3"

services:

  peertube:
    image: chocobozzz/peertube:production-bullseye
    env_file:
      - .env
    ports:
     - "127.0.0.1:1935:1935" # Comment if you don't want to use the live feature
     - "127.0.0.1:9090:9000" # Uncomment if you use another webserver/proxy or test PeerTube in local, otherwise not suitable for production
    volumes:
      - assets:/app/client/dist
      - ./docker-volume/data:/data
      - ./docker-volume/config:/config
    depends_on:
      - postgres
      - redis
    restart: unless-stopped

  postgres:
    image: postgres:13-alpine
    env_file:
      - .env
    volumes:
      - ./docker-volume/db:/var/lib/postgresql/data
    ports:
      - "127.0.0.1:8432:5432"
    restart: "unless-stopped"

  redis:
    image: redis:6-alpine
    volumes:
      - ./docker-volume/redis:/data
    ports:
      - "127.0.0.1:8379:6379"
    restart: unless-stopped

Via een nginx reverse proxy draai ik zelf een nginx webserver waar ik middels certbot en Let’s Encrypt een SSL certificaat heb aangemaakt.

Zo ziet mijn nginx configuratie eruit:

server {
  listen 80;
  listen [::]:80;

  server_name tube.sebastix.com;

  include snippets/letsencrypt.conf;  
  # Uncomment these lines when SSL certificates are generated by CertBot
  return 301 https://$host$request_uri; 
}

server {
    listen [::]:443 ssl;
    listen 443 ssl;
    server_name tube.sebastix.com;
    server_tokens off;

    access_log /var/log/nginx/tube.sebastix.com.access.log;
    error_log /var/log/nginx/tube.sebastix.com.error.log;

    ssl_certificate /etc/letsencrypt/live/tube.sebastix.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/tube.sebastix.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/tube.sebastix.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    client_max_body_size 0;

    location / {
      proxy_pass http://127.0.0.1:9090;
      proxy_cache_bypass                    $http_upgrade;
      proxy_set_header Upgrade              $http_upgrade;
      proxy_set_header Connection           "upgrade";
      proxy_set_header  Host                $host;
      proxy_set_header  X-Real-IP           $remote_addr;
      proxy_set_header  X-Forwarded-Ssl     on;
      proxy_set_header  X-Forwarded-For     $proxy_add_x_forwarded_for;
      proxy_set_header  X-Forwarded-Proto   $scheme;
      proxy_set_header  X-Frame-Options     SAMEORIGIN;
      add_header Content-Security-Policy "frame-ancestors *.sebastix.nl *.sebastix.com *.sebastix.dev nwb.social;"; 
      proxy_http_version 1.1;               # recommended with keepalive connections

      # WebSocket proxying - from http://nginx.org/en/docs/http/websocket.html
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
    }
}

Het embedden van video’s op externe websites werkt niet out-of-the-box, daarom dat ik deze regel heb toegevoegd voor enkele sites waar ik de video’s embed:

  add_header Content-Security-Policy "frame-ancestors *.sebastix.nl *.sebastix.com *.sebastix.dev nwb.social *sebastix.social;"; 

Upgrade naar v5

Vorige week verscheen versie 5.0.0 en de upgrade naar deze versie was iets meer werk dan alleen het uitvoeren van docker compose pull.

In het .env bestand heb ik een nieuwe variabel PEERTUBE_SECRET moeten toevoegen om de peertube container weer te starten. In deze container heb ik daarna dit commando uitgevoerd: docker compose exec -u peertube peertube node dist/scripts/migrations/peertube-5.0.js zoals beschreven in de release notes.

sebastian@tube.sebastix.com

Mijn PeerTube instance kun je bezoeken op https://tube.sebastix.com waar ik al verschillende playlists met video’s heb toegevoegd. Dit zijn verschillende video’s die verspreid stonden op YouTube onder meerdere accounts, Vimeo en Flickr. In mijn archief heb ik nog andere video’s die ik later online zal plaatsen. Dit zijn onder andere video’s die al meer dan 20 jaar oud zijn en gemaakt zijn tijdens het uitgaan in verschillende Belgische discotheken (lasershows).

PeerTube of Sebastian Hagens

Met PeerTube hoop ik een mooie oplossing te hebben gevonden om al mijn video’s op een eigen online plek te distribueren. Dit met hetzelfde gemak als wat ik gewend ben van YouTube of Vimeo. De tijd zal het uitwijzen of de oplossing ook werkt voor de langere termijn.


Sebastian Hagens @Sebastix
I work as creative webdeveloper & tech consultant and care about digital freedoms. Follow me:
or visit my contact page