78 Dokumentationen verfügbar

Wissensdatenbank

MinIO S3 Objektspeicher Selfhosted

Zuletzt aktualisiert: 11.01.2026 um 12:06 Uhr

MinIO: S3-Objektspeicher selbst hosten

MinIO ist ein S3-kompatibler Objektspeicher, den Sie auf eigener Infrastruktur betreiben können. Ideal für Backups, Medien-Dateien und Cloud-native Anwendungen.

Was ist Objektspeicher?

  • Speichert Dateien als "Objekte" mit Metadaten
  • Zugriff über HTTP-API
  • Unbegrenzt skalierbar
  • S3-kompatibel = funktioniert mit AWS-Tools

Installation

# Binary herunterladen
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
sudo mv minio /usr/local/bin/

# Verzeichnis erstellen
sudo mkdir -p /data/minio
sudo chown $USER:$USER /data/minio

MinIO starten

# Einfacher Start
MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=geheim123 minio server /data/minio --console-address ":9001"

# Als Service
sudo nano /etc/systemd/system/minio.service
[Unit]
Description=MinIO
After=network.target

[Service]
User=minio
Group=minio
Environment="MINIO_ROOT_USER=admin"
Environment="MINIO_ROOT_PASSWORD=geheimes_passwort_123"
ExecStart=/usr/local/bin/minio server /data/minio --console-address ":9001"
Restart=always

[Install]
WantedBy=multi-user.target
sudo useradd -r minio
sudo chown -R minio:minio /data/minio
sudo systemctl daemon-reload
sudo systemctl start minio
sudo systemctl enable minio

Docker-Installation

docker run -d \
  --name minio \
  -p 9000:9000 \
  -p 9001:9001 \
  -e MINIO_ROOT_USER=admin \
  -e MINIO_ROOT_PASSWORD=geheim123 \
  -v /data/minio:/data \
  minio/minio server /data --console-address ":9001"

Zugriff

  • Console: http://SERVER:9001
  • API: http://SERVER:9000

MinIO Client (mc)

# Client installieren
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/

# Alias erstellen
mc alias set myminio http://localhost:9000 admin geheim123

# Bucket erstellen
mc mb myminio/mein-bucket

# Datei hochladen
mc cp datei.txt myminio/mein-bucket/

# Dateien auflisten
mc ls myminio/mein-bucket/

# Datei herunterladen
mc cp myminio/mein-bucket/datei.txt ./

PHP-Integration (AWS SDK)

// composer require aws/aws-sdk-php
use Aws\S3\S3Client;

$s3 = new S3Client([
    'version' => 'latest',
    'region' => 'us-east-1',
    'endpoint' => 'http://localhost:9000',
    'use_path_style_endpoint' => true,
    'credentials' => [
        'key' => 'admin',
        'secret' => 'geheim123'
    ]
]);

// Upload
$s3->putObject([
    'Bucket' => 'mein-bucket',
    'Key' => 'bild.jpg',
    'Body' => fopen('/pfad/zu/bild.jpg', 'r')
]);

// Download
$result = $s3->getObject([
    'Bucket' => 'mein-bucket',
    'Key' => 'bild.jpg'
]);

file_put_contents('download.jpg', $result['Body']);

// Pre-signed URL (temporärer Zugang)
$cmd = $s3->getCommand('GetObject', [
    'Bucket' => 'mein-bucket',
    'Key' => 'bild.jpg'
]);
$request = $s3->createPresignedRequest($cmd, '+1 hour');
$url = (string) $request->getUri();

Node.js-Integration

// npm install @aws-sdk/client-s3
const { S3Client, PutObjectCommand } = require('@aws-sdk/client-s3');

const s3 = new S3Client({
    endpoint: 'http://localhost:9000',
    region: 'us-east-1',
    credentials: {
        accessKeyId: 'admin',
        secretAccessKey: 'geheim123'
    },
    forcePathStyle: true
});

// Upload
await s3.send(new PutObjectCommand({
    Bucket: 'mein-bucket',
    Key: 'datei.txt',
    Body: 'Inhalt der Datei'
}));

Nginx Reverse Proxy

server {
    listen 443 ssl;
    server_name s3.example.com;

    location / {
        proxy_pass http://127.0.0.1:9000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        client_max_body_size 1000M;
    }
}

Anwendungsfälle

  • 📦 Backup-Storage
  • 🖼️ Medien-Dateien (Bilder, Videos)
  • 📊 Data Lake
  • 🔄 Terraform State
  • 📁 Nextcloud External Storage

Weitere Hilfe