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

การตั้งค่า

การตั้งค่าทั้งหมดอยู่ในไฟล์ .env ที่รากของโปรเจกต์ ไฟล์นี้ถูก gitignore — จะไม่ถูก commit เข้าไป

คอนเทนเนอร์รองรับสองโหมดการยืนยันตัวตนที่ใช้ร่วมกันไม่ได้ (เรียงตามลำดับความสำคัญ):

  • LiteLLM proxy — ตั้งค่า LITELLM_BASE_URL และ LITELLM_API_KEY เพื่อส่งต่อผ่าน LiteLLM proxy (ดูด้านล่าง)
  • โหมด OAuth — ตั้งค่า CLAUDE_CODE_OAUTH_TOKEN เท่านั้น (ดูด้านล่าง)

อย่ารวมโหมดเข้าด้วยกัน — ใช้เพียงโหมดเดียว

ตัวแปรคำอธิบายตัวอย่าง
CLAUDE_CODE_OAUTH_TOKENโทเค็น OAuth จากการสมัครสมาชิก Claude Maxsk-ant-oat01-...

เมื่อตั้งค่าแล้ว Claude Code จะยืนยันตัวตนกับ Anthropic โดยตรงผ่าน OAuth — ไม่ต้องใช้ API key หรือ proxy รับโทเค็นของคุณจากการตั้งค่า Claude Code หรือ คอนโซล Anthropic

หาก 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_KEYAPI key สำหรับการยืนยันตัวตนกับ proxyyour-api-key หรือค่าเริ่มต้นเป็น litellm-proxy

ผู้ใช้ต้องตั้งค่าเฉพาะโดเมนเท่านั้น — path suffix ของผู้ให้บริการจะถูกเพิ่มโดยอัตโนมัติ ขณะรันไทม์ entrypoint จะสร้าง ANTHROPIC_API_KEY จาก LITELLM_API_KEY เพื่อให้ Claude Code สามารถใช้ข้อมูลรับรองของ proxy ได้โดยไม่ต้องมีตัวแปรแยกต่างหากสำหรับผู้ใช้

ชื่อโมเดลไม่ถูกแมปใหม่ในโหมดนี้ Claude Code ส่งตัวระบุโมเดลมาตรฐาน (เช่น claude-sonnet-4-6) และ LiteLLM จะส่งต่อไปยังแบ็กเอนด์ที่คุณตั้งค่าไว้

โดยค่าเริ่มต้น Node.js จะตรวจสอบใบรับรอง TLS สำหรับการเชื่อมต่อ HTTPS ทั้งหมด หากผู้ให้บริการ API ต้นทางของคุณใช้ใบรับรองแบบ self-signed (พบได้บ่อยกับ Open WebUI หรือ LiteLLM proxy ภายใน) คุณสามารถปิดการตรวจสอบได้โดยเพิ่มสิ่งนี้ในไฟล์ .env:

NODE_TLS_REJECT_UNAUTHORIZED=0

สิ่งนี้ไม่แนะนำสำหรับการใช้งานจริง ตั้งค่านี้เฉพาะเมื่อคุณเชื่อถือเส้นทางเครือข่ายระหว่างคอนเทนเนอร์และ API endpoint ของคุณ

คอนเทนเนอร์มี AI coding agents หลายตัวนอกเหนือจาก Claude Code:

Agentคำสั่งผู้ให้บริการ
CodexcodexOpenAI-compatible
Pipiหลายผู้ให้บริการ (ตั้งค่าขณะรันไทม์)
Oh-My-Piompหลายผู้ให้บริการ (ตั้งค่าขณะรันไทม์)

Pi และ Oh-My-Pi ถูกติดตั้งเป็น global npm packages Codex เป็นไบนารีแบบสแตนด์อโลนที่อัปเดตตัวเองขณะรันไทม์

คอนเทนเนอร์รัน virtual display stack สำหรับการดูและโต้ตอบกับเบราว์เซอร์แบบมีหน้าจอ ดู จอแสดงผลระยะไกล (noVNC) สำหรับคำแนะนำการเชื่อมต่อและตัวแปรสภาพแวดล้อม (ENABLE_VNC, VNC_RESOLUTION, DISPLAY, NOVNC_HOST_PORT)

คอนเทนเนอร์มี Chrome DevTools MCP server ที่ตั้งค่าไว้ล่วงหน้าสำหรับการทำงานอัตโนมัติของเบราว์เซอร์แบบ headless Claude Code สามารถนำทางเว็บเพจ ถ่ายภาพหน้าจอ และตรวจสอบ DOM ได้โดยไม่ต้องตั้งค่าเพิ่มเติม ดู Chrome DevTools MCP สำหรับรายละเอียด

ตัวแปรคำอธิบายวิธีตั้งค่า
GIT_AUTHOR_NAMEชื่อสำหรับ git commitsgit config user.name
GIT_AUTHOR_EMAILอีเมลสำหรับ git commitsgit config user.email

หาก git ถูกตั้งค่าไว้บนเครื่องโฮสต์ของคุณ ให้ดึงค่าทั้งสองโดยอัตโนมัติ:

Terminal window
echo "GIT_AUTHOR_EMAIL=$(git config user.email)" >> .env
echo "GIT_AUTHOR_NAME=\"$(git config user.name)\"" >> .env
ตัวแปรคำอธิบายวิธีตั้งค่า
SSH_PRIVATE_KEYPrivate key ที่เข้ารหัส Base64base64 < ~/.ssh/id_ed25519
ตัวแปรคำอธิบายวิธีตั้งค่า
GH_TOKENGitHub personal access token สำหรับ gh CLI และ HTTPS gitgh 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 ไว้บนเครื่องโฮสต์แล้ว ให้ดึงโทเค็นโดยตรง:

Terminal window
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

เพื่อตรวจสอบการยืนยันตัวตนภายในคอนเทนเนอร์:

Terminal window
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 อย่างชัดเจน:

Terminal window
docker 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 สับสนชื่อเครื่องมือ การรับรู้เครื่องมือถูกติดตั้งที่ระดับหน่วยความจำสองระดับเพื่อการป้องกันเชิงลึก:

  • นโยบายที่จัดการ (/etc/claude-code/CLAUDE.md) — ติดตั้งขณะ Docker build เป็นระดับที่มีความสำคัญสูงสุดในลำดับชั้นหน่วยความจำของ Claude Code และจะถูกโหลดเสมอ แม้ว่าจะมีไฟล์ CLAUDE.md ของโปรเจกต์ขนาดใหญ่อยู่ใน working directory
  • หน่วยความจำผู้ใช้ (~/.claude/CLAUDE.md) — สร้างโดย entrypoint ในการเริ่มต้นครั้งแรก ให้ชั้นสำรองและสำเนาที่มองเห็นได้และปรับแต่งได้สำหรับผู้ใช้

Claude Code โหลดคำสั่งจากหลายระดับหน่วยความจำ (จากสูงสุดไปต่ำสุด):

  1. นโยบายที่จัดการ (/etc/claude-code/) — โหลดเสมอ ไม่สามารถยกเว้นได้
  2. หน่วยความจำโปรเจกต์ (./CLAUDE.md) — โหลดตามไดเรกทอรีของโปรเจกต์
  3. หน่วยความจำผู้ใช้ (~/.claude/CLAUDE.md) — โหลดแบบ global สำหรับทุกเซสชัน
  4. หน่วยความจำท้องถิ่น (./CLAUDE.local.md) — การปรับแต่งส่วนตัวสำหรับแต่ละโปรเจกต์

หากไม่มีระดับนโยบายที่จัดการ การรับรู้เครื่องมือในหน่วยความจำผู้ใช้อาจถูกลดความสำคัญเมื่อแข่งกับ CLAUDE.md ระดับโปรเจกต์ขนาดใหญ่ ทำให้ Claude สูญเสียการรับรู้ชื่อเครื่องมือแบบ PascalCase ระดับนโยบายที่จัดการรับประกันว่าการรับรู้เครื่องมือจะถูกโหลดที่ความสำคัญสูงสุดเสมอ

รันการทดสอบตนเองที่ติดตั้งมาเพื่อตรวจสอบการตั้งค่า:

Terminal window
claude-self-test

สิ่งนี้ตรวจสอบว่าไฟล์การตั้งค่าทั้งหมดอยู่ในตำแหน่งที่ถูกต้องและมีการอ้างอิงเครื่องมือตามที่คาดไว้

หากต้องการเพิ่มเครื่องมือในอิมเมจ ให้แก้ไข Dockerfile และ build เองในเครื่อง ดู การพัฒนาในเครื่อง — การเพิ่มเครื่องมือ สำหรับคำแนะนำเกี่ยวกับการเพิ่ม APT packages, npm tools, pip tools, และการดาวน์โหลดไบนารี

ส่วนขยายถูกตั้งค่าใน .devcontainer/devcontainer.json ภายใต้ customizations.vscode.extensions และถูกติดตั้งโดยอัตโนมัติเมื่อเปิดใน VS Code

ข้อมูลทั้งหมดอยู่ใน named volumes — ไม่มีการ mount ไดเรกทอรีของโฮสต์:

Volumeจุด Mountเนื้อหา
workspace/workspacerepositories ที่โคลนมาและไฟล์โปรเจกต์ของคุณ
home/home/vscodeประวัติเชลล์, การตั้งค่าเครื่องมือ, แคช, SSH keys

ทั้งสองคงอยู่ตลอดการรีสตาร์ทและ rebuild ของคอนเทนเนอร์ รัน docker compose pull เพื่อดึงอิมเมจที่ build ไว้ล่วงหน้าล่าสุดก่อนรีสตาร์ท

การดำเนินการข้อมูล
docker compose downคงอยู่
docker compose down -vถูกลบ
โฮสต์คอนเทนเนอร์บริการ
127.0.0.1:${NOVNC_HOST_PORT:-6080}6080จอแสดงผลระยะไกล noVNC (localhost เท่านั้น, แทนที่ด้วย NOVNC_HOST_PORT)

พอร์ตถูกผูกกับ 127.0.0.1 เพื่อให้เข้าถึงได้จากเครื่องของคุณเท่านั้น ไม่ใช่จากเครือข่าย