From 643272cf6f0bcb33cecd20aa624c58e4e49c887a Mon Sep 17 00:00:00 2001 From: Archos Date: Fri, 10 Oct 2025 07:09:28 +0200 Subject: [PATCH] Added README file with instructions --- README.md | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) diff --git a/README.md b/README.md index e69de29..2f0b742 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,117 @@ +# Move PeerTube video storage to Hetzner S3 (Cloudron setup, CORS fix) +Hi everyone, +after a few failed attempts with other S3 providers like **iDrive** and **Backblaze**, +I tried **Hetzner Object Storage (S3)** — where we also host our Cloudron servers. +Here’s my working setup and migration process — maybe it helps someone. +Everything works great: I’ve successfully moved **~240 GB** of videos, all without issues. + +This guide shows how to move PeerTube video storage to **Hetzner Object Storage (S3-compatible)** on a **Cloudron instance**. Tested with PeerTube 7.3.0 and Cloudron v8.3.2 (Ubuntu 24.04.1 LTS) + + + +## 1️⃣ Create your S3 bucket(s) +- Region: **fsn1 (Falkenstein)** +- Visibility: **Public (read)** +- Block Public Access: **off** +Example buckets: +- `peertube-1` +- `peertube-2` (optional, for another instance) + +## 2️⃣ Set CORS configuration +Create a file called `example-cors.xml`: +```json + + + * + GET + HEAD + * + + +``` +Apply it to your bucket(s): +```json +s3cmd --config=/dev/null --no-check-certificate \ + --access_key=YOUR_ACCESS_KEY \ + --secret_key=YOUR_SECRET_KEY \ + --host=fsn1.your-objectstorage.com \ + --host-bucket="%(bucket)s.fsn1.your-objectstorage.com" \ + setcors example-cors.xml s3://peertube-1 +``` +Check it: +```json +s3cmd --config=/dev/null --no-check-certificate \ + --access_key=YOUR_ACCESS_KEY \ + --secret_key=YOUR_SECRET_KEY \ + --host=fsn1.your-objectstorage.com \ + --host-bucket="%(bucket)s.fsn1.your-objectstorage.com" \ + info s3://peertube-1 | grep CORS -A1 +``` +You should see: +```json +CORS: *... +``` +## 3️⃣ Edit PeerTube configuration +Open `/app/data/production.yaml` (Cloudron path) and add or modify this block: +```yaml +object_storage: + enabled: true + endpoint: 'https://fsn1.your-objectstorage.com' + region: 'eu-central' + credentials: + access_key_id: 'YOUR_ACCESS_KEY' + secret_access_key: 'YOUR_SECRET_KEY' + videos: + bucket_name: 'peertube-1' + prefix: 'videos/' + base_url: 'https://peertube-1.fsn1.your-objectstorage.com' + upload_acl: 'public-read' + streaming_playlists: + bucket_name: 'peertube-1' + prefix: 'hls/' + base_url: 'https://peertube-1.fsn1.your-objectstorage.com' + upload_acl: 'public-read' + previews: + bucket_name: 'peertube-1' + prefix: 'previews/' + base_url: 'https://peertube-1.fsn1.your-objectstorage.com' + upload_acl: 'public-read' + thumbnails: + bucket_name: 'peertube-1' + prefix: 'thumbnails/' + base_url: 'https://peertube-1.fsn1.your-objectstorage.com' + upload_acl: 'public-read' + captions: + bucket_name: 'peertube-1' + prefix: 'captions/' + base_url: 'https://peertube-1.fsn1.your-objectstorage.com' + upload_acl: 'public-read' +``` +Save and restart PeerTube from the Cloudron dashboard. + +## 4️⃣ Move videos to S3 +From the Cloudron Web Terminal: +```bash +cd /app/code/server +``` +``` +gosu cloudron:cloudron npm run create-move-video-storage-job -- --to-object-storage +``` +This creates jobs that migrate all videos to your S3 bucket. Progress can be monitored in Cloudron → App → Logs. + +## 5️⃣ Verify +Check the directory size before/after: + +```bash +du -sh /app/data/storage +du -sh /app/data/storage/* | sort -h +``` +When migration finishes, most data (videos, HLS, previews) should move to S3. Local disk usage should drop to a few GB. + + + +**Tested setup** +- PeerTube 7.3.0 +- Cloudron v8.3.2 +- Hetzner Object Storage (fsn1) +