Naar de inhoud
← Alle berichten

Je eigen tapeshelf draaien

tapeshelf is open source onder de AGPL-3.0, en de app achter tapeshelf.com is dezelfde die je op je eigen server zult kunnen draaien. De openbare repository en de installatiegids zijn er nog niet. Tot het zover is, lees je hier hoe een eigen installatie eruit gaat zien, zodat je kunt beslissen of het iets voor je is en een server kunt plannen.

Eén stack

Een installatie is één Docker Compose-stack:

browser ──HTTPS──► Caddy ─── the web app, security headers
                     └── /api, /ws ──► api ──► Postgres, Redis
                                       worker (ffmpeg) ──► Postgres, Redis
browser ──► S3-compatible storage: uploads, video segments, images
  • Caddy serveert de webapp en geeft API- en WebSocket-verkeer door. Hij haalt zelf een certificaat van Let’s Encrypt op en vernieuwt het. Gebruik je al een reverse proxy, dan kan Caddy daarachter draaien zonder TLS.
  • api is alles wat de app doet: accounts, planken, toegangscontroles, verzoeken en ruilen, tijdelijke links en het uitgeven van videosleutels.
  • worker is dezelfde code, gestart als tweede proces, in een image met ffmpeg. Die schoont uploads op en zet ze om, versleutelt de streamingkopieën, maakt de frames en voorbeelden, rendert bewerkingen en verstuurt e-mail en meldingen.
  • Postgres bewaart de gegevens. Redis bewaart de wachtrijen en kortlevende caches.
  • Een eenmalige migrate-container draait bij elke start. Die voert databasemigraties uit, maakt het beheerdersaccount aan op basis van je instellingen en richt de buckets in: openbaar lezen zonder opsommen voor afbeeldingen, een opruimregel voor afgebroken uploads, en CORS voor je domein.
  • Een backup-dienst schrijft de database één keer per dag weg naar je bucket en bewaart de laatste 14 dumps.

Video gaat nooit door de API. Browsers uploaden rechtstreeks naar de opslag en streamen segmenten er rechtstreeks vandaan, dus de opslag heeft een eigen adres nodig dat browsers kunnen bereiken. Dat is het enige onderdeel waar je even over moet nadenken. Je kunt tapeshelf laten wijzen naar een S3-compatibele dienst die je al gebruikt, of de opslag in dezelfde stack draaien.

Wat je nodig hebt

  • Een Linux-server met Docker en de Compose-plug-in. Twee CPU-kernen en 4 GB RAM is een redelijk minimum.
  • Schijfruimte voor de tijdelijke bestanden van de worker: ongeveer tweeënhalf keer de grootste video, voor elke video die tegelijk wordt verwerkt.
  • Een domein dat naar de server wijst, met poort 80 en 443 open.
  • Een SMTP-account voor e-mail: bevestigingen, wachtwoordherstel en meldingen.
  • Optioneel: een eigen Google OAuth-client voor “Inloggen met Google”, en sleutels voor Cloudflare Turnstile voor de captcha bij herhaalde registraties en nieuwe gasten.

Video omzetten is het zware werk. H.264-video tot 1080p die nog een paar controles doorstaat, hoeft alleen opnieuw verpakt te worden; dat duurt seconden. Een volledige omzetting op een kleine server met twee kernen duurt ongeveer even lang als de video zelf, soms langer. Wie uploadt, ziet de voortgang live en kan de site gewoon blijven gebruiken.

Het geheim dat je niet kwijt mag raken

Alle instellingen staan in één omgevingsbestand: het databasewachtwoord, sessiegeheimen, toegangsgegevens voor de opslag, SMTP, en de hoofdsleutel waaruit de versleutelingssleutel van elke video wordt afgeleid. Hoe tapeshelf video versleutelt legt dat uit. In productie weigert de API te starten met de voorbeeldwaarden uit het voorbeeldbestand.

Zet de hoofdsleutel in een wachtwoordbeheerder zodra je hem hebt gegenereerd. Raak je hem kwijt, dan speelt geen enkele geüploade video meer af, en het terugzetten van de database helpt niet. Ook de codes uit authenticator-apps voor tweestapsverificatie werken dan niet meer, want hun geheimen zijn ermee versleuteld.

Wat er anders is dan op tapeshelf.com

Een zelf gehoste installatie heeft geen abonnementen en geen betalingen. Er is geen Free of Pro, geen tabblad Abonnement, geen aanmoediging om over te stappen en geen wachtpagina voor downloads. In detail:

  • Geen limieten tenzij je ze instelt. Standaard is er geen maximum voor de grootte van video’s of planken. Als beheerder kun je één limiet per video en één per plank instellen, voor iedereen dezelfde.
  • Downloads beginnen meteen, op volle snelheid, rechtstreeks uit de opslag.
  • Wat op tapeshelf.com bij Pro hoort, is er voor iedereen. Dat zijn de video-editor, de verborgen pagina en wachtwoorden op tijdelijke links. Verwijderde video’s zijn 90 dagen terug te zetten.
  • De bescherming tegen misbruik blijft. De daglimiet voor verzoeken (standaard 30 video’s, instelbaar) en de limieten van de API beschermen de server, dus die blijven.
  • Jouw naam, jouw regels. De installatie heeft een eigen naam en contactadres, en toont je voorwaarden en privacybeleid uit bestanden die jij aanlevert. Bezoekers zien eerst een eenvoudige inlogpagina.

Al het andere is dezelfde app: planken met stapels en categorieën, uploads die verdergaan na een onderbreking, het voorbeeld van 16 frames, versleuteld streamen, verzoeken en ruilen over meerdere rondes, ruilen met gasten, tijdelijke links, vrienden en chat, tweestapsverificatie (verplicht voor de beheerder), meldingen, de app in 20 talen, het melden van inhoud, en een beheerpaneel.

Houd er rekening mee dat een installatie een eiland op zich is. Mensen daarop delen en ruilen alleen met elkaar, nooit met accounts op tapeshelf.com of op andere installaties.

Updates en back-ups

Bijwerken betekent de nieuwe versie ophalen en de stack opnieuw starten. Migraties worden bij het starten uitgevoerd, en een video die werd verwerkt, begint opnieuw. Maak voor een grote update toch eerst een back-up.

De dagelijkse databasedumps komen vanzelf in je bucket. De video’s staan al in de opslag, en hun sleutels komen voort uit de hoofdsleutel. De drie dingen die je veilig moet bewaren, zijn dus de bucket, de databasedumps en die ene sleutel.

De licentie, in één alinea

Je mag tapeshelf draaien, bestuderen en aanpassen. Pas je het aan en laat je andere mensen je aangepaste versie via een netwerk gebruiken, dan verplicht de AGPL je om hun de broncode van die versie aan te bieden. Draai je het ongewijzigd, voor jezelf, je familie of je vrienden, dan hoef je alleen de licentie erbij te houden.

Wanneer

Binnenkort publiceren we de repository, kant-en-klare containerimages en een installatiegids over opslag, e-mail, back-ups en het oplossen van problemen. De pagina over zelf hosten en deze blog melden het op de dag zelf, en met de RSS-feed mis je het het makkelijkst niet. Intussen is tapeshelf.com de snelste manier om de app uit te proberen, en bij de prijzen vind je de details.