AI workspace เชื่อมต่อ Claude CLI และ Codex CLI — เข้าสู่ระบบเพื่อใช้งาน
เปิดแอป Authenticator แล้วกรอกรหัส 6 หลัก
โปรดเช็คที่ email ของคุณ
รหัส OTP 6 หลักถูกส่งไปแล้ว
Version และประวัติการอัปเดต
บัญชีนี้ใช้ temporary password อยู่ ตั้งรหัสใหม่แล้วใช้งานต่อได้ทันที
สแกน QR code ด้วย Google Authenticator, Authy หรือแอปที่รองรับ TOTP
หรือกรอก secret key นี้ในแอปด้วยตนเอง
conversation / file
-
พร้อมแก้ไข
conversation / file
conversation / draft
-
พร้อมแก้ไข
เลือกเพื่อ append หรือสร้างจากข้อความที่เลือกไว้
conversation / file
เปิดแชทล่าสุดหรือสร้างรายการใหม่
กด ☰ เพื่อเปิดเมนูทั้งหมด
ตั้งเวลาให้ AI ทำงานใน conversation ที่เลือก พร้อมติดตามผลลัพธ์จากที่เดียว
จัดการบัญชี สิทธิ์เข้าใช้งาน และ session ของผู้ใช้
| User | Role | Status | Login | Sessions | Last Login | Actions |
|---|
รหัส 6 หลักถูกส่งไปยังอีเมลของคุณแล้ว
Claude และ Codex ใช้บัญชีของคุณเอง — ไม่ใช้บัญชีร่วมของเซิร์ฟเวอร์
2FA ใช้แอป Authenticator (Google Authenticator, Authy, ฯลฯ) เพื่อยืนยันตอน login
WORKSPACE / INFRASTRUCTURE
ทรัพยากรเครื่อง การแจ้งเตือน และพื้นที่จัดเก็บข้อมูล
CPU / RAM / Disk · เส้นทึบค่าเฉลี่ย เส้นประค่าสูงสุด · ชี้กราฟเพื่อดูค่า
พื้นที่ filesystem ที่เก็บข้อมูล · รวมพื้นที่สำรองของ filesystem ในการประเมินความเสี่ยง
02 / CONTAINER OBSERVABILITY
ทรัพยากรแต่ละ service จาก docker stats พร้อมประวัติข้ามการ recreate container
CPU 100% = 1 core จึงเกิน 100% ได้ Memory ใช้ค่าจาก Docker CLI (Linux หัก cache) Network/Block I/O ในตารางเป็นยอดสะสม; กราฟเป็นอัตรา B/s จาก delta ทุก 30 วินาที ค่าจาก CLI มีการปัดเศษ ช่วงแรก/ขาดข้อมูล/รีสตาร์ตไม่สร้างอัตราปลอม Docker stats reference ↗
03 / SCHEDULED WORKLOADS
รู้ว่างานไหนรันอะไร แยกงานกำลังรันออกจากบันทึกเริ่มงาน
200 events ล่าสุดภายในช่วงเวลาและตัวกรองที่เลือก คำสั่งที่มีเก็บจะแสดงโดยปิดบัง credentials ส่วน event รุ่นเดิมที่มีเฉพาะ hash จะจับคู่จาก inventory ถ้าไม่ได้จะระบุว่าไม่ทราบ ไม่เก็บ stdout ของงาน
1 telemetry message / 30 วินาที / เครื่อง = 2,880 messages ต่อวัน
Telemetry และ Docker/cron events ใช้ขนาด JSON UTF-8 ที่วัดจริงรวม newline × ตัวคูณเผื่อพื้นที่ ค่าแชตใช้พื้นที่ table + index ที่จัดสรรจริงเฉลี่ยต่อข้อความ (user/assistant แยกคนละ message) ไม่รวมไฟล์แนบ, memory, backups และ Docker stdout ไม่ใช่ราคา token/API
จำนวนเครื่องใช้สำหรับวางแผนเท่านั้น ตัวเก็บข้อมูลนี้ monitor เครื่องที่รัน workspace หนึ่งเครื่อง
เก็บต่อเนื่องฝั่ง server แม้ปิดเบราว์เซอร์
ลบเฉพาะ telemetry / ประวัติเตือนที่เก่าเกิน retention ทุก 30 วินาที ข้อมูลละเอียดและสรุปรายชั่วโมงมี retention แยกกัน ค่าเริ่มต้น 30 / 365 วัน การลดจำนวนวันจะลบข้อมูลเก่าทันที ข้อความแชตและ security logs คงอยู่ การลบแถวทำให้ SQLite นำพื้นที่กลับมาใช้ซ้ำ ขนาดไฟล์อาจยังเท่าเดิม
บันทึกเมื่อเปลี่ยนระดับ รวมเหตุการณ์กลับสู่ปกติ · แสดงในเว็บ ไม่มีการส่งอีเมล
คำสั่งสำหรับผู้ดูแล รันบน host จาก directory ของโปรเจกต์ ไม่มีปุ่มสั่ง shell จากหน้าเว็บ
อ่าน /proc/stat แบบ delta เพื่อวัด CPU, ใช้ MemAvailable สำหรับ RAM และ statfs ของ DATA_DIR สำหรับ disk เก็บลง data/monitor.db ทุก 30 วินาที พร้อมลบแถวเก่าอัตโนมัติ ใช้ SQLite WAL และ reused pages
df -h ./data free -h cat /proc/loadavg # records/day: 86400 / 30 = 2880 # bytes/day = avg UTF-8 bytes × 2880 # budget = bytes/day × days × hosts × overhead
systemd timer เก็บ Docker และ cron ทุก 30 วินาทีด้วย user ของ workspace แล้วเขียน JSON แบบ atomic เว็บอ่านผ่าน data volume โดยไม่ mount Docker socket ให้เว็บ
sudo bash scripts/install-monitor.sh ubuntu systemctl status gus-workspace-monitor.timer journalctl -u gus-workspace-monitor.service -n 50 python3 scripts/collect-host-status.py \ --output data/host-status.json # Stop collector: # sudo systemctl disable --now gus-workspace-monitor.timer
อ่าน docker ps / inspect / stats ทุก 30 วินาที เก็บ raw ตาม retention และสรุปค่าเฉลี่ยกับ peak รายชั่วโมงสูงสุด 365 วัน ส่วน cron แสดงคำสั่งจาก user crontab, system cron, /proc และ journal โดยปิดบัง credentials งานที่ไม่ถูกครอบจะไม่ทราบ exit code
docker compose -f docker-compose.yml \ -f docker-compose.prod.yml ps docker stats --no-stream systemctl status cron crontab -l journalctl -u cron --since '1 hour ago'
ครอบคำสั่งที่ต้องการด้วย wrapper แล้วใช้ label ที่ไม่มีข้อมูลลับ ตัวอย่างงานทดสอบสำเร็จ ไม่แก้ crontab เดิมให้อัตโนมัติ stdout/stderr ยังส่งไปปลายทางเดิม
python3 scripts/monitor-cron.py \ --label smoke-test -- /usr/bin/true # Example crontab (absolute paths): # */5 * * * * /usr/bin/python3 /path/to/repo/scripts/monitor-cron.py --label backup -- /path/to/backup.sh # running → succeeded / failed # Wrapper disappeared: interrupted (exit unknown)
ทดสอบก่อน build แล้วเปิดเฉพาะ app service จากนั้นตรวจ HTTPS และ commit/push เฉพาะไฟล์ที่เกี่ยวข้อง ห้าม commit data, .env หรือ certificates
npm test docker compose -f docker-compose.yml \ -f docker-compose.prod.yml config --quiet docker compose -f docker-compose.yml \ -f docker-compose.prod.yml build app docker compose -f docker-compose.yml \ -f docker-compose.prod.yml up -d --no-deps app curl -I https://ai-workspace.thanakiat.com/monitor git diff --check # Stage only relevant files, then commit git push origin main
ตัวคำนวณไม่รวม uploads, backups, WAL peak, Docker stdout, cron stdout และ snapshot/spool ของ host collector ควรตั้ง Docker log rotation แยก การลบแถว telemetry คืนพื้นที่ให้ SQLite ใช้ซ้ำ ไม่ย่อไฟล์ทันที
du -sh data docker system df journalctl --disk-usage # app.db: chat/security logs (no retention deletion) # monitor.db: telemetry/disk/service events # host-status.json: latest snapshot (overwritten)
| เวลา | Event | IP | Session | User Agent |
|---|