Open WebUI ที่ chat.thisaan.com — 2026-10-27

เอกสาร / สรุปงาน · 2026-10-27 · /opt/data/docs/2026-10-27-openwebui.md

ของที่รันอยู่

อย่างค่า
URLhttps://chat.thisaan.com (TLS อัตโนมัติผ่าน Caddy on-demand)
imageghcr.io/open-webui/open-webui:main
containeropenwebui · restart=unless-stopped · port 127.0.0.1:3010 → 8080
ข้อมูล/opt/openwebui/data (bind mount)
env/opt/openwebui/openwebui.env (600)
compose/opt/openwebui/docker-compose.yml
โมเดลhermes-agent → ผ่าน https://hermes.thisaan.com/agent-api/v1 (bridge)

ทำไมต้องมี bridge

Open WebUI พูดภาษา OpenAI แต่ Hermes ไม่มี endpoint แบบนั้นในตัว → ใช้ bridge

(/opt/data/apps/hermes-bridge/bridge.py) ที่ห่อ hermes -z / hermes --resume

ทำให้ทุกบทสนทนาลง state.db เดียวกับ dashboard และ /ui/ → คุยต่อกันได้

ตรวจว่าเดินสายถูก (ไม่ต้องล็อกอิน)

```bash

ssh thisaan 'docker exec openwebui sh -lc "python - <<PY

import os,urllib.request

u=os.environ[\"OPENAI_API_BASE_URL\"]+\"/models\"

r=urllib.request.Request(u, headers={\"Authorization\":\"Bearer \"+os.environ[\"OPENAI_API_KEY\"]})

print(urllib.request.urlopen(r, timeout=15).read().decode()[:200])

PY"'

```

ผลที่วัดได้: status 200 · {"data":[{"id":"hermes-agent",...}]}

⚠️ บทเรียนสำคัญ: เปิด signup ทิ้งไว้ = บอทสมัครเป็น admin ใน 2-3 นาที

08:44 เปิด signup → 08:48 มีบัญชี scan-…@blockaid-scan.invalid (role admin) เข้ามาสมัครเอง

ตรวจแล้ว chats: 0 · messages: 0 (บอทไม่ได้ใช้ agent) แล้วลบทิ้ง + ปิด signup

กฎ: ห้ามเปิด ENABLE_SIGNUP=true ค้างไว้บนอินเทอร์เน็ตสาธารณะ

ถ้าต้องสร้างบัญชี ให้เปิดเป็นหน้าต่างสั้น ๆ แล้วปิดทันที หรือจำกัด IP ที่ระดับ Caddy

ครั้งแรก: สร้างบัญชี admin (แบบมีหน้าต่างควบคุม)

  1. ให้ผู้ใช้พร้อมที่หน้า https://chat.thisaan.com/auth
  2. เปิด ENABLE_SIGNUP=true + docker compose up -d (recreate ~40 วิ)
  3. ผู้ใช้กด Sign up ทันที (email ปลอม เช่น me@local ก็ใช้ได้ — ไม่มีการยืนยัน)
  4. ปิด ENABLE_SIGNUP=false + docker compose up -d ทันทีที่สมัครเสร็จ

คำสั่งดูแล

```bash

cd /opt/openwebui

docker compose ps

docker compose logs --tail 50 openwebui

docker compose restart openwebui # env เปลี่ยน → docker compose up -d (recreate)

```

ข้อจำกัดที่ต้องรู้

→ startup ครั้งแรก ~90 วิ และต้องมีเน็ตออก

(cd /opt/data/apps/hermes-bridge && nohup python3 bridge.py >> bridge.log 2>&1 &)


อัปเดต 09:00 — เอาแค่ UI ไม่เอา auth ของ Open WebUI

ผู้ใช้ต้องการแค่หน้าแชท ไม่เอาที่มีสมัคร/อีเมล → เปลี่ยนเป็น:

ชั้นตั้งค่า
Open WebUIWEBUI_AUTH=false (ไม่มีหน้าล็อกอิน ไม่มีผู้ใช้ ไม่มีอีเมล) · ENABLE_SIGNUP=false
Caddybasic_auth ที่ chat.thisaan.com (user thisaan) — รหัสอยู่ใน /opt/openwebui/LOGIN.txt (600)
ฟอนต์ไทยself-host: /opt/openwebui/static/fonts/ → Caddy เสิร์ฟ /fonts/*

ผลวัดจริง:

```

ไม่มีรหัส → 401 · ใส่รหัส → 200 (ไม่ต้องล็อกอินซ้ำในแอป)

/api/config → auth: False · signup: False

document.fonts / หน้าจอ → ไทยแสดงผลถูก (ไม่มี ▯)

```

กับดักที่เจอ (สำคัญ)

  1. **/static/fonts/* ของ Open WebUI คืน 404** — แอปไม่เสิร์ฟไฟล์ที่เราเมาท์ไว้ใต้ build/static

→ ต้องให้ Caddy เสิร์ฟเองที่ path /fonts/* (root /opt/openwebui/static)

  1. bind mount ไฟล์เดียว + sed -i = container ยังเห็นไฟล์เก่า (sed สร้าง inode ใหม่)

→ ใช้ python เขียนทับ (inode เดิม) หรือ docker compose restart

  1. ไฟล์ custom.css ของ Open WebUI เป็น directory ไม่ใช่ไฟล์ → เมาท์ทับไม่ได้