<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[[GUIDE] Move PeerTube video storage to Hetzner S3]]></title><description><![CDATA[<p dir="auto">Hi everyone,<br />
after a few failed attempts with other S3 providers like <strong>iDrive</strong> and <strong>Backblaze</strong>,<br />
I tried <strong>Hetzner Object Storage (S3)</strong> — where we also host our Cloudron servers.<br />
Here’s my working setup and migration process — maybe it helps someone.<br />
Everything works great: I’ve successfully moved <strong>~240 GB</strong> of videos, all without issues.</p>
<p dir="auto">This guide shows how to move PeerTube video storage to <strong>Hetzner Object Storage (S3-compatible)</strong> on a <strong>Cloudron instance</strong>. Tested with PeerTube 7.3.0 and Cloudron v8.3.2 (Ubuntu 24.04.1 LTS)</p>
<h2>1️⃣ Create your S3 bucket(s)</h2>
<ul>
<li>Region: <strong>fsn1 (Falkenstein)</strong></li>
<li>Visibility: <strong>Public (read)</strong></li>
<li>Block Public Access: <strong>off</strong><br />
Example buckets:</li>
<li><code>peertube-1</code></li>
</ul>
<h2>2️⃣ Set CORS configuration</h2>
<p dir="auto">Create a file called <code>example-cors.xml</code>:</p>
<pre><code class="language-json">&lt;CORSConfiguration&gt;
  &lt;CORSRule&gt;
    &lt;AllowedHeader&gt;*&lt;/AllowedHeader&gt;
    &lt;AllowedMethod&gt;GET&lt;/AllowedMethod&gt;
    &lt;AllowedMethod&gt;HEAD&lt;/AllowedMethod&gt;
    &lt;AllowedOrigin&gt;*&lt;/AllowedOrigin&gt;
  &lt;/CORSRule&gt;
&lt;/CORSConfiguration&gt;
</code></pre>
<p dir="auto">Apply it to your bucket(s):</p>
<pre><code class="language-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
</code></pre>
<p dir="auto">Check it:</p>
<pre><code class="language-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
</code></pre>
<p dir="auto">You should see:</p>
<pre><code class="language-json">CORS: &lt;CORSConfiguration ...&gt;&lt;AllowedOrigin&gt;*&lt;/AllowedOrigin&gt;...&lt;/CORSConfiguration&gt;
</code></pre>
<h2>3️⃣ Edit PeerTube configuration</h2>
<p dir="auto">Open <code>/app/data/production.yaml</code> (Cloudron path) and add or modify this block:</p>
<pre><code class="language-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'
</code></pre>
<p dir="auto">Save and restart PeerTube from the Cloudron dashboard.</p>
<h2>4️⃣ Move videos to S3</h2>
<p dir="auto">From the Cloudron Web Terminal:</p>
<pre><code class="language-bash">cd /app/code/server
</code></pre>
<pre><code>gosu cloudron:cloudron npm run create-move-video-storage-job -- --to-object-storage
</code></pre>
<p dir="auto">This creates jobs that migrate all videos to your S3 bucket. Progress can be monitored in Cloudron → App → Logs.</p>
<h2>5️⃣ Verify</h2>
<p dir="auto">Check the directory size before/after:</p>
<pre><code class="language-bash">du -sh /app/data/storage
du -sh /app/data/storage/* | sort -h
</code></pre>
<p dir="auto">When migration finishes, most data (videos, HLS, previews) should move to S3. Local disk usage should drop to a few GB.</p>
<p dir="auto"><strong>Tested setup</strong></p>
<ul>
<li>PeerTube 7.3.0</li>
<li>Cloudron v8.3.2</li>
<li>Hetzner Object Storage (fsn1)</li>
</ul>
]]></description><link>https://forum.cloudron.io/topic/14388/guide-move-peertube-video-storage-to-hetzner-s3</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Jul 2026 04:37:10 GMT</lastBuildDate><atom:link href="https://forum.cloudron.io/topic/14388.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 10 Oct 2025 04:57:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [GUIDE] Move PeerTube video storage to Hetzner S3 on Tue, 09 Dec 2025 11:35:08 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/stoccafisso" aria-label="Profile: stoccafisso">@<bdi>stoccafisso</bdi></a> DigitalOcean Spaces should work fine — it's a standard S3-compatible storage.<br />
The setup is basically the same as in the guide.<br />
Just use your DO endpoint and access keys.</p>
]]></description><link>https://forum.cloudron.io/post/116719</link><guid isPermaLink="true">https://forum.cloudron.io/post/116719</guid><dc:creator><![CDATA[archos]]></dc:creator><pubDate>Tue, 09 Dec 2025 11:35:08 GMT</pubDate></item><item><title><![CDATA[Reply to [GUIDE] Move PeerTube video storage to Hetzner S3 on Mon, 08 Dec 2025 21:40:42 GMT]]></title><description><![CDATA[<p dir="auto">Hi all.  Anyone tried this with DigitalOcean Spaces?  Is there a guide somewhere for that?</p>
]]></description><link>https://forum.cloudron.io/post/116693</link><guid isPermaLink="true">https://forum.cloudron.io/post/116693</guid><dc:creator><![CDATA[stoccafisso]]></dc:creator><pubDate>Mon, 08 Dec 2025 21:40:42 GMT</pubDate></item><item><title><![CDATA[Reply to [GUIDE] Move PeerTube video storage to Hetzner S3 on Wed, 15 Oct 2025 16:40:42 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/girish" aria-label="Profile: girish">@<bdi>girish</bdi></a> said in <a href="/post/113820">[GUIDE] Move PeerTube video storage to Hetzner S3</a>:</p>
<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/archos" aria-label="Profile: archos">@<bdi>archos</bdi></a> should I use the email on this forum?</p>
</blockquote>
<p dir="auto">Yes, please use the same email I use for this forum. <img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/1f44d.png?v=af5271e93de" class="not-responsive emoji emoji-android emoji--+1" style="height:23px;width:auto;vertical-align:middle" title="👍" alt="👍" /></p>
]]></description><link>https://forum.cloudron.io/post/113850</link><guid isPermaLink="true">https://forum.cloudron.io/post/113850</guid><dc:creator><![CDATA[archos]]></dc:creator><pubDate>Wed, 15 Oct 2025 16:40:42 GMT</pubDate></item><item><title><![CDATA[Reply to [GUIDE] Move PeerTube video storage to Hetzner S3 on Wed, 15 Oct 2025 10:55:19 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/archos" aria-label="Profile: archos">@<bdi>archos</bdi></a> should I use the email on this forum?</p>
]]></description><link>https://forum.cloudron.io/post/113820</link><guid isPermaLink="true">https://forum.cloudron.io/post/113820</guid><dc:creator><![CDATA[girish]]></dc:creator><pubDate>Wed, 15 Oct 2025 10:55:19 GMT</pubDate></item><item><title><![CDATA[Reply to [GUIDE] Move PeerTube video storage to Hetzner S3 on Tue, 14 Oct 2025 18:24:07 GMT]]></title><description><![CDATA[<p dir="auto">I don’t have a GitLab account yet.<br />
<a class="plugin-mentions-user plugin-mentions-a" href="/user/girish" aria-label="Profile: girish">@<bdi>girish</bdi></a> could you please send me an invite? <img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=af5271e93de" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" style="height:23px;width:auto;vertical-align:middle" title="🙂" alt="🙂" /></p>
]]></description><link>https://forum.cloudron.io/post/113788</link><guid isPermaLink="true">https://forum.cloudron.io/post/113788</guid><dc:creator><![CDATA[archos]]></dc:creator><pubDate>Tue, 14 Oct 2025 18:24:07 GMT</pubDate></item><item><title><![CDATA[Reply to [GUIDE] Move PeerTube video storage to Hetzner S3 on Tue, 14 Oct 2025 06:52:46 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/archos" aria-label="Profile: archos">@<bdi>archos</bdi></a> you can send a MR here - <a href="https://git.cloudron.io/docs/docs" target="_blank" rel="noopener noreferrer nofollow ugc">https://git.cloudron.io/docs/docs</a> . It can go in this directory - <a href="https://git.cloudron.io/docs/docs/-/tree/master/knowledgebase/docs/guides/community?ref_type=heads" target="_blank" rel="noopener noreferrer nofollow ugc">https://git.cloudron.io/docs/docs/-/tree/master/knowledgebase/docs/guides/community?ref_type=heads</a> . Do you already have an account on gitlab ? Otherwise , <a class="plugin-mentions-user plugin-mentions-a" href="/user/girish" aria-label="Profile: girish">@<bdi>girish</bdi></a> or <a class="plugin-mentions-user plugin-mentions-a" href="/user/nebulon" aria-label="Profile: nebulon">@<bdi>nebulon</bdi></a>  can send you an invite .</p>
]]></description><link>https://forum.cloudron.io/post/113747</link><guid isPermaLink="true">https://forum.cloudron.io/post/113747</guid><dc:creator><![CDATA[joseph]]></dc:creator><pubDate>Tue, 14 Oct 2025 06:52:46 GMT</pubDate></item><item><title><![CDATA[Reply to [GUIDE] Move PeerTube video storage to Hetzner S3 on Tue, 14 Oct 2025 05:57:30 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/joseph" aria-label="Profile: joseph">@<bdi>joseph</bdi></a> Hi, glad to hear you liked the guide! <img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=af5271e93de" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" style="height:23px;width:auto;vertical-align:middle" title="🙂" alt="🙂" /><br />
Where can I request access or registration for your GitLab, so I can add the contribution there?<br />
Thanks!</p>
]]></description><link>https://forum.cloudron.io/post/113739</link><guid isPermaLink="true">https://forum.cloudron.io/post/113739</guid><dc:creator><![CDATA[archos]]></dc:creator><pubDate>Tue, 14 Oct 2025 05:57:30 GMT</pubDate></item><item><title><![CDATA[Reply to [GUIDE] Move PeerTube video storage to Hetzner S3 on Mon, 13 Oct 2025 08:34:07 GMT]]></title><description><![CDATA[<p dir="auto">When you find some time, we can also put this into the community guides - <a href="https://docs.cloudron.io/guides/community/" target="_blank" rel="noopener noreferrer nofollow ugc">https://docs.cloudron.io/guides/community/</a></p>
]]></description><link>https://forum.cloudron.io/post/113684</link><guid isPermaLink="true">https://forum.cloudron.io/post/113684</guid><dc:creator><![CDATA[joseph]]></dc:creator><pubDate>Mon, 13 Oct 2025 08:34:07 GMT</pubDate></item></channel></rss>