ติดตั้ง Host Storage

ติดตั้งเซิร์ฟเวอร์เก็บไฟล์ของคุณเอง (ดาวน์โหลดได้เลย) ตั้งค่า รัน ทำ HTTPS และเชื่อมกับ Instance

ภาพรวม

Host Storage คือเซิร์ฟเวอร์เก็บไฟล์ที่คุณติดตั้งและดูแลเอง ไฟล์ที่อัปโหลดในหน้า ไฟล์ จะถูกเก็บบนดิสก์ของเครื่องคุณ และผู้เล่นดาวน์โหลดผ่าน URL ของเซิร์ฟเวอร์นี้ เหมาะถ้าอยากควบคุมที่เก็บไฟล์เองและไม่อยากใช้บริการคลาวด์ (ถ้าไม่อยากดูแลเซิร์ฟเวอร์ ใช้ S3 / R2 แทนได้ ดู Storage)

แพ็กเกจที่ให้ดาวน์โหลดมีทุกอย่างที่ต้องใช้ - ตั้งค่า 3 อย่างก็รันได้:

  • เซิร์ฟเวอร์เล็กๆ ไฟล์เดียว ใช้ Node.js หรือ Docker ก็ได้
  • ตรวจความถูกต้องของไฟล์ (SHA-1) ทุกครั้งที่อัปโหลด ถ้าไฟล์เสียหายจะไม่เก็บ
  • ไม่ต้องมีฐานข้อมูล ไฟล์ทั้งหมดอยู่ในโฟลเดอร์เดียว สำรองข้อมูลง่าย

สิ่งที่ต้องเตรียม

สิ่งที่ต้องมีรายละเอียด
เครื่อง / VPSเปิดตลอดเวลา และเข้าถึงได้จากอินเทอร์เน็ต พื้นที่ดิสก์ให้พอกับไฟล์ที่จะเก็บ
Node.js 18 ขึ้นไปหรือใช้ Docker แทนก็ได้ (ไม่ต้องลง Node.js) ตรวจเวอร์ชันด้วย node -v
โดเมน + HTTPSแนะนำมาก เพราะหน้าเว็บนี้เป็น https เบราว์เซอร์จะไม่ยอมให้อัปโหลดไปยังที่อยู่ http
พอร์ตที่เปิดรับค่าเริ่มต้น 8080 (ถ้าทำ HTTPS ผ่าน reverse proxy ผู้ใช้จะเข้าที่พอร์ต 443 แทน)

ดาวน์โหลด

Dimension Host Storage

dimension-host-storage.zip

เซิร์ฟเวอร์ + ตัวอย่างการตั้งค่า + คู่มือ (README) · รองรับ Node.js และ Docker
ดาวน์โหลด

แตกไฟล์แล้วจะได้โฟลเดอร์ dimension-host-storage ประกอบด้วย:

ไฟล์ใช้ทำอะไร
server.jsตัวเซิร์ฟเวอร์
package.jsonรายการแพ็กเกจที่ต้องติดตั้ง
.env.exampleตัวอย่างไฟล์ตั้งค่า - คัดลอกเป็น .env แล้วแก้
Dockerfile / docker-compose.ymlสำหรับรันด้วย Docker
Caddyfile.exampleตัวอย่างทำ HTTPS ด้วย Caddy
README.mdคู่มือย่อ

ตั้งค่า (ไฟล์ .env)

ในโฟลเดอร์ที่แตกไฟล์ ให้คัดลอก .env.example เป็น .env แล้วแก้ค่า:

bash
# Linux / macOS
cp .env.example .env

# Windows (Command Prompt)
copy .env.example .env
ตัวแปรจำเป็น?รายละเอียด
API_KEYจำเป็นรหัสลับที่ใช้ยืนยันตัวตนกับระบบ ต้องเป็นค่าเดียวกับช่อง API Key ตอนเพิ่ม Storage ในหน้าเว็บ ตั้งเป็นค่าสุ่มยาวๆ (วิธีสร้างด้านล่าง)
PUBLIC_URLจำเป็นที่อยู่ที่ผู้ใช้เข้าถึงเซิร์ฟเวอร์นี้ได้จริง เช่น https://storage.example.com (ไม่ต้องมี / ท้าย) ใช้เป็น Base URL ในหน้าเว็บ
PORTไม่จำเป็นพอร์ตที่เซิร์ฟเวอร์ฟัง ค่าเริ่มต้น 8080
STORAGE_DIRไม่จำเป็นโฟลเดอร์เก็บไฟล์ ค่าเริ่มต้นคือโฟลเดอร์ storage ในที่เดียวกัน
MAX_SIZE_MBไม่จำเป็นขนาดไฟล์สูงสุดต่อไฟล์ ค่าเริ่มต้น 512 (MB)
ALLOWED_ORIGINSแนะนำโดเมนของหน้าเว็บที่อนุญาตให้อัปโหลดมาที่เซิร์ฟเวอร์นี้ ของเว็บนี้คือ https://โดเมนของเว็บนี้ (เว้นว่าง = อนุญาตทุกโดเมน)
PRIVATE_FILESไม่จำเป็นค่าเริ่มต้นเปิด: ดาวน์โหลดได้เฉพาะลิงก์ที่หมดอายุซึ่งเว็บนี้สร้างให้ ตั้ง 0 = ใครมีลิงก์ไฟล์ก็โหลดได้ ดู ลิงก์ดาวน์โหลดที่หมดอายุ

สร้าง API_KEY

รันคำสั่งนี้ แล้วคัดลอกผลลัพธ์ไปใส่ใน API_KEY:

bash
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

ตัวอย่างไฟล์ .env ที่ตั้งค่าเสร็จแล้ว:

env
API_KEY=9f2c1a7e5b8d4c0a93e1f6b7d2a4c8e05b1d9f3a7c6e2b4d8f0a1c3e5b7d9f21
PUBLIC_URL=https://storage.example.com
PORT=8080
ALLOWED_ORIGINS=https://manager.example.com
เก็บ API_KEY เป็นความลับ

ใครมี API_KEY สามารถขอลิงก์อัปโหลดและลบไฟล์ในเซิร์ฟเวอร์ของคุณได้ อย่าแชร์ อย่าโพสต์ในที่สาธารณะ และอย่าใส่ไว้ในโฟลเดอร์ที่เปิดให้คนอื่นดาวน์โหลด

ติดตั้งและรัน (แบบ Node.js)

  1. 1

    ติดตั้งแพ็กเกจ

    เปิดเทอร์มินัลในโฟลเดอร์ที่แตกไฟล์:

    bash
    npm install
  2. 2

    ตั้งค่า .env (ตามหัวข้อด้านบน)

  3. 3

    รันเซิร์ฟเวอร์

    bash
    npm start

    ถ้าตั้งค่าถูกต้อง จะเห็นข้อความ "Dimension Host Storage is running" พร้อมสรุปค่าที่ใช้อยู่ ถ้าลืมตั้ง API_KEY โปรแกรมจะบอกและหยุดทำงาน

  4. 4

    ตรวจว่าทำงาน

    เปิด http://localhost:8080/health (หรือ PUBLIC_URL/health) ควรเห็น:

    json
    {"status":"ok","service":"dimension-host-storage","signedDownloads":true,"privateFiles":true}

ให้ทำงานต่อเนื่อง (ไม่หยุดเมื่อปิดเทอร์มินัล)

ใช้ pm2 (ตัวจัดการโปรเซสของ Node.js):

bash
npm install -g pm2
pm2 start server.js --name host-storage
pm2 save
pm2 startup        # ทำตามคำสั่งที่แสดง เพื่อให้เปิดเองหลังรีบูตเครื่อง

คำสั่งที่ใช้บ่อย: pm2 logs host-storage (ดู log), pm2 restart host-storage (รีสตาร์ท), pm2 stop host-storage (หยุด)

ติดตั้งและรัน (แบบ Docker)

  1. 1

    ตั้งค่า .env (คัดลอกจาก .env.example และแก้ API_KEY, PUBLIC_URL)

  2. 2

    สั่งรัน

    bash
    docker compose up -d

    ไฟล์ที่อัปโหลดจะอยู่ในโฟลเดอร์ ./storage ข้างๆ ไฟล์ docker-compose.yml

  3. 3

    ตรวจสถานะและ log

    bash
    docker compose ps
    docker compose logs -f

อัปเดตเวอร์ชัน: แทนที่ไฟล์ในโฟลเดอร์ด้วยเวอร์ชันใหม่ แล้วรัน docker compose up -d --build

ทำ HTTPS

เว็บนี้ใช้ https ดังนั้นเซิร์ฟเวอร์เก็บไฟล์ก็ต้องเป็น https ด้วย (ไม่งั้นเบราว์เซอร์จะบล็อกการอัปโหลด) วิธีที่ง่ายที่สุดคือใช้ reverse proxy หน้าเซิร์ฟเวอร์:

แบบ Caddy (ง่ายที่สุด - ขอใบรับรองให้อัตโนมัติ)

  1. ชี้ DNS ของโดเมน (เช่น storage.example.com) มาที่ IP ของเครื่อง
  2. ติดตั้ง Caddy แล้วใช้ไฟล์ Caddyfile.example ในแพ็กเกจเป็นต้นแบบ:
caddy
storage.example.com {
    request_body {
        max_size 1GB
    }
    reverse_proxy localhost:8080
}

จากนั้นตั้ง PUBLIC_URL=https://storage.example.com ใน .env แล้วรีสตาร์ทเซิร์ฟเวอร์

แบบ nginx

nginx
server {
    server_name storage.example.com;
    client_max_body_size 1g;          # ต้องไม่น้อยกว่า MAX_SIZE_MB

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_request_buffering off;  # ส่งไฟล์ต่อให้เซิร์ฟเวอร์ทันที ไม่พักไว้ที่ nginx
    }
    # ใส่ใบรับรอง HTTPS เช่นด้วย certbot
}
ขนาดไฟล์สูงสุดต้องสอดคล้องกัน

ถ้าอัปโหลดไฟล์ใหญ่แล้วล้มเหลวทั้งที่ตั้ง MAX_SIZE_MB พอแล้ว ให้ตรวจขนาด body สูงสุดของ reverse proxy (client_max_body_size / max_size)

เปิดพอร์ต

ถ้ามีไฟร์วอลล์ ให้เปิดพอร์ต 80 และ 443 (ถ้าใช้ reverse proxy) หรือพอร์ตของเซิร์ฟเวอร์เองถ้าไม่ใช้ เช่นบน Ubuntu:

bash
sudo ufw allow 80
sudo ufw allow 443

เชื่อมกับ Instance

  1. 1

    เปิด การตั้งค่า → Storage → เพิ่ม Storage

  2. 2

    เลือก Host Storage

  3. 3

    กรอกข้อมูล

    ช่องในหน้าเว็บค่าที่ใส่
    ชื่อ Storageตั้งชื่ออะไรก็ได้ เช่น Host หลัก
    Base URL ของ Storage Serverค่า PUBLIC_URL ใน .env (เช่น https://storage.example.com)
    API Keyค่า API_KEY ใน .env
    Path prefixปล่อยตามค่าเริ่มต้น (ชื่อ Instance) ได้
  4. 4

    บันทึก แล้วลองอัปโหลดไฟล์ในแท็บไฟล์

    ถ้าอัปโหลดสำเร็จ ไฟล์จะปรากฏในรายการและในโฟลเดอร์ storage ของเซิร์ฟเวอร์

ลิงก์ดาวน์โหลดที่หมดอายุ

เว็บนี้ส่งลิงก์ดาวน์โหลดที่มีลายเซ็นและวันหมดอายุ (?exp=...&sig=...) ให้ launcher ของผู้เล่นทุกครั้ง ลิงก์ใช้ได้ 30-45 นาที (แค่ต้องเริ่มโหลดก่อนหมดเวลา) แล้ว launcher จะได้ลิงก์ใหม่เองตอนเช็กไฟล์ครั้งถัดไป ลายเซ็นทำจาก API_KEY ของ Storage นั้น

เวอร์ชันของเซิร์ฟเวอร์ผลที่ได้
1.0.0 (เดิม)ใช้กับเว็บได้ตามปกติ ไม่สนลายเซ็น ไฟล์เปิดสาธารณะ จะอัปเดตเมื่อไรก็ได้
1.1.0 ขึ้นไป (ค่าเริ่มต้น)โหลดได้เฉพาะลิงก์ที่ลายเซ็นถูกและยังไม่หมดอายุ ลิงก์ที่เคยคัดลอกไปแจกจะใช้ไม่ได้
1.1.0 ขึ้นไป ตั้ง PRIVATE_FILES=0เหมือนเวอร์ชันเดิม ไฟล์เปิดสาธารณะ ทั้งลิงก์ที่มีลายเซ็นและไม่มีใช้ได้

อัปเดตเซิร์ฟเวอร์เป็นเวอร์ชันใหม่แล้วเปิดใช้เอง ตรวจได้ที่ /health ว่า "privateFiles":true ถ้าอยากให้ไฟล์เปิดสาธารณะเหมือนเดิม เพิ่ม PRIVATE_FILES=0 ใน .env แล้วรีสตาร์ท

ลิงก์หมดอายุไม่ได้กันการแจกไฟล์

ผู้เล่นที่ได้ลิงก์ยังโหลดไฟล์ได้จนลิงก์หมดอายุ และไฟล์ที่โหลดไปแล้วก็อยู่ในเครื่องเขา สิ่งนี้แค่ทำให้ลิงก์ที่หลุดออกไปใช้ได้ไม่นาน

ไฟล์ถูกเก็บอย่างไร

ไฟล์ถูกวางในโฟลเดอร์ storage (หรือที่ตั้งใน STORAGE_DIR) ภายใต้โฟลเดอร์ Path prefix ด้วยชื่อสุ่ม เช่น:

text
storage/
└── my_server/                              ← Path prefix (ชื่อ Instance)
    ├── 3f2c9a1e-5b7d-4c0a-9e88-1d2f6a7b8c90
    └── a81d77f0-92c4-4b53-8d1e-0c5f9e2a6b13

ชื่อไฟล์จริง (เช่น mods/sodium.jar) ถูกจำไว้ในระบบ ไม่ใช่ชื่อบนดิสก์ จึงอย่าเปลี่ยนชื่อหรือย้ายไฟล์ในโฟลเดอร์นี้เอง

ดูแลรักษา

สำรองข้อมูล

คัดลอกโฟลเดอร์ storage ไปเก็บไว้เป็นระยะ (และไฟล์ .env เผื่อต้องตั้งเซิร์ฟเวอร์ใหม่)

อัปเดตเวอร์ชัน

ดาวน์โหลดแพ็กเกจใหม่ แทนที่ server.js และ package.json แล้วรัน npm install และรีสตาร์ท อย่าลบไฟล์ .env และโฟลเดอร์ storage

ย้ายไปเครื่องใหม่

  1. ตั้งเซิร์ฟเวอร์ใหม่ตามขั้นตอนด้านบน ใช้ .env เดิม
  2. คัดลอกโฟลเดอร์ storage ไปไว้ที่เครื่องใหม่
  3. ชี้โดเมนเดิมมาที่เครื่องใหม่ (ถ้าเปลี่ยนโดเมน ลิงก์ของไฟล์เดิมในระบบจะชี้ไปโดเมนเก่า)

เปลี่ยน API_KEY

  1. แก้ API_KEY ใน .env แล้วรีสตาร์ทเซิร์ฟเวอร์
  2. ในหน้าเว็บ ไปที่ Storage นั้นกดแก้ไข ใส่ API Key ใหม่ แล้วบันทึก

ถ้าเปิด PRIVATE_FILES อยู่ ระหว่างสองขั้นตอนนี้ลิงก์ดาวน์โหลดจะใช้ไม่ได้ ควรทำต่อกันทันที

แก้ปัญหาเบื้องต้น

อาการสาเหตุและวิธีแก้
เซิร์ฟเวอร์ขึ้นว่ายังไม่ได้ตั้งค่า API_KEYยังไม่ได้สร้างไฟล์ .env หรือ API_KEY ว่าง
อัปโหลดแล้วขึ้นข้อผิดพลาดเครือข่ายตรวจว่าใช้ https, ALLOWED_ORIGINS ตรงกับโดเมนของเว็บ (หรือเว้นว่าง) และ PUBLIC_URL เป็นที่อยู่จริง ไม่ใช่ localhost
เพิ่ม Storage แล้วอัปโหลดไม่ได้ ขึ้นว่าไม่ตอบสนองหรือปฏิเสธBase URL ผิด/เข้าไม่ถึง หรือ API Key ไม่ตรงกับ API_KEY ใน .env
ได้ 413 File too largeไฟล์ใหญ่กว่า MAX_SIZE_MB หรือเกินขนาดสูงสุดของ reverse proxy
ได้ 400 hash does not matchไฟล์เสียหายหรือถูกแก้ระหว่างอัปโหลด ลองอัปโหลดใหม่
ดาวน์โหลดไฟล์ไม่ได้ (404)ไฟล์ในโฟลเดอร์ storage ถูกลบ/ย้ายออก หรือ PUBLIC_URL ไม่ตรงกับที่อยู่จริง
ดาวน์โหลดแล้วได้ 403 Invalid or expired download urlเปิด PRIVATE_FILES อยู่ และลิงก์หมดอายุ หรือ API_KEY ใน .env ไม่ตรงกับในหน้าเว็บ ให้เปิดลิงก์ใหม่จากเว็บ/launcher

ปัญหาอื่นๆ ดู คำถามที่พบบ่อยและแก้ปัญหา และอ่านเพิ่มเรื่องการใช้ Storage ที่ Storage

เอกสารต่างๆ

Term of servicePrivacy Policy

Dimension Studio

ไดแมนชั่น สตูดิโอ

ดิสคอร์ด :

Dimension Studio

เว็บไซต์ :

Dimension Studio

ยูทูป :

Dimension Studio

Copyright © 2024-2026 บริษัท เน็กชันนารี จำกัด (NEXIONARY Company Limited). All rights reserved.

ทะเบียนเลขที่ 50105568159679

Dimension Launcher ไม่มีส่วนเกี่ยวข้องกับ Mojang AB หรือ Microsoft Corporation