รับเครดิต $200

DigitalOcean Spaces: Object Storage แบบ S3 พร้อม CDN ราคา $5 วิธีใช้ และตัวอย่างโค้ด

อัปเดตล่าสุด 3 พฤศจิกายน 2569 · อ่านประมาณ 9 นาที · โดย DigitalOcean Review ไทย

คู่มือ DigitalOcean Spaces ภาษาไทย ที่เก็บไฟล์แบบ S3-compatible พร้อม CDN ราคาเริ่ม $5 ต่อเดือน (250 GiB + 1 TiB transfer) วิธีสร้าง bucket ใช้ s3cmd rclone AWS CLI และตั้ง CDN

เปิดเผยข้อมูล: บทความนี้มีลิงก์แนะนำ (referral) ของ DigitalOcean หากคุณสมัครผ่านลิงก์ เจ้าของเว็บอาจได้รับเครดิต โดยคุณไม่เสียค่าใช้จ่ายเพิ่ม · อ่านนโยบายการรีวิว

Spaces คืออะไร

Spaces คือบริการ Object Storage ของ DigitalOcean ใช้เก็บไฟล์จำนวนมากเป็น "object" ใน "bucket" เข้าถึงผ่าน HTTP/API ที่ เข้ากันได้กับ S3 API ของ Amazon ทำให้เครื่องมือและไลบรารีที่รองรับ S3 ใช้กับ Spaces ได้โดยเปลี่ยนแค่ endpoint

เหมาะกับ: รูปภาพและวิดีโอของเว็บ, ไฟล์ที่ผู้ใช้อัปโหลด, ไฟล์ backup, ไฟล์ static ของเว็บ, log, ไฟล์ดาวน์โหลดขนาดใหญ่ และข้อมูลที่ไม่ควรอยู่บนดิสก์ของ Droplet

ราคา

ตามหน้าราคาทางการ ณ 3 พ.ย. 2569

รายการราคา/ปริมาณ
ค่าบริการพื้นฐาน$5/เดือน
พื้นที่เก็บข้อมูลรวม250 GiB
Transfer ขาออกรวม1 TiB
พื้นที่เกิน$0.02/GiB
Transfer เกิน$0.01/GiB
Cold storage$0.007/GiB
CDNรวมในตัว
จำนวน bucketสูงสุด 100 ต่อบัญชี

เมื่อเทียบกับการเก็บไฟล์บน Droplet: ดิสก์ของ Droplet ราคาตายตัวตามขนาดเครื่อง แต่ Spaces แยกการขยาย storage ออกจากการขยาย CPU/RAM ช่วยให้เครื่องเล็กลงได้เมื่อย้ายไฟล์มีเดียออกไป ดู 15 วิธีลดค่าใช้จ่าย DigitalOcean

ข้อดี

  • เข้ากันได้กับ S3 ใช้ AWS SDK, s3cmd, rclone, Cyberduck, Restic ได้
  • มี CDN ในตัว กระจายไฟล์ไปยัง edge ใกล้ผู้ใช้ ลดภาระ Droplet
  • ราคาแพ็กเดียวคาดเดาได้ พร้อมโควตา storage และ transfer
  • ไม่จำกัดจำนวนไฟล์ (ตามเงื่อนไขการใช้งาน) ขยายได้ตามต้องการ
  • ควบคุมสิทธิ์ละเอียด ตั้ง public/private ต่อไฟล์ ใช้ presigned URL ได้

ข้อควรรู้

  • ภูมิภาค Spaces มีให้บริการเฉพาะบางภูมิภาค (ตรวจสอบว่ามีสิงคโปร์ (SGP1) หรือภูมิภาคใกล้เคียงในขณะที่คุณใช้) เลือกภูมิภาคเดียวกับ Droplet เพื่อลดความหน่วงและค่า transfer
  • เป็น object ไม่ใช่ filesystem ไม่เหมาะกับไฟล์ที่ต้องแก้ไขบางส่วนบ่อย ๆ หรือรันฐานข้อมูลบนนั้น
  • ตั้งสิทธิ์ให้ถูก bucket public ผิดพลาดคือสาเหตุข้อมูลรั่วที่พบบ่อยที่สุดของ object storage ทุกเจ้า
  • ตรวจ billing ไฟล์ที่ลืมลบยังคิดเงิน
รับเครดิตฟรี $200 (ใช้ได้ 60 วัน)สมัคร DigitalOcean ผ่านลิงก์แนะนำของเรา แล้วเพิ่มวิธีชำระเงินที่ใช้งานได้ ระบบจะให้เครดิตทดลองใช้งาน ตามเงื่อนไขของ DigitalOcean ณ วันที่สมัคร
สมัครรับเครดิต $200 →

วิธีสร้าง Space และ Access Key

  1. Control Panel → Create → Spaces Object Storage
  2. เลือกภูมิภาค (แนะนำภูมิภาคเดียวกับ Droplet)
  3. เลือกว่าจะเปิด CDN หรือไม่ (แนะนำเปิดถ้าให้บริการไฟล์ public)
  4. ตั้งชื่อ Space (ต้องไม่ซ้ำกับชื่อ bucket ของผู้ใช้อื่นในภูมิภาคนั้น)
  5. เลือกโปรเจกต์ แล้ว Create
  6. สร้าง Access Key ที่ API → Spaces Keys: รับ Access Key ID และ Secret (เห็น Secret ครั้งเดียว เก็บให้ดี) แนะนำให้สร้าง key สิทธิ์จำกัดต่อ bucket ถ้ามีตัวเลือก

Endpoint มีรูปแบบ https://<REGION>.digitaloceanspaces.com เช่น https://sgp1.digitaloceanspaces.com (ตรวจรหัสภูมิภาคจริงในหน้า Settings ของ Space)

ใช้งานด้วย rclone

ติดตั้ง rclone แล้วตั้งค่า remote

rclone config

เลือก s3 → provider DigitalOcean Spaces ใส่ Access Key / Secret และ endpoint ของภูมิภาค จากนั้นใช้งาน

rclone copy /var/backups spaces:ชื่อ-space/backups --progress
rclone ls spaces:ชื่อ-space
rclone sync ./public spaces:ชื่อ-space/static

ใช้งานด้วย AWS CLI

aws configure   # ใส่ Access Key และ Secret, region อาจใส่ us-east-1
aws s3 ls --endpoint-url https://sgp1.digitaloceanspaces.com s3://ชื่อ-space
aws s3 cp backup.tar.gz s3://ชื่อ-space/backups/ --endpoint-url https://sgp1.digitaloceanspaces.com

ตัวอย่างโค้ด Node.js (AWS SDK v3)

import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
import fs from "fs";

const s3 = new S3Client({
  region: "us-east-1",
  endpoint: "https://sgp1.digitaloceanspaces.com",
  credentials: { accessKeyId: process.env.SPACES_KEY, secretAccessKey: process.env.SPACES_SECRET },
});

await s3.send(new PutObjectCommand({
  Bucket: "ชื่อ-space",
  Key: "uploads/photo.jpg",
  Body: fs.readFileSync("photo.jpg"),
  ACL: "public-read",
  ContentType: "image/jpeg",
}));

ตัวอย่าง Python (boto3)

import boto3, os
s3 = boto3.client("s3", endpoint_url="https://sgp1.digitaloceanspaces.com",
    aws_access_key_id=os.environ["SPACES_KEY"], aws_secret_access_key=os.environ["SPACES_SECRET"])
s3.upload_file("backup.sql.gz", "ชื่อ-space", "backups/backup.sql.gz")
url = s3.generate_presigned_url("get_object", Params={"Bucket": "ชื่อ-space", "Key": "backups/backup.sql.gz"}, ExpiresIn=3600)
print(url)

ใช้ Spaces เก็บ backup ของ Droplet

เป็นกรณีใช้งานยอดนิยม ทำให้ข้อมูลสำรองอยู่นอกเครื่องหลัก ตามกฎ 3-2-1 ใน คู่มือความปลอดภัยเซิร์ฟเวอร์

#!/bin/bash
D=$(date +%F)
mysqldump --single-transaction wordpress | gzip > /tmp/db-$D.sql.gz
rclone copy /tmp/db-$D.sql.gz spaces:ชื่อ-space/db/
rm /tmp/db-$D.sql.gz

ตั้ง Lifecycle rule (ถ้ามีในคอนโซลหรือ API) ให้ลบ backup เก่าเกิน 30 วันอัตโนมัติ เพื่อคุมค่าใช้จ่าย

ใช้ Spaces กับ WordPress

ติดตั้งปลั๊กอินที่ออฟโหลดมีเดียไป S3-compatible storage (เช่น WP Offload Media หรือปลั๊กอินอื่นที่รองรับ custom endpoint) แล้วตั้งค่า endpoint เป็นของ Spaces ผลคือรูปภาพถูกเสิร์ฟจาก CDN เครื่อง Droplet เบาลง ดูพื้นฐานที่ ติดตั้ง WordPress บน DigitalOcean

ตั้งค่า CDN และโดเมนของตัวเอง

  1. เปิด CDN ที่ Settings ของ Space ระบบจะให้ endpoint ลักษณะ ชื่อ-space.sgp1.cdn.digitaloceanspaces.com
  2. ถ้าต้องการโดเมนของตัวเอง (เช่น cdn.example.com) ให้เพิ่ม Custom Subdomain และใบรับรอง SSL (Let's Encrypt หรือใบรับรองของคุณ) แล้วสร้าง CNAME ตามที่ระบบบอก
  3. ตั้ง Cache-Control บน object ให้เหมาะสม เช่น max-age=31536000 สำหรับไฟล์ที่มีชื่อเปลี่ยนตามเนื้อหา
  4. เมื่ออัปเดตไฟล์ชื่อเดิม ใช้ปุ่ม Purge Cache เพื่อล้างแคช CDN

ตั้งค่า CORS

ถ้าเว็บของคุณโหลดฟอนต์หรือไฟล์จากโดเมน CDN ข้ามโดเมน ต้องตั้ง CORS ที่ Settings → CORS Configurations ให้อนุญาตโดเมนของคุณ (หลีกเลี่ยงการตั้ง * ถ้าไม่จำเป็น)

แนวปฏิบัติด้านความปลอดภัย

  1. ค่าเริ่มต้นเป็น private ตั้ง public เฉพาะไฟล์ที่ตั้งใจเผยแพร่
  2. ใช้ presigned URL สำหรับไฟล์ private ที่ต้องแชร์ชั่วคราว
  3. อย่าฝัง Secret ในโค้ดฝั่งไคลเอนต์ เก็บในตัวแปรสภาพแวดล้อมฝั่งเซิร์ฟเวอร์
  4. หมุนเวียน Access Key เป็นระยะ และลบ key ที่ไม่ใช้
  5. เปิด versioning/ทำสำเนาข้อมูลสำคัญ ถ้ามีฟีเจอร์ที่ต้องการ
  6. ตรวจ bucket ที่เป็น public เป็นประจำ

ตัวอย่างต้นทุน

กรณีใช้ประมาณการ
เว็บบล็อก รูป 20 GiB, transfer 200 GiB/เดือนอยู่ในโควตา$5
ร้านค้า รูป+วิดีโอ 400 GiB, transfer 2 TiB/เดือนstorage เกิน 150 GiB, transfer เกิน 1 TiB$5 + (150×$0.02) + (1,024×$0.01) ≈ $18.24
เก็บ backup 1 TiBstorage เกิน ~774 GiB$5 + (774×$0.02) ≈ $20.48

คำนวณจากอัตราส่วนเกินที่ระบุในหน้าราคา ใช้เป็นตัวอย่างเท่านั้น (1 TiB = 1,024 GiB) ราคาจริงตรวจสอบกับใบแจ้งหนี้

คำถามที่พบบ่อย

Spaces ต่างจาก Volumes อย่างไร

Volume คือดิสก์บล็อกที่ต่อเข้ากับ Droplet ใช้เป็นไดรฟ์เหมือนดิสก์ทั่วไป ส่วน Spaces เป็นที่เก็บไฟล์ผ่าน API/HTTP เข้าถึงจากหลายเครื่องและผ่าน CDN ได้

ใช้ Spaces เป็นโฮสต์เว็บ static ได้ไหม

ทำได้ในเชิงเทคนิค แต่ถ้าต้องการ build/deploy อัตโนมัติและ SSL ที่สะดวก App Platform สำหรับ Static Site (ฟรี 3 เว็บ) น่าจะเหมาะกว่า ดู คู่มือ App Platform

ถ้าเกินโควตา transfer จะถูกตัดบริการไหม

ไม่ตัดบริการ แต่คิดค่า transfer ส่วนเกินตามอัตราที่ประกาศ ตั้ง Billing Alert ไว้ล่วงหน้า

รับเครดิตฟรี $200 (ใช้ได้ 60 วัน)สมัคร DigitalOcean ผ่านลิงก์แนะนำของเรา แล้วเพิ่มวิธีชำระเงินที่ใช้งานได้ ระบบจะให้เครดิตทดลองใช้งาน ตามเงื่อนไขของ DigitalOcean ณ วันที่สมัคร
สมัครรับเครดิต $200 →