Added README file with instructions
This commit is contained in:
117
README.md
117
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
|
||||||
|
<CORSConfiguration>
|
||||||
|
<CORSRule>
|
||||||
|
<AllowedHeader>*</AllowedHeader>
|
||||||
|
<AllowedMethod>GET</AllowedMethod>
|
||||||
|
<AllowedMethod>HEAD</AllowedMethod>
|
||||||
|
<AllowedOrigin>*</AllowedOrigin>
|
||||||
|
</CORSRule>
|
||||||
|
</CORSConfiguration>
|
||||||
|
```
|
||||||
|
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: <CORSConfiguration ...><AllowedOrigin>*</AllowedOrigin>...</CORSConfiguration>
|
||||||
|
```
|
||||||
|
## 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)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user