ข้ามไปยังเนื้อหาหลัก

คู่มือ · ข้อมูลสด

ต่อ API หรือฐานข้อมูลของคุณเอง แล้วให้ตัวเลขไหลเข้าตารางเอง

หน้านี้เขียนให้คนที่จะตั้งค่าครั้งแรก ตั้งเสร็จครั้งเดียว คนอื่นในทีมแค่กด "ใส่ลงตาราง" โดยไม่ต้องเห็น URL, SQL หรือรหัสผ่านสักตัว

ทำไมทำบนเดโมไม่ได้

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

ของจริงต้องรันบนเซิร์ฟเวอร์ของคุณเอง ใช้เวลาราว 15 นาทีตามชุดเริ่มต้นด้านล่าง

ต่ออะไรได้บ้าง

สี่ชนิด ทุกชนิดคนใช้งานเห็นเหมือนกันหมด คือเป็นตารางที่อัปเดตเองตามรอบที่ตั้งไว้

REST API (JSON)

URL, auth header ถ้าต้องใช้ และจำนวนแถวสูงสุด · API ที่แบ่งหน้าจะดึงหน้าถัดไปให้เอง

https://api.example.com/v1/sales?page=1

CSV / Google Sheets

ลิงก์ที่ได้ไฟล์ CSV · ใน Google Sheets ใช้ ไฟล์ → แชร์ → เผยแพร่ไปยังเว็บ → CSV

https://docs.google.com/spreadsheets/d/e/…/pub?output=csv

PostgreSQL

connection string กับคำสั่ง SELECT หนึ่งคำสั่ง · รันใน transaction แบบอ่านอย่างเดียวเสมอ

postgres://reader:••••@db.example.com:5432/shop

MySQL / MariaDB

เหมือน PostgreSQL · รันคำสั่งได้ทีละคำสั่งเท่านั้น

mysql://reader:••••@db.example.com:3306/shop

ชุดเริ่มต้น

สี่ขั้น ทำตามลำดับ คำสั่งทุกบล็อกกดคัดลอกได้

  1. เอาโค้ดมาและติดตั้ง

    ต้องมี Node.js 22.12 ขึ้นไป หรือ 24

    คำสั่ง
    git clone https://github.com/SuruchBoss/ExcelToGo.git
    cd ExcelToGo
    npm install
    cp .env.example .env.local

  2. ตั้งค่าใน .env.local

    สองบรรทัดแรกต้องมี บรรทัดที่สามใช้เฉพาะเมื่อฐานข้อมูลอยู่ในเครือข่ายภายใน

    คำสั่ง
    # เปิดฟีเจอร์ข้อมูลสด และเป็นรหัสที่ใช้ปลดล็อกในแอป
    # สร้างด้วย: openssl rand -base64 32
    SOURCES_ADMIN_TOKEN=
    
    # ใช้เข้ารหัส auth header และ connection string ที่เก็บบนเซิร์ฟเวอร์
    # ใส่ข้อความยาว ๆ อะไรก็ได้
    SOURCES_SECRET_KEY=
    
    # เฉพาะฐานข้อมูลที่อยู่ใน network ภายใน (เช่น RDS ใน VPC)
    # SOURCES_ALLOWED_DB_HOSTS=db.internal

    อย่าตั้ง NEXT_PUBLIC_DEMO_MODE ถ้าตั้งไว้ ฟีเจอร์นี้จะถูกปิดเหมือนบนเดโม

  3. รันบนเซิร์ฟเวอร์ที่เขียนไฟล์ได้

    แหล่งข้อมูลที่ตั้งไว้ถูกเก็บในไฟล์ data/sources.json บนเซิร์ฟเวอร์ จึงต้องรันบนเครื่องที่มีดิสก์เขียนได้และไม่หายเมื่อรีสตาร์ต เช่น VPS, Docker ที่ผูก volume ไว้ หรือเครื่องในบริษัท

    คำสั่ง
    npm run build
    npm run start

    Vercel ใช้กับฟีเจอร์นี้ไม่ได้ เพราะดิสก์บน Vercel อ่านได้อย่างเดียว บันทึกแหล่งข้อมูลไม่ลง

  4. เชื่อมต่อในแอป

    เปิด /app → กดแท็บ "ข้อมูลสด" → ใส่ SOURCES_ADMIN_TOKEN → "เชื่อมต่อข้อมูลใหม่" → เลือกชนิด → "ทดสอบการเชื่อมต่อ" ดูว่าได้กี่แถวกี่คอลัมน์ → บันทึก เสร็จแล้วคนในทีมกด "ใส่ลงตาราง" ได้เลย

    อยากลองก่อนต่อของจริง ใช้ API สาธารณะอย่าง https://jsonplaceholder.typicode.com/users ได้ · ที่อยู่ในเครื่อง (localhost) และเครือข่ายภายในถูกกันไว้

สิ่งที่ระบบกันไว้ให้ และสิ่งที่คุณต้องทำเอง

ต้องมีโทเคนเสมอ
ไม่ได้ตั้ง SOURCES_ADMIN_TOKEN เท่ากับฟีเจอร์ปิด ไม่ใช่เปิดให้ทุกคน · โทเคนอยู่แค่ในแท็บนั้น ปิดเบราว์เซอร์แล้วต้องใส่ใหม่
ไม่ยิงเข้าเครือข่ายภายใน
localhost, 10.x, 192.168.x และ metadata ของ cloud ถูกกันทุกครั้ง รวมถึงหลัง redirect · ฐานข้อมูลภายในต้องระบุชื่อ host ใน SOURCES_ALLOWED_DB_HOSTS ก่อน
รหัสผ่านถูกเข้ารหัส และไม่ถึงเบราว์เซอร์
auth header และ connection string ถูกเข้ารหัสด้วย SOURCES_SECRET_KEY ถ้าไม่มีคีย์ ระบบจะไม่ยอมบันทึก · คนใช้งานเห็นแค่ชื่อแหล่งข้อมูล
SQL เขียนข้อมูลไม่ได้
ทุกคำสั่งรันใน transaction แบบอ่านอย่างเดียว · แต่ระบบกันไม่ได้ว่าคำสั่งจะอ่านตารางไหน จึงควรสร้าง user ฐานข้อมูลที่อ่านได้เฉพาะตารางที่ต้องการ

"บันทึกบนคลาวด์" ไม่ใช่การต่อฐานข้อมูล

แท็บก้อนเมฆคือการเก็บไฟล์งานไว้เปิดจากเครื่องอื่นและแก้พร้อมกัน ใช้ Supabase ของคุณเอง ไม่เกี่ยวกับการดึงข้อมูลจาก API หรือฐานข้อมูลเข้าตาราง

ถ้าต้องการ ให้สร้างโปรเจกต์ Supabase รันไฟล์ใน supabase/migrations แล้วใส่สองบรรทัดนี้ใน .env.local แท็บจะขึ้นมาเอง ใช้ anon key เท่านั้น ห้ามใช้ service-role key

คำสั่ง
NEXT_PUBLIC_SUPABASE_URL=https://xxxx.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=

อ่านต่อ