- หน้าแรก
- คอนเทนเนอร์สำหรับพัฒนา
- การตั้งค่า
การตั้งค่า
การตั้งค่าทั้งหมดอยู่ในไฟล์ .env ที่รากของโปรเจกต์ ไฟล์นี้ถูก gitignore — จะไม่ถูก commit เข้าไป
ตัวแปรสภาพแวดล้อม
หัวข้อที่มีชื่อว่า “ตัวแปรสภาพแวดล้อม”ผู้ให้บริการ AI
หัวข้อที่มีชื่อว่า “ผู้ให้บริการ AI”คอนเทนเนอร์รองรับสองโหมดการยืนยันตัวตนที่ใช้ร่วมกันไม่ได้ (เรียงตามลำดับความสำคัญ):
- LiteLLM proxy — ตั้งค่า
LITELLM_BASE_URLและLITELLM_API_KEYเพื่อส่งต่อผ่าน LiteLLM proxy (ดูด้านล่าง) - โหมด OAuth — ตั้งค่า
CLAUDE_CODE_OAUTH_TOKENเท่านั้น (ดูด้านล่าง)
อย่ารวมโหมดเข้าด้วยกัน — ใช้เพียงโหมดเดียว
Claude Max (OAuth)
หัวข้อที่มีชื่อว่า “Claude Max (OAuth)”| ตัวแปร | คำอธิบาย | ตัวอย่าง |
|---|---|---|
CLAUDE_CODE_OAUTH_TOKEN | โทเค็น OAuth จากการสมัครสมาชิก Claude Max | sk-ant-oat01-... |
เมื่อตั้งค่าแล้ว Claude Code จะยืนยันตัวตนกับ Anthropic โดยตรงผ่าน OAuth — ไม่ต้องใช้ API key หรือ proxy รับโทเค็นของคุณจากการตั้งค่า Claude Code หรือ คอนโซล Anthropic
LiteLLM Proxy
หัวข้อที่มีชื่อว่า “LiteLLM Proxy”หาก LiteLLM (หรือตัวอื่น) proxy ของคุณรองรับ Anthropic Messages API แบบเนทีฟอยู่แล้ว — รวมถึง web_search, สตรีมมิง, และการใช้เครื่องมือ — ให้ตั้งค่า LITELLM_BASE_URL เป็นโดเมนของ proxy คอนเทนเนอร์จะสร้าง URL เฉพาะของผู้ให้บริการโดยอัตโนมัติ:
- Anthropic endpoint →
${LITELLM_BASE_URL}/anthropic(ใช้โดย Claude Code) - OpenAI-compatible endpoint →
${LITELLM_BASE_URL}/openai/v1
| ตัวแปร | คำอธิบาย | ตัวอย่าง |
|---|---|---|
LITELLM_BASE_URL | โดเมนของ LiteLLM proxy ของคุณ (ไม่ต้องมี path suffix) | https://litellm.example.com |
LITELLM_API_KEY | API key สำหรับการยืนยันตัวตนกับ proxy | your-api-key หรือค่าเริ่มต้นเป็น litellm-proxy |
ผู้ใช้ต้องตั้งค่าเฉพาะโดเมนเท่านั้น — path suffix ของผู้ให้บริการจะถูกเพิ่มโดยอัตโนมัติ
ขณะรันไทม์ entrypoint จะสร้าง ANTHROPIC_API_KEY จาก LITELLM_API_KEY เพื่อให้ Claude Code สามารถใช้ข้อมูลรับรองของ proxy ได้โดยไม่ต้องมีตัวแปรแยกต่างหากสำหรับผู้ใช้
ชื่อโมเดลไม่ถูกแมปใหม่ในโหมดนี้ Claude Code ส่งตัวระบุโมเดลมาตรฐาน (เช่น claude-sonnet-4-6) และ LiteLLM จะส่งต่อไปยังแบ็กเอนด์ที่คุณตั้งค่าไว้
การตรวจสอบใบรับรอง TLS
หัวข้อที่มีชื่อว่า “การตรวจสอบใบรับรอง TLS”โดยค่าเริ่มต้น Node.js จะตรวจสอบใบรับรอง TLS สำหรับการเชื่อมต่อ HTTPS ทั้งหมด หากผู้ให้บริการ API ต้นทางของคุณใช้ใบรับรองแบบ self-signed (พบได้บ่อยกับ Open WebUI หรือ LiteLLM proxy ภายใน) คุณสามารถปิดการตรวจสอบได้โดยเพิ่มสิ่งนี้ในไฟล์ .env:
NODE_TLS_REJECT_UNAUTHORIZED=0สิ่งนี้ไม่แนะนำสำหรับการใช้งานจริง ตั้งค่านี้เฉพาะเมื่อคุณเชื่อถือเส้นทางเครือข่ายระหว่างคอนเทนเนอร์และ API endpoint ของคุณ
AI Coding Agents
หัวข้อที่มีชื่อว่า “AI Coding Agents”คอนเทนเนอร์มี AI coding agents หลายตัวนอกเหนือจาก Claude Code:
| Agent | คำสั่ง | ผู้ให้บริการ |
|---|---|---|
| Codex | codex | OpenAI-compatible |
| Pi | pi | หลายผู้ให้บริการ (ตั้งค่าขณะรันไทม์) |
| Oh-My-Pi | omp | หลายผู้ให้บริการ (ตั้งค่าขณะรันไทม์) |
Pi และ Oh-My-Pi ถูกติดตั้งเป็น global npm packages Codex เป็นไบนารีแบบสแตนด์อโลนที่อัปเดตตัวเองขณะรันไทม์
จอแสดงผลระยะไกล (noVNC)
หัวข้อที่มีชื่อว่า “จอแสดงผลระยะไกล (noVNC)”คอนเทนเนอร์รัน virtual display stack สำหรับการดูและโต้ตอบกับเบราว์เซอร์แบบมีหน้าจอ ดู จอแสดงผลระยะไกล (noVNC) สำหรับคำแนะนำการเชื่อมต่อและตัวแปรสภาพแวดล้อม (ENABLE_VNC, VNC_RESOLUTION, DISPLAY, NOVNC_HOST_PORT)
Chrome DevTools MCP
หัวข้อที่มีชื่อว่า “Chrome DevTools MCP”คอนเทนเนอร์มี Chrome DevTools MCP server ที่ตั้งค่าไว้ล่วงหน้าสำหรับการทำงานอัตโนมัติของเบราว์เซอร์แบบ headless Claude Code สามารถนำทางเว็บเพจ ถ่ายภาพหน้าจอ และตรวจสอบ DOM ได้โดยไม่ต้องตั้งค่าเพิ่มเติม ดู Chrome DevTools MCP สำหรับรายละเอียด
| ตัวแปร | คำอธิบาย | วิธีตั้งค่า |
|---|---|---|
GIT_AUTHOR_NAME | ชื่อสำหรับ git commits | git config user.name |
GIT_AUTHOR_EMAIL | อีเมลสำหรับ git commits | git config user.email |
หาก git ถูกตั้งค่าไว้บนเครื่องโฮสต์ของคุณ ให้ดึงค่าทั้งสองโดยอัตโนมัติ:
echo "GIT_AUTHOR_EMAIL=$(git config user.email)" >> .envecho "GIT_AUTHOR_NAME=\"$(git config user.name)\"" >> .env| ตัวแปร | คำอธิบาย | วิธีตั้งค่า |
|---|---|---|
SSH_PRIVATE_KEY | Private key ที่เข้ารหัส Base64 | base64 < ~/.ssh/id_ed25519 |
GitHub CLI
หัวข้อที่มีชื่อว่า “GitHub CLI”| ตัวแปร | คำอธิบาย | วิธีตั้งค่า |
|---|---|---|
GH_TOKEN | GitHub personal access token สำหรับ gh CLI และ HTTPS git | gh auth token (หากติดตั้ง gh ไว้ในเครื่อง) |
เมื่อตั้งค่า GH_TOKEN ในไฟล์ .env แล้ว gh CLI จะยืนยันตัวตนโดยอัตโนมัติ — ไม่ต้องรัน gh auth login entrypoint ยังรัน gh auth setup-git ซึ่งตั้งค่า git credential helper เพื่อให้ HTTPS git clone และ git push ทำงานได้โดยไม่ต้องใช้ SSH keys
หากติดตั้งและยืนยันตัวตน gh ไว้บนเครื่องโฮสต์แล้ว ให้ดึงโทเค็นโดยตรง:
echo "GH_TOKEN=$(gh auth token)" >> .envมิฉะนั้น สร้าง personal access token และเพิ่มด้วยตนเอง ทั้ง fine-grained tokens (แนะนำ) และ classic tokens ใช้งานได้ Fine-grained tokens ช่วยให้คุณจำกัดการเข้าถึงเฉพาะ repositories ที่ระบุ Classic tokens ต้องการ scope repo สำหรับการเข้าถึง private repository
เพื่อตรวจสอบการยืนยันตัวตนภายในคอนเทนเนอร์:
gh auth statusวิธีการติดตั้งเครื่องมือ
หัวข้อที่มีชื่อว่า “วิธีการติดตั้งเครื่องมือ”ทุก language runtime, CLI, และเครื่องมือถูกติดตั้งโดยตรงใน Dockerfile ในขั้นตอน build ของอิมเมจ อิมเมจที่ build ไว้ล่วงหน้าถูกเผยแพร่ไปที่ ghcr.io/f5-sales-demo/devcontainer:latest ทุกครั้งที่ push ไปยัง main ดังนั้นผู้ใช้ส่วนใหญ่ไม่จำเป็นต้อง build เอง
การรัน docker compose up -d จะดึงอิมเมจที่ build ไว้ล่วงหน้าโดยอัตโนมัติ หากต้องการ build เองหลังจากปรับแต่ง Dockerfile ให้ระบุ build file อย่างชัดเจน:
docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --buildดู การพัฒนาในเครื่อง สำหรับรายละเอียด
การรัน podman-compose up -d จะดึงอิมเมจที่ build ไว้ล่วงหน้าโดยอัตโนมัติ หากต้องการ build เองหลังจากปรับแต่ง Dockerfile ให้ระบุ build file อย่างชัดเจน:
podman-compose -f docker-compose.yml -f docker-compose.build.yml up -d --buildดู การพัฒนาในเครื่อง สำหรับรายละเอียด
Dockerfile ใช้ two-stage build ที่ปรับให้เหมาะสมสำหรับ Docker layer caching ดู การพัฒนาในเครื่อง — สถาปัตยกรรม Two-Stage Build สำหรับรายละเอียดเต็มของ layer และรายละเอียด build cache
การรับรู้เครื่องมือของ Claude Code
หัวข้อที่มีชื่อว่า “การรับรู้เครื่องมือของ Claude Code”คอนเทนเนอร์มีการตั้งค่าที่ฝังไว้ล่วงหน้าเพื่อป้องกันไม่ให้ Claude Code สับสนชื่อเครื่องมือ การรับรู้เครื่องมือถูกติดตั้งที่ระดับหน่วยความจำสองระดับเพื่อการป้องกันเชิงลึก:
- นโยบายที่จัดการ (
/etc/claude-code/CLAUDE.md) — ติดตั้งขณะ Docker build เป็นระดับที่มีความสำคัญสูงสุดในลำดับชั้นหน่วยความจำของ Claude Code และจะถูกโหลดเสมอ แม้ว่าจะมีไฟล์CLAUDE.mdของโปรเจกต์ขนาดใหญ่อยู่ใน working directory - หน่วยความจำผู้ใช้ (
~/.claude/CLAUDE.md) — สร้างโดย entrypoint ในการเริ่มต้นครั้งแรก ให้ชั้นสำรองและสำเนาที่มองเห็นได้และปรับแต่งได้สำหรับผู้ใช้
ลำดับความสำคัญของระดับหน่วยความจำ
หัวข้อที่มีชื่อว่า “ลำดับความสำคัญของระดับหน่วยความจำ”Claude Code โหลดคำสั่งจากหลายระดับหน่วยความจำ (จากสูงสุดไปต่ำสุด):
- นโยบายที่จัดการ (
/etc/claude-code/) — โหลดเสมอ ไม่สามารถยกเว้นได้ - หน่วยความจำโปรเจกต์ (
./CLAUDE.md) — โหลดตามไดเรกทอรีของโปรเจกต์ - หน่วยความจำผู้ใช้ (
~/.claude/CLAUDE.md) — โหลดแบบ global สำหรับทุกเซสชัน - หน่วยความจำท้องถิ่น (
./CLAUDE.local.md) — การปรับแต่งส่วนตัวสำหรับแต่ละโปรเจกต์
หากไม่มีระดับนโยบายที่จัดการ การรับรู้เครื่องมือในหน่วยความจำผู้ใช้อาจถูกลดความสำคัญเมื่อแข่งกับ CLAUDE.md ระดับโปรเจกต์ขนาดใหญ่ ทำให้ Claude สูญเสียการรับรู้ชื่อเครื่องมือแบบ PascalCase ระดับนโยบายที่จัดการรับประกันว่าการรับรู้เครื่องมือจะถูกโหลดที่ความสำคัญสูงสุดเสมอ
การทดสอบตนเอง
หัวข้อที่มีชื่อว่า “การทดสอบตนเอง”รันการทดสอบตนเองที่ติดตั้งมาเพื่อตรวจสอบการตั้งค่า:
claude-self-testสิ่งนี้ตรวจสอบว่าไฟล์การตั้งค่าทั้งหมดอยู่ในตำแหน่งที่ถูกต้องและมีการอ้างอิงเครื่องมือตามที่คาดไว้
การเพิ่มเครื่องมือ
หัวข้อที่มีชื่อว่า “การเพิ่มเครื่องมือ”หากต้องการเพิ่มเครื่องมือในอิมเมจ ให้แก้ไข Dockerfile และ build เองในเครื่อง ดู การพัฒนาในเครื่อง — การเพิ่มเครื่องมือ สำหรับคำแนะนำเกี่ยวกับการเพิ่ม APT packages, npm tools, pip tools, และการดาวน์โหลดไบนารี
ส่วนขยาย VS Code
หัวข้อที่มีชื่อว่า “ส่วนขยาย VS Code”ส่วนขยายถูกตั้งค่าใน .devcontainer/devcontainer.json ภายใต้ customizations.vscode.extensions และถูกติดตั้งโดยอัตโนมัติเมื่อเปิดใน VS Code
การคงอยู่ของข้อมูล
หัวข้อที่มีชื่อว่า “การคงอยู่ของข้อมูล”ข้อมูลทั้งหมดอยู่ใน named volumes — ไม่มีการ mount ไดเรกทอรีของโฮสต์:
| Volume | จุด Mount | เนื้อหา |
|---|---|---|
workspace | /workspace | repositories ที่โคลนมาและไฟล์โปรเจกต์ของคุณ |
home | /home/vscode | ประวัติเชลล์, การตั้งค่าเครื่องมือ, แคช, SSH keys |
ทั้งสองคงอยู่ตลอดการรีสตาร์ทและ rebuild ของคอนเทนเนอร์ รัน docker compose pull เพื่อดึงอิมเมจที่ build ไว้ล่วงหน้าล่าสุดก่อนรีสตาร์ท
| การดำเนินการ | ข้อมูล |
|---|---|
docker compose down | คงอยู่ |
docker compose down -v | ถูกลบ |
ทั้งสองคงอยู่ตลอดการรีสตาร์ทและ rebuild ของคอนเทนเนอร์ รัน podman-compose pull เพื่อดึงอิมเมจที่ build ไว้ล่วงหน้าล่าสุดก่อนรีสตาร์ท
| การดำเนินการ | ข้อมูล |
|---|---|
podman-compose down | คงอยู่ |
podman-compose down -v | ถูกลบ |
การแมปพอร์ต
หัวข้อที่มีชื่อว่า “การแมปพอร์ต”| โฮสต์ | คอนเทนเนอร์ | บริการ |
|---|---|---|
127.0.0.1:${NOVNC_HOST_PORT:-6080} | 6080 | จอแสดงผลระยะไกล noVNC (localhost เท่านั้น, แทนที่ด้วย NOVNC_HOST_PORT) |
พอร์ตถูกผูกกับ 127.0.0.1 เพื่อให้เข้าถึงได้จากเครื่องของคุณเท่านั้น ไม่ใช่จากเครือข่าย