فضای ذخیره‌سازی ابری

فضای ذخیره‌سازی ابری سازگار با S3

فایل‌های کاربر، تصویر، ویدیو و پشتیبان‌ها را در باکت‌هایی نگه دارید که با AWS SDK، boto3 و هر ابزار S3 کار می‌کنند؛ با endpoint داخل ایران و کلید دسترسی جدا برای هر باکت.

API
سازگار با S3
Endpoint
https://s3.abrstorage.ir
Region
ir-thr-1
اندازه‌ی باکت
۱۰ تا ۲۵۰ گیگابایت
upload.js
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";

const s3 = new S3Client({
  endpoint: "https://s3.abrstorage.ir",
  region: "ir-thr-1",
  forcePathStyle: true,
  requestChecksumCalculation: "WHEN_REQUIRED",
  credentials: {
    accessKeyId: process.env.BUCKET_ACCESS_KEY,
    secretAccessKey: process.env.BUCKET_SECRET_KEY,
  },
});

await s3.send(new PutObjectCommand({
  Bucket: process.env.BUCKET_NAME,
  Key: "avatars/42.webp",
  Body: file,
}));

فضای ذخیره‌سازی ابری سکو کلود (Object Storage)

نگه داشتن فایل روی دیسک سرور اپ، مقیاس‌دهی را سخت می‌کند: هر نمونه‌ی جدید فایل‌های بقیه را نمی‌بیند. با فضای ذخیره‌سازی ابری، فایل‌ها یک جای مشترک دارند و اپ فقط آدرس و کلید را می‌شناسد. API با S3 سازگار است، پس کتابخانه‌ای که امروز استفاده می‌کنید بدون تغییر کار می‌کند.

مناسب برای

  • فایل‌هایی که کاربران آپلود می‌کنند
  • تصویر و ویدیوی سایت
  • پشتیبان دیتابیس و لاگ
  • فایل‌های استاتیک و دانلودی

از باکت تا اولین فایل

  1. ساخت باکت

    نام و اندازه را انتخاب کنید؛ باکت پیش‌فرض خصوصی است.

    sakoocloud bucket create --name uploads --size 50
  2. کلیدها

    Access Key و Secret Key مخصوص همین باکت را بگیرید.

    sakoocloud bucket credentials <id>
  3. اتصال اپ

    کلیدها را به‌صورت متغیر محیطی به اپ بدهید.

    sakoocloud env set BUCKET_ACCESS_KEY=…
  4. آپلود

    با SDK همیشگی S3 فایل بفرستید و بخوانید.

    PutObjectCommand

اتصال با پایتون

boto3 با همین سه تنظیم کار می‌کند: endpoint، region و آدرس‌دهی path-style.

storage.py
import os
import boto3
from botocore.config import Config

s3 = boto3.client(
    "s3",
    endpoint_url="https://s3.abrstorage.ir",
    region_name="ir-thr-1",
    aws_access_key_id=os.environ["BUCKET_ACCESS_KEY"],
    aws_secret_access_key=os.environ["BUCKET_SECRET_KEY"],
    config=Config(s3={"addressing_style": "path"}),
)

s3.upload_file("report.pdf", os.environ["BUCKET_NAME"], "reports/report.pdf")

چه چیزهایی همراهش می‌آید

  • سازگار با S3

    آدرس endpoint و کلید را به همان SDK فعلی بدهید؛ AWS SDK، boto3، aws-cli، rclone و هر ابزار S3 دیگر کار می‌کند.

    • API سازگار با S3
    • آدرس‌دهی path-style
    • endpoint داخل ایران
    • مدیریت از کنسول، CLI و API
  • دسترسی کنترل‌شده

    هر باکت کلید دسترسی خودش را دارد و پیش‌فرض خصوصی است. برای فایل خصوصی لینک امن دانلود بسازید و کلید را هر وقت لازم شد عوض کنید.

    • کلید جدا برای هر باکت
    • باکت خصوصی یا خواندن عمومی
    • لینک امن دانلود
    • چرخش کلید دسترسی
  • نگهداری مطمئن

    با Object Lock فایل‌ها برای مدت نگهداری غیرقابل تغییر می‌مانند؛ مناسب پشتیبان و سوابقی که نباید پاک شوند.

    • Object Lock (WORM) هنگام ساخت
    • مناسب پشتیبان دیتابیس
    • افزایش اندازه‌ی باکت
    • میزبانی در دیتاسنتر داخل ایران
  • استفاده‌ی مستقیم از مرورگر

    با CORS، فرانت‌اند می‌تواند فایل را مستقیم در باکت آپلود یا از آن بخواند، بدون عبور از سرور اپ.

    • تنظیم CORS از کنسول
    • آپلود مستقیم از مرورگر
    • آپلود و مدیریت پوشه از کنسول
    • سرو فایل‌های عمومی سایت

جزئیات فنی

متغیرهای پیشنهادی برای اپ

متغیرمقدار
BUCKET_NAMEنام باکت
BUCKET_ENDPOINThttps://s3.abrstorage.ir
BUCKET_REGIONir-thr-1
BUCKET_ACCESS_KEY و BUCKET_SECRET_KEYاز sakoocloud bucket credentials

تنظیمات باکت

تنظیمکجاتوضیح
--publicهنگام ساختخواندن عمومی آبجکت‌ها
--object-lockفقط هنگام ساختنگهداری غیرقابل تغییر (WORM)
CORSکنسولدسترسی مستقیم از مرورگر
چرخش کلیدsakoocloud bucket rotateکلید جدید، باطل شدن کلید قبلی

پرسش‌های متداول

آبجکت استوریج چیست؟

فضایی برای نگهداری فایل‌ها به‌صورت آبجکت در باکت‌ها، که از طریق HTTP و API قابل دسترسی است و به دیسک یک سرور خاص وابسته نیست.

کتابخانه‌ی S3 فعلی‌ام کار می‌کند؟

بله. endpoint را https://s3.abrstorage.ir، region را ir-thr-1 و آدرس‌دهی را path-style بگذارید.

چرا خطای checksum یا XAmzContentSHA256Mismatch می‌گیرم؟

نسخه‌های جدید AWS SDK و aws-cli به‌طور پیش‌فرض checksum اضافه می‌فرستند. requestChecksumCalculation را روی WHEN_REQUIRED بگذارید.

فایل خصوصی را چطور در اختیار کاربر بگذارم؟

باکت را خصوصی نگه دارید و برای هر فایل لینک امن موقت بسازید.

اندازه‌ی باکت چقدر می‌تواند باشد؟

از ۱۰ تا ۲۵۰ گیگابایت هنگام ساخت، و بعداً قابل افزایش است.

برای جزئیات بیشتر مستندات را ببینید یا پلن‌ها را مقایسه کنید.

سریع‌ترین مسیر از کد تا انتشار.

ابتدا ابزار خط فرمان را نصب کنید، سپس همین‌جا امتحان کنید. (بنویسید، یا یکی از پیشنهادهای پایین ترمینال را بزنید)

~/projects/my-app
امتحان کنید