MinIO S3 Objektspeicher Selfhosted
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
- 📖 MinIO Dokumentation
- 📧 E-Mail: support@enjyn.de