أدلة
MinIO: تخزين كائنات متوافق مع S3 على سيرفرك
كلاود|١٦ أبريل ٢٠٢٦|3 دقائق قراءة|٧٧٠ مشاهدة

بدل ما تدفع لسحابة خارجية. MinIO يعطيك نفس الـ API على سيرفرك السعودي. بياناتك تحت سيطرتك. نشرح الإعداد.
MinIO: تخزين متوافق مع S3 على سيرفرك الخاص
MinIO هو حل تخزين موضوعي مفتوح المصدر متوافق تماماً مع S3 API. تشغّله على سيرفرك الخاص وتحصل على نفس مزايا Amazon S3 لكن بتحكم كامل وبدون فواتير متغيرة.
لماذا MinIO بدل S3؟
Amazon S3 (للملفات السعودية — eu-west-1):
├── تخزين: $0.023/GB/شهر = 0.086 ريال/GB
├── نقل بيانات خارجي: $0.09/GB
├── الطلبات: $0.0004/1,000 طلب
└── بيانات في سيرفرات خارج المملكة
MinIO على كلاود VPS:
├── تكلفة التخزين مشمولة في سعر VPS
├── لا رسوم على نقل البيانات الداخلي
├── بيانات في الرياض أو جدة
└── واجهة برمجية متوافقة 100% مع S3
متى تفضل S3: حين تحتاج موثوقية Amazon نفسها وتحتمل التكلفة المتغيرة. متى تفضل MinIO: حين البيانات حساسة، التكلفة محددة، والسيرفر موجود أصلاً.
التثبيت السريع
باستخدام Docker (الأسرع)
docker run -d \
--name minio \
-p 9000:9000 \
-p 9001:9001 \
-v /data/minio:/data \
-e MINIO_ROOT_USER=admin \
-e MINIO_ROOT_PASSWORD=YourStrongPassword123! \
--restart unless-stopped \
quay.io/minio/minio server /data --console-address ":9001"
# التحقق
curl http://localhost:9000/minio/health/live
# يجب أن يُعيد: 200 OK
باستخدام Docker Compose (للبيئة المتكاملة)
# docker-compose.yml
version: '3.8'
services:
minio:
image: quay.io/minio/minio:latest
ports:
- "9000:9000"
- "9001:9001"
volumes:
- /data/minio:/data
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: ${MINIO_PASSWORD}
MINIO_SITE_REGION: me-central-1
command: server /data --console-address ":9001"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
restart: unless-stopped
الوصول للواجهة الرسومية
# بعد التشغيل
# واجهة الإدارة: http://YOUR.SERVER.IP:9001
# S3 API endpoint: http://YOUR.SERVER.IP:9000
# لحجب الوصول المباشر وتمريره عبر HTTPS:
# أضف Nginx Reverse Proxy
إعداد Nginx لـ MinIO
# /etc/nginx/sites-available/minio
server {
listen 443 ssl http2;
server_name storage.yourcompany.com;
ssl_certificate /etc/letsencrypt/live/storage.yourcompany.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/storage.yourcompany.com/privkey.pem;
# S3 API
location / {
proxy_pass http://localhost:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# مهم لـ MinIO
client_max_body_size 1000M;
proxy_buffering off;
proxy_request_buffering off;
}
}
server {
listen 443 ssl http2;
server_name storage-console.yourcompany.com;
location / {
proxy_pass http://localhost:9001;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
التكامل مع Laravel
// config/filesystems.php
'disks' => [
'minio' => [
'driver' => 's3',
'key' => env('MINIO_ACCESS_KEY'),
'secret' => env('MINIO_SECRET_KEY'),
'region' => 'us-east-1', // MinIO يقبل أي قيمة
'bucket' => env('MINIO_BUCKET'),
'url' => env('MINIO_URL'),
'endpoint' => env('MINIO_ENDPOINT'),
'use_path_style_endpoint' => true, // مطلوب لـ MinIO
'throw' => false,
],
],
# .env
MINIO_ACCESS_KEY=admin
MINIO_SECRET_KEY=YourStrongPassword123!
MINIO_BUCKET=app-uploads
MINIO_ENDPOINT=https://storage.yourcompany.com
MINIO_URL=https://storage.yourcompany.com/app-uploads
// رفع ملف
Storage::disk('minio')->put('avatars/' . $filename, $fileContent);
// رابط مؤقت (يصلح لـ 30 دقيقة)
$url = Storage::disk('minio')->temporaryUrl('avatars/' . $filename, now->addMinutes(30));
// حذف ملف
Storage::disk('minio')->delete('avatars/' . $filename);
MinIO للذكاء الاصطناعي
# Python - التكامل مع MinIO لتخزين النماذج
from minio import Minio
import boto3
# باستخدام boto3 (نفس S3 API)
s3_client = boto3.client(
's3',
endpoint_url='https://storage.yourcompany.com',
aws_access_key_id='admin',
aws_secret_access_key='password',
region_name='us-east-1'
)
# رفع نموذج AI
s3_client.upload_file(
'llama3-8b.gguf',
'ai-models',
'llama3/llama3-8b.gguf'
)
# تحميل النموذج عند الحاجة
s3_client.download_file('ai-models', 'llama3/llama3-8b.gguf', '/tmp/model.gguf')
هذا بالضبط ما يُثبَّت في قالب AI Hosting على كلاود (cloud.net.sa) — MinIO + PostgreSQL + pgvector في حزمة واحدة جاهزة.
الخلاصة
MinIO يحل مشكلة تخزين الملفات الكبيرة على VPS: بدل ملأ القرص بالملفات، تستخدم object storage مُنفصل قابل للتوسع. التوافق التام مع S3 API يعني لا تغيير في الكود إذا قررت الترحيل لـ S3 مستقبلاً.
مشاركة
