SSD Nodes Learn Hosting plans →
คู่มือ Matt Connorโดย Matt Connor · อัปเดตเมื่อ 2026-08-13

วิธีติดตั้ง Iva ผู้ช่วย AI บน Telegram ด้วยตนเองบน VPS

เรียนรู้วิธีติดตั้ง Iva ผู้ช่วย AI บน Telegram แบบ self-hosted บน VPS ขนาดเล็กโดยไม่ต้องเปิดพอร์ตหรือใช้โดเมน จัดการผ่าน systemd และเก็บข้อมูลในรูปแบบไฟล์ Markdown

สิ่งที่คุณกำลังสร้าง

Iva คือผู้ช่วย AI บน Telegram ที่คุณสามารถโฮสต์ได้ด้วยตนเอง และเป็นหนึ่งในไม่กี่ตัวที่คุณสามารถติดตั้งใช้งานได้โดยไม่ต้องเปิดพอร์ตขาเข้าหรือชี้โดเมนมาที่เซิร์ฟเวอร์ อีกทั้งยังไม่ต้องใช้ certificate เนื่องจากไม่มีส่วนใดในเครื่องที่เปิดรับการเชื่อมต่อจากสาธารณะ บริการนี้จะทำการเชื่อมต่อออกไปยัง Telegram ค้างไว้เพื่อรออ่านข้อความตอบกลับของคุณ ทุกอย่างที่เหลือจะทำงานต่อเนื่องจากการเชื่อมต่อขาออกเพียงจุดเดียวนี้

Iva ใช้สัญญาอนุญาตแบบ MIT และเขียนด้วย Node หน่วยความจำของมันคือโฟลเดอร์ที่เก็บไฟล์ markdown ธรรมดาซึ่ง Obsidian สามารถเปิดอ่านได้โดยตรง ดังนั้นบันทึกที่มันเก็บเกี่ยวกับคุณจึงยังคงอ่านได้แม้ไม่มีแอป คู่มือนี้อ้างอิงรุ่น v0.3.13 ซึ่งเผยแพร่เมื่อวันที่ 6 สิงหาคม 2026

ซอฟต์แวร์ที่โฮสต์ด้วยตนเองส่วนใหญ่เริ่มต้นด้วยการตั้งค่า DNS (Domain Name System) และ การออก certificate ของ Let's Encrypt ด้วย Certbot แต่ Iva ข้ามขั้นตอนเหล่านั้นไปโดยสิ้นเชิง นั่นคือเหตุผลที่ VPS ขนาดเล็กที่อยู่หลังไฟร์วอลล์ซึ่งอนุญาตเฉพาะ SSH ก็เพียงพอสำหรับการติดตั้งใช้งานที่สมบูรณ์แล้ว

เหตุผลที่ Iva ไม่จำเป็นต้องเปิดพอร์ต

iva-telegram-poll.service เป็นบริดจ์แบบ long polling โดยจะเรียกใช้ getUpdates API ของ Telegram และรอคำตอบ ดังนั้นการเชื่อมต่อทุกครั้งจะเริ่มต้นจากเซิร์ฟเวอร์ของคุณเอง Telegram ไม่เคยเชื่อมต่อกลับเข้ามา ซึ่งหมายความว่าไม่มี reverse proxy ให้ต้องตั้งค่าและไม่มีเรื่องการต่ออายุ certificate ที่ต้องคอยกังวล

ตัว agent เองมีการเปิดฟังการเชื่อมต่อที่พอร์ต 127.0.0.1 8723 เท่านั้น เอกสารประกอบของโปรเจกต์ระบุไว้อย่างชัดเจนว่า: ห้ามเปิดพอร์ต 8723 สู่สาธารณะ และ reverse proxy ใดๆ ที่คุณนำมาวางไว้ด้านหน้าจะต้องคงข้อกำหนดเรื่อง bearer token เอาไว้เสมอ ให้ตรวจสอบ bind address หลังจากติดตั้งเสร็จสิ้น

sudo ss -tlnp | grep 8723

ที่อยู่ดังกล่าวจะต้องแสดงเป็น 127.0.0.1:8723 หากเป็นที่อยู่แบบ wildcard เช่น 0.0.0.0:8723 หมายความว่า HTTP routes ของ agent สามารถเข้าถึงได้จากอินเทอร์เน็ต และคุณควรแก้ไขปัญหานี้ก่อนที่จะส่งข้อมูลส่วนตัวใดๆ ให้กับบอท

ดังนั้นให้ปิด firewall ไว้ตามปกติ อย่าลืมอนุญาต SSH ก่อนที่จะเปิดใช้งาน firewall เพราะ ufw enable หากไม่มีกฎสำหรับ SSH จะทำให้เซสชันที่คุณกำลังใช้งานอยู่ถูกตัดการเชื่อมต่อทันที

sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status

สิ่งที่ตัวติดตั้งแบบบรรทัดเดียวทำจริง ๆ

หน้าแรกของโปรเจกต์ให้คำสั่งหนึ่งบรรทัดที่ส่งสคริปต์จาก GitHub เข้าสู่ bash โดยตรง โปรดอ่านสคริปต์ดังกล่าวก่อน เพราะมันทำมากกว่าการติดตั้งโปรแกรมเพียงตัวเดียว

curl -fsSL https://raw.githubusercontent.com/smixs/iva/main/install.sh -o iva-install.sh
less iva-install.sh
  • ติดตั้งแพ็กเกจระบบด้วยตัวจัดการแพ็กเกจที่ตรวจพบ ได้แก่ git, gh, python3, ffmpeg, pandoc และ poppler-utils
  • สร้าง swapfile ขนาด 2 GB ที่ /swapfile ในกรณีที่เครื่องมี RAM น้อยกว่า 1.5 GB และไม่มี swap เนื่องจากกระบวนการ build จะถูกสั่งยุติการทำงานหากไม่มีหน่วยความจำเพียงพอ
  • ติดตั้ง nvm จากนั้นติดตั้ง Node 24 ซึ่งเป็นเวอร์ชันขั้นต่ำที่ Iva ต้องการในการทำงาน
  • ติดตั้ง uv ซึ่งเป็นตัวจัดการแพ็กเกจของ Python ลงใน ~/.local/bin
  • ทำการ clone repository ไปยัง ~/iva และรัน npm ci
  • ติดตั้ง npm package แบบ global สองตัว ได้แก่ agent-browser (ซึ่งจะดาวน์โหลด Chromium ตามมา) และ @googleworkspace/cli
  • รันตัวช่วยตั้งค่า (setup wizard), build โปรเจกต์ และสร้าง vault
  • เขียนคำสั่ง iva ลงใน ~/.local/bin และติดตั้ง systemd user units

นั่นเป็นซอฟต์แวร์จำนวนมากสำหรับคำสั่งเพียงบรรทัดเดียว และยังอธิบายเหตุผลที่ README แนะนำให้ติดตั้งในฐานะผู้ใช้ทั่วไปแทนที่จะเป็น root เนื่องจากเครื่องมือ shell ของ agent จะทำงานด้วยสิทธิ์เดียวกับที่ตัวติดตั้งมีในภายหลัง สคริปต์จะเรียกใช้ sudo เฉพาะสำหรับการติดตั้งแพ็กเกจและสร้าง swapfile เท่านั้น ผ่านตัวช่วยที่รันคำสั่งโดยตรงในกรณีที่คุณเป็น root อยู่แล้ว

สร้างผู้ใช้เฉพาะสำหรับติดตั้ง

กำหนดบัญชีผู้ใช้แยกต่างหากสำหรับ Iva โดยเฉพาะ เนื่องจาก agent จะรันคำสั่ง shell บนโฮสต์ผ่าน child_process ของ Node โดยไม่มี container หรือ sandbox มาคั่น ดังนั้นบัญชีผู้ใช้ที่รันกระบวนการนี้จึงถือเป็นขอบเขตความปลอดภัยหลัก

sudo adduser --disabled-password --gecos "" iva
sudo usermod -aG sudo iva
sudo install -d -m 700 -o iva -g iva /home/iva/.ssh
sudo cp ~/.ssh/authorized_keys /home/iva/.ssh/authorized_keys
sudo chown iva:iva /home/iva/.ssh/authorized_keys
sudo chmod 600 /home/iva/.ssh/authorized_keys
sudo loginctl enable-linger iva

enable-linger มีความสำคัญเนื่องจาก Iva ทำงานในรูปแบบ systemd user units หากไม่มีการเปิดใช้งาน linger ระบบ systemd จะหยุดบริการของผู้ใช้นั้นทันทีที่ session สุดท้ายสิ้นสุดลง ส่งผลให้ผู้ช่วยหยุดทำงานเมื่อคุณปิดการเชื่อมต่อ SSH กฎเดียวกันนี้ยังใช้กับ บริการและตัวตั้งเวลาที่คุณเขียนขึ้นเองภายใต้ systemd

บัญชีผู้ใช้นี้จำเป็นต้องมีสิทธิ์ sudo เฉพาะในระหว่างที่ตัวติดตั้งเพิ่มแพ็กเกจเท่านั้น ให้เพิกถอนสิทธิ์ดังกล่าวออกเมื่อการติดตั้งเสร็จสิ้น

sudo deluser iva sudo

ให้ล็อกอินเข้าสู่ระบบด้วยบัญชีผู้ใช้นั้นโดยตรงผ่าน SSH การเข้าถึง shell ด้วยคำสั่ง sudo -iu iva จะไม่มีการตั้งค่า DBUS_SESSION_BUS_ADDRESS หรือ XDG_RUNTIME_DIR ไว้ ส่งผลให้คำสั่ง systemctl --user ทุกคำสั่งล้มเหลวด้วยข้อผิดพลาด Failed to connect to bus การกำหนดขอบเขตนี้เป็นแนวทางปฏิบัติเดียวกับการ รันบริการภายใต้ผู้ใช้ที่มีสิทธิ์จำกัด (least privilege)

ติดตั้งเวอร์ชันที่ระบุแทนการ pipe ไปยัง bash

ตัวติดตั้งมีคุณสมบัติที่เป็นประโยชน์ ก่อนที่มันจะทำการ clone ข้อมูลใดๆ มันจะตรวจสอบว่าไดเรกทอรีที่สคริปต์วางอยู่มี package.json ที่บรรจุ "eve" อยู่แล้วหรือไม่ หากมี มันจะ build จาก checkout นั้นและข้ามขั้นตอนการ clone ไป ดังนั้นคุณจึงสามารถเลือกเวอร์ชันได้ด้วยตนเอง

git clone --branch v0.3.13 https://github.com/smixs/iva.git ~/iva
cd ~/iva
git log -1 --oneline
bash install.sh

ตอนนี้คุณทราบแล้วว่าโค้ดใดกำลังทำงานอยู่ คุณจะไม่ทราบข้อมูลนี้หากสคริปต์ทำการ clone main ในสถานะใดก็ตามที่เป็นอยู่ในขณะนั้น Iva ได้ปล่อย release ออกมา 5 ครั้งระหว่างวันที่ 4 ถึง 6 สิงหาคม 2026 ดังนั้น main ในช่วงเช้าและ main ในช่วงบ่ายจึงไม่ใช่โปรแกรมเดียวกัน

การ checkout ด้วย tag จะทำให้ git อยู่ในสถานะ detached HEAD ซึ่งสามารถทำงานได้ตามปกติ แต่ต้องเข้าใจข้อจำกัดนี้: iva update จะเลื่อน checkout ไปข้างหน้าบน branch ของการอัปเดต ดังนั้นการระบุเวอร์ชัน (pin) จึงเป็นเพียงจุดเริ่มต้นที่ทราบค่า ไม่ใช่การหยุดนิ่งถาวร iva version จะแสดงเวอร์ชันของแพ็กเกจและ git commit เพื่อให้คุณตรวจสอบสถานะปัจจุบันได้เสมอ

หากต้องการเปลี่ยนไปใช้ release ที่ใหม่กว่าโดยตั้งใจ ให้แสดงรายการ tag ทั้งหมด กำหนดค่า IVA_TAG เป็น tag ที่คุณเลือก จากนั้นรันตัวติดตั้งจากภายใน checkout อีกครั้ง

cd ~/iva
git fetch --tags
git tag --list 'v*' | sort -V | tail -5
IVA_TAG=v0.3.13
git checkout "$IVA_TAG"
bash install.sh --skip-setup
iva restart

--skip-setup จะหยุดไม่ให้ตัวช่วยติดตั้ง (wizard) ทำงานซ้ำบน .env ที่ทำงานได้ตามปกติอยู่แล้ว

ขั้นตอนวิซาร์ด 5 ขั้นตอน และคีย์ที่จำเป็นต้องใช้

  1. ผู้ให้บริการโมเดลและตัวโมเดล MODEL_PROVIDER รองรับ opencode, ollama, openrouter หรือ codex วิซาร์ดจะตรวจสอบคีย์แบบเรียลไทม์และแสดงรายการโมเดลที่มีให้ใช้งานตามแผนของคุณ
  2. เสียงและการค้นหา คีย์ Deepgram ใช้สำหรับถอดความบันทึกเสียง ส่วนคีย์สำหรับการค้นหาเว็บ (Tavily, Exa, Parallel หรือ Brave) เป็นตัวเลือกเสริม
  3. Telegram bot token จาก @BotFather ซึ่งจะถูกตรวจสอบกับ endpoint getMe
  4. การควบคุมการเข้าถึง คุณส่งข้อความหาบอทของคุณ แล้ววิซาร์ดจะอ่านตัวเลข user ID ของคุณจาก getUpdates
  5. การตั้งค่าระบบ เขตเวลา IANA, ไดเรกทอรี vault และพอร์ตภายในเครื่อง โดยค่าเริ่มต้นคือ 8723

สองขั้นตอนข้างต้นเป็น dependency ที่ถูกซ่อนไว้ภายใต้แนวคิด "คำสั่งเดียวจบ" เนื่องจาก Iva ไม่ได้มาพร้อมกับโมเดลในตัว จึงจำเป็นต้องมีแผนการใช้งานโมเดลแบบชำระเงินหรือ API key ก่อนจึงจะสามารถตอบโต้ได้ นอกจากนี้ตัวมันเองยังไม่สามารถถอดความเสียงได้ ดังนั้นบันทึกเสียงจึงต้องอาศัยบริการแยกต่างหาก โมเดล nova-3 ของ Deepgram ที่ใช้ร่วมกับ DEEPGRAM_LANGUAGE=multi สามารถตรวจจับภาษาได้ และบัญชี Deepgram ใหม่จะได้รับเครดิตเริ่มต้นซึ่งเพียงพอสำหรับการใช้งานส่วนตัวนานหลายเดือน การใช้งานข้อความสามารถทำได้ด้วยคีย์โมเดลเพียงอย่างเดียว มีเพียงฟังก์ชันเสียงเท่านั้นที่ต้องพึ่งพา Deepgram

ตรวจสอบสิ่งที่วิซาร์ดบันทึกไว้

grep -E '^(MODEL_PROVIDER|TELEGRAM_ALLOWED_USER_IDS|ASSISTANT_VAULT_DIR|IVA_PORT)=' ~/iva/.env
ls -l ~/iva/.env

ls ควรแสดงผลเป็น -rw------- ที่โหมด 0600 เนื่องจากไฟล์นั้นเก็บคีย์ทั้งหมดที่คุณเพิ่งกรอกลงไป TELEGRAM_ALLOWED_USER_IDS ต้องเก็บตัวเลข ID ของคุณไว้ รายการอนุญาต (allowlist) จะถูกปิดกั้นโดยค่าเริ่มต้น ดังนั้นหากค่าว่างเปล่า Iva จะไม่ตอบโต้ใครเลย

โมเดลจะถูกอ่านเพียงครั้งเดียวเมื่อเริ่มกระบวนการ การแก้ไข MODEL_PROVIDER หรือชื่อโมเดลใน .env จะไม่มีผลใดๆ จนกว่าคุณจะรัน iva restart บน openrouter ชื่อโมเดลจะเป็น slug ของผู้ให้บริการ เช่น anthropic/claude-sonnet-4.5 ไม่ใช่ชื่อเรียกทั่วไป ส่วนบน codex จะไม่มีการใช้ API key เลย เพราะ iva login จะเป็นการลงชื่อเข้าใช้ผ่านการสมัครสมาชิก ChatGPT ที่มีอยู่เดิม

ค่าใช้จ่ายรายเดือนในการรัน Iva

ChartMonthly cost of a self-hosted Iva, published list prices, August 2026
The data behind this chart
[
  {
    "plan": "Small VPS, always on",
    "usd_per_month": 5
  },
  {
    "plan": "OpenCode Go model plan",
    "usd_per_month": 5
  },
  {
    "plan": "Ollama Cloud model plan",
    "usd_per_month": 20
  },
  {
    "plan": "Deepgram voice, starter credits",
    "usd_per_month": 0
  },
  {
    "plan": "Tavily web search, free tier",
    "usd_per_month": 0
  },
  {
    "plan": "Cheapest complete setup",
    "usd_per_month": 10
  }
]

ราคาเหล่านี้เป็นราคาตามรายการที่ประกาศ ณ เดือนสิงหาคม 2026 ไม่ใช่การวัดผลจริง VPS ขนาดเล็กในราคา 5 ดอลลาร์สหรัฐ รวมกับแผน OpenCode Go ในราคา 5 ดอลลาร์ เป็นการตั้งค่าที่สมบูรณ์แบบที่ถูกที่สุด ซึ่งอยู่ที่ประมาณ 10 ดอลลาร์ต่อเดือน Ollama Cloud เป็นอีกหนึ่งตัวเลือกแบบราคาคงที่ที่ 20 ดอลลาร์ โดยโมเดลระดับ frontier จะถูกเรียกเก็บเงินเพิ่มตามการใช้งานจริง ส่วนค่าใช้จ่ายด้านเสียงอยู่ที่ 0 ในขณะที่เครดิตเริ่มต้นของ Deepgram ยังคงเหลืออยู่

OpenRouter ไม่มีระบุไว้ในที่นี้เนื่องจากเป็นรูปแบบจ่ายตามการใช้งานจริง ดังนั้นค่าใช้จ่ายของคุณจะแปรผันตามปริมาณการใช้งาน นี่คือตัวเลือกที่ต้องเฝ้าระวัง: ผู้ช่วยที่นำ context window ขนาด 131072 token ไปใช้ในทุกการโต้ตอบอาจทำให้ค่าใช้จ่ายสูงกว่าแผนราคาคงที่ได้อย่างรวดเร็ว ควรตั้งค่าตัวแปร context window ให้ตรงกับขนาดจริงของโมเดล เนื่องจากค่าที่สูงเกินจริงจะทำให้สิ้นเปลือง token โดยเปล่าประโยชน์

บริการสองรายการและตัวจับเวลาสองรายการ

  • iva.service ทำหน้าที่รันตัว agent เอง
  • iva-telegram-poll.service ทำหน้าที่รัน long polling bridge เพื่อสื่อสารกับ Telegram
  • iva-memory-doctor.timer ทำงานตอน 05:00 เพื่อรันการบำรุงรักษา vault ประจำคืน
  • iva-update-check.timer ทำงานตอน 10:00 เพื่อตรวจสอบว่ามี release ใหม่กว่าหรือไม่
  • iva-telegram-userbot.service จะมีอยู่ก็ต่อเมื่อคุณตั้งค่า Telethon proxy แบบทางเลือกไว้เท่านั้น
iva status
systemctl --user status iva.service iva-telegram-poll.service
systemctl --user list-timers
iva logs poll

iva status ใช้รายงานสถานะของทั้งสองบริการและตัวจับเวลาทั้งสองรายการ systemctl --user list-timers ใช้แสดงเวลาการทำงานถัดไปของตัวจับเวลาแต่ละตัว ซึ่งเป็นวิธีที่คุณจะยืนยันได้ว่า memory doctor จะทำงานในคืนนี้จริง ทั้งสองบริการควรอยู่ในสถานะ active (running) หากบริการใดบริการหนึ่งรีสตาร์ทวนซ้ำ journalctl --user -u iva.service -n 100 จะแสดงสาเหตุให้ทราบ

การแยกส่วนมีความสำคัญเมื่อคุณทำการดีบั๊ก bridge อาจยังทำงานและ polling อยู่ในขณะที่ agent หยุดทำงาน ซึ่งจะทำให้ Telegram รับข้อความของคุณแต่ไม่มีการตอบกลับใดๆ iva logs poll ใช้ติดตาม log ของ bridge ส่วน iva logs ใช้ติดตาม log ของ agent ดังนั้น log ทั้งสองส่วนจะบอกคุณได้ว่าส่วนใดที่เกิดปัญหา

ตำแหน่งที่เก็บ Obsidian vault และวิธีการสำรองข้อมูล

ASSISTANT_VAULT_DIR จะใช้ค่าเริ่มต้นเป็น vault ภายในไดเรกทอรีที่ติดตั้ง ดังนั้นหน่วยความจำจึงอยู่ที่ ~/iva/vault โดยตัวมันเองเป็น git repository แยกต่างหากจากโค้ด ซึ่งช่วยให้คุณอัปเดต Iva ได้โดยไม่กระทบต่อบันทึกของคุณ

  • vault/CORE.md เก็บข้อเท็จจริงที่คงทนและการตั้งค่าถาวร โดยจำกัดไว้ที่ 1200 ตัวอักษร และจะถูกส่งไปพร้อมกับ system prompt ทุกครั้ง
  • vault/daily/YYYY-MM-DD.md คือบันทึกประจำวัน ซึ่งถูกกำหนดให้เป็นการเขียนต่อท้ายเท่านั้น
  • vault/cards/ เก็บการ์ดที่ระบุประเภทสำหรับผู้ติดต่อ, โครงการ, การตัดสินใจ, แนวคิด และบันทึกต่างๆ
  • vault/summaries/daily/, weekly/, monthly/ และ yearly/ เก็บข้อมูลสรุป (rollups)
  • vault/attachments/ เก็บไฟล์ตามวันที่ และ vault/.graph/ เก็บกราฟความเชื่อมโยง (link graph)
  • vault/schema.json กำหนดประเภทของการ์ดและกฎการเสื่อมสภาพ (decay rules)

กระบวนการสรุปข้อมูล (rollups) จะทำงานตามกำหนดเวลาภายในโปรเซส โดยการประมวลผลรายวันในเวลา 04:00 จะเปลี่ยนบันทึกของเมื่อวานให้เป็นการ์ดและบทสรุป จากนั้นจะเขียนทับ CORE.md ต่อด้วยการประมวลผลรายสัปดาห์ รายเดือน และรายปีเพื่อบีบอัดข้อมูลเหล่านั้นตามลำดับ ในเวลา 05:00 ตัวจัดการหน่วยความจำ (memory doctor) จะทำงานแบบกำหนดตายตัวโดยไม่ใช้โมเดล: มันจะบังคับใช้ schema, สร้างกราฟความเชื่อมโยงใหม่, สร้างดัชนีใหม่ จากนั้นจะทำการ commit และ push ข้อมูล

การ push ข้อมูลดังกล่าวคือการสำรองข้อมูลของคุณ ซึ่งเป็นขั้นตอนที่ผู้ใช้มักมองข้าม หาก vault ไม่มี git remote ตัวจัดการจะพยายามสร้าง private GitHub repository ผ่าน gh ซึ่งจำเป็นต้องมีการยืนยันตัวตนผ่าน GitHub CLI

gh auth login
systemctl --user start iva-memory-doctor.service
cd ~/iva/vault && git log --oneline -3

หากมี commit ที่ลงวันที่วันนี้ แสดงว่าการประมวลผลได้ทำงานและ vault ถูกบันทึกเรียบร้อยแล้ว คำเตือน gh not available ใน log หมายถึงสิ่งตรงกันข้าม: คือ vault ได้รับการดูแลรักษาแต่ไม่เคยถูกส่งออกจากเซิร์ฟเวอร์ ดังนั้นหาก VPS เสียหาย ข้อมูลหน่วยความจำของคุณก็จะสูญหายไปด้วย

คุณควรเก็บสำเนาที่คุณควบคุมเองไว้ด้วย

tar czf ~/iva-vault-backup.tgz -C ~/iva vault

คัดลอกไฟล์นั้นออกจากเซิร์ฟเวอร์ด้วย scp จากนั้นจึงลบออกจากเซิร์ฟเวอร์ หากต้องการอ่านหน่วยความจำใน Obsidian ให้ชี้ Obsidian ไปที่ clone ของ vault repository นั้น Wikilinks และ backlinks จะทำงานได้ตามปกติ รวมถึงมุมมองกราฟด้วย การแก้ไขการ์ดและ CORE.md ด้วยตนเองนั้นปลอดภัย แต่ควรปล่อย MOC.md และ .graph/ ไว้ตามเดิม เนื่องจากกระบวนการประมวลผลรายคืนจะสร้างไฟล์ทั้งสองขึ้นใหม่เสมอ

ให้มองว่า vault คือบันทึกเหตุการณ์ในชีวิตของคุณ

ไดเรกทอรีนั้นคือบันทึกตามวันที่ของสิ่งที่คุณพูด บุคคลที่คุณพบ และการตัดสินใจของคุณ บนเครื่องที่คุณเช่าใช้งาน ซึ่งนำไปสู่ข้อสรุป 2 ประการดังนี้

การทำ self-hosting เป็นเพียงการย้ายที่จัดเก็บข้อมูล ไม่ใช่การย้ายการประมวลผล ทุกการโต้ตอบจะถูกส่งไปยังผู้ให้บริการโมเดลของคุณ และทุกบันทึกเสียงจะถูกส่งไปยัง Deepgram ตัว vault นั้นเป็นของคุณ แต่คำขอเหล่านั้นไม่ได้มีความเป็นส่วนตัวจากบริษัทที่ให้บริการ การรัน memory layer ด้วยตนเอง เช่นเดียวกับการใช้ Mem0 memory server บน VPS ของคุณเอง ก็มีลักษณะเดียวกัน คือข้อมูลถูกจัดเก็บไว้ในเครื่อง แต่การเรียกใช้งานโมเดลยังคงส่งออกไปภายนอก หากหัวข้อใดมีความละเอียดอ่อนเกินกว่าจะให้บุคคลที่สามรับรู้ ให้เก็บหัวข้อนั้นไว้ภายนอกบทสนทนา

ขอบเขตการเข้าถึงของบัญชีนั้นครอบคลุมทั้ง vault เครื่องมือของ Iva รันแบบ host native ผ่าน fs และ child_process ของ Node โดยไม่มี Docker และไม่มี sandbox ดังนั้นหากการโต้ตอบถูกแทรกแซง ผู้บุกรุกจะได้รับสิทธิ์ทั้งหมดเท่าที่ service user นั้นมี นี่คือเหตุผลว่าทำไมบัญชีจึงไม่มี sudo หลงเหลืออยู่หลังการติดตั้ง และทำไม allowlist จึงสมควรได้รับความสนใจมากกว่าที่เห็น เพราะมันคือประตูที่ตัดสินว่าข้อความของใครจะกลายเป็นคำสั่งบนเซิร์ฟเวอร์ของคุณ หากคุณต้องการผู้ช่วยส่วนตัวในกระเป๋าโดยไม่ต้องเปิดพอร์ตใดๆ นี่คือรูปแบบเดียวกับที่ใช้ในการ เข้าถึง Hermes agent ที่ทำ self-hosted จากโทรศัพท์ของคุณ โดยให้ chat client ทำหน้าที่แทน public endpoint ที่ปกติจะต้องเปิดใช้งาน

สิ่งที่มักเกิดข้อผิดพลาดและข้อความที่คุณจะพบ

Build killed, exit 137. ตัวจัดการหน่วยความจำของ kernel (OOM killer) สั่งยุติกระบวนการ build เนื่องจากหน่วยความจำไม่เพียงพอ ตัวติดตั้งจะเพิ่ม swap ให้เฉพาะในกรณีที่ RAM มีน้อยกว่า 1.5 GB และไม่มี swap อยู่เดิมเท่านั้น ดังนั้นให้คุณเพิ่ม swap ด้วยตนเองแล้วรันตัวติดตั้งใหม่อีกครั้ง

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
free -h

Failed to connect to bus. คำสั่ง systemctl --user ทุกคำสั่งจะแสดงข้อความนี้เมื่อ shell ไม่มี user session bus ซึ่งเป็นสิ่งที่ sudo -iu iva มอบให้คุณ ให้เปิด SSH session ปกติในฐานะผู้ใช้นั้น หรือทำการ export XDG_RUNTIME_DIR=/run/user/$(id -u iva) ก่อนรันคำสั่ง

บอทไม่ตอบสนองต่อคุณ. TELEGRAM_ALLOWED_USER_IDS ว่างเปล่า และรายการ allowlist ถูกตั้งค่าให้ปฏิเสธการเข้าถึงโดยปริยาย (fail closed) ให้ส่งข้อความหาบอท บอทจะตอบกลับด้วย ID ตัวเลขของคุณเพียงอย่างเดียว ให้นำ ID นั้นไปใส่ใน .env แล้วรัน iva restart

บอทเงียบไปทันทีหลังจาก iva config. ตัวช่วยตั้งค่า (wizard) อาจย้าย IVA_PORT โดยไม่ได้อัปเดต ASSISTANT_HOST ทำให้ bridge เชื่อมต่อไปยังพอร์ตที่ไม่มีการตอบรับ ให้ตรวจสอบเปรียบเทียบทั้งสองบรรทัดแล้วทำการ restart

grep -E '^(IVA_PORT|ASSISTANT_HOST)=' ~/iva/.env
iva restart

ข้อความเสียงไม่ได้รับการตอบกลับ. Telegram Bot API ปฏิเสธการดาวน์โหลดไฟล์ที่มีขนาดเกิน 20 MB ทำให้ bridge ไม่ได้รับไฟล์เสียงที่มีความยาวและไม่มีข้อมูลส่งให้ Deepgram ให้แบ่งไฟล์ก่อนทำการส่ง

ffmpeg -i long.ogg -f segment -segment_time 600 -c copy part-%02d.ogg

การทำงานค้างและไม่มีการตอบสนอง. สถานะ workflow ที่ค้างอยู่จะยังคงอยู่แม้จะทำการ restart และจะนำตัวเองกลับเข้าคิวใหม่ ดังนั้นการ restart เพียงอย่างเดียวจะไม่ช่วยแก้ไขปัญหานี้ iva reset จะทำการกักกันสถานะดังกล่าวและ restart บริการทั้งสองตัว ส่วน /new ในแชทจะเป็นการเริ่มบทสนทนาใหม่

Chromium ทำงานล้มเหลวบน Ubuntu 24.04. Ubuntu 24.04 ปิดกั้น unprivileged user namespaces ผ่าน AppArmor ทำให้ sandbox ของ Chromium ไม่สามารถเริ่มทำงานได้และ agent-browser ล้มเหลว ตัวติดตั้งจะแก้ไขปัญหานี้โดยการเขียน "--no-sandbox" ลงใน ~/.agent-browser/config.json โปรดทราบว่ามีการตั้งค่านี้อยู่ ซึ่งจะลดระดับการแยกส่วน (isolation) ของเบราว์เซอร์ลง นี่เป็นอีกเหตุผลหนึ่งที่บัญชีผู้ใช้นี้ไม่ควรเป็นเจ้าของข้อมูลอื่นใดนอกจาก Iva

FAQ

ฉันจำเป็นต้องมีโดเมนหรือเปิดพอร์ตเพื่อโฮสต์ Iva เองหรือไม่?

ไม่จำเป็น Iva สื่อสารกับ Telegram ผ่านการทำ long polling โดยที่ iva-telegram-poll.service จะเรียก getUpdates แล้วรอการตอบกลับ ดังนั้นการเชื่อมต่อทั้งหมดจะเป็นการส่งออก (outbound) จากเซิร์ฟเวอร์ของคุณ ไม่จำเป็นต้องมีสิ่งใดเข้าถึงเครื่องจากภายนอก คุณจึงไม่ต้องใช้ DNS record หรือ certificate ใดๆ พอร์ต HTTP ของตัวเอเจนต์เองคือ 8723 จะผูกไว้กับ 127.0.0.1 ซึ่งเอกสารประกอบของโปรเจกต์ระบุไว้ชัดเจนว่าไม่ควรเปิดพอร์ตนี้ออกสู่สาธารณะ การตั้งค่าไฟร์วอลล์ที่อนุญาตเฉพาะ SSH เป็นการตั้งค่าที่ถูกต้องแล้ว

การรัน Iva ในแต่ละเดือนมีค่าใช้จ่ายเท่าไร?

ตามราคาประกาศ ณ เดือนสิงหาคม 2026 VPS ขนาดเล็กราคา 5 ดอลลาร์ รวมกับแผนบริการแบบเหมาจ่ายที่ถูกที่สุดราคา 5 ดอลลาร์ จะมีค่าใช้จ่ายรวมประมาณ 10 ดอลลาร์สหรัฐต่อเดือน หากใช้ Ollama Cloud จะมีค่าใช้จ่าย 20 ดอลลาร์ และมีการเรียกเก็บเงินเพิ่มสำหรับโมเดลระดับสูง (frontier models) ส่วน Deepgram จะมีเครดิตเริ่มต้นสำหรับบริการเสียง และการค้นหาบนเว็บก็มีโควตาให้ใช้งานฟรี ส่วน OpenRouter เป็นการจ่ายตามการใช้งานจริง จึงไม่มีค่าใช้จ่ายรายเดือนที่แน่นอน

Iva เก็บข้อมูลของฉันไว้ที่ไหน และจะสำรองข้อมูลอย่างไร?

โดยค่าเริ่มต้นข้อมูลจะถูกเก็บไว้ใน ~/iva/vault ซึ่งกำหนดโดย ASSISTANT_VAULT_DIR ข้อมูลนี้เป็น git repository ส่วนตัวที่แยกออกมาต่างหากและเก็บในรูปแบบ plain markdown ได้แก่ CORE.md, daily/YYYY-MM-DD.md, cards/ และ summaries/ ระบบ memory doctor จะทำการ commit และ push ข้อมูลโดยอัตโนมัติในเวลา 05:00 น. ซึ่งจะทำงานได้ก็ต่อเมื่อ repository มี remote ปลายทาง ดังนั้นควรเรียกใช้ gh auth login หรือเพิ่ม remote ของคุณเองในระหว่างการตั้งค่า นอกจากนี้ควรเก็บสำเนาแบบออฟไลน์ไว้ด้วยการใช้ tar czf ~/iva-vault-backup.tgz -C ~/iva vault แล้วย้ายไฟล์นั้นออกจากเซิร์ฟเวอร์

ข้อมูลของฉันจะเป็นส่วนตัวหรือไม่หากฉันโฮสต์ Iva เอง?

พื้นที่จัดเก็บข้อมูลเป็นของคุณ แต่การประมวลผลไม่ใช่ ข้อมูลใน vault จะอยู่บนดิสก์ของคุณจนกว่าคุณจะสั่ง push และไฟล์ .env จะถูกตั้งค่าสิทธิ์เป็น 0600 โดยมี service user เป็นเจ้าของ การเรียกใช้โมเดลและการแปลงเสียงเป็นข้อความจะผ่าน API บนคลาวด์ ดังนั้นข้อความเหล่านั้นจะถูกส่งผ่านผู้ให้บริการโมเดลและ Deepgram เนื่องจาก Iva ใช้สัญญาอนุญาตแบบ MIT คุณจึงสามารถตรวจสอบสิ่งที่โปรแกรมส่งออกไปได้อย่างละเอียดและแก้ไขได้ตามต้องการ รายการอนุญาต (allowlist) ของ Telegram จะทำงานแบบ fail closed ซึ่งหมายความว่าหากไฟล์ TELEGRAM_ALLOWED_USER_IDS ว่างเปล่า ระบบจะบล็อกทุกคนรวมถึงตัวคุณเองด้วย

Iva รองรับผู้ให้บริการโมเดลรายใดบ้าง?

MODEL_PROVIDER รองรับ opencode (OpenCode Go), ollama (Ollama Cloud), openrouter และ codex โดย OpenRouter จะรองรับ vendor slug เช่น anthropic/claude-sonnet-4.5 และมีตัวเลือกโมเดลให้เลือกมากที่สุด ส่วน codex จะเข้าสู่ระบบด้วยการสมัครสมาชิก ChatGPT ที่มีอยู่ผ่าน iva login โดยไม่ต้องใช้ API key ให้ตั้งค่าผู้ให้บริการและกำหนด context window ให้ตรงกับขนาดจริงของโมเดล จากนั้นให้รัน iva restart เนื่องจากโมเดลจะถูกอ่านเพียงครั้งเดียวเมื่อเริ่มต้นกระบวนการทำงาน