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