−25%

በWindows ዓመታዊ ክፍያ ላይ፣ እስከ ኦክቶበር 31። ዕቅዶችን ይመልከቱ

EQVPS
ጀምር

ለኮዲንግ ወኪል ቅድመ እይታዎች VPS፦ ወኪሉ የሚገፋው እያንዳንዱ ቅርንጫፍ የራሱን URL ያገኛል

የኮዲንግ ወኪል አንድ ቅርንጫፍ ጨርሶ እንደሚሠራ ይናገራል። ይህን ማረጋገጥ የሚቻልበት ሰርቨር ይስጡት፦ እያንዳንዱ ቅርንጫፍ ወደ ኮንቴይነር ይገነባል እና ከይለፍ ቃል ጀርባ በራሱ HTTPS ንዑስ ዶሜይን ይከፈታል፣ የወኪሉ SSH ቁልፍ ደግሞ ቅድመ እይታዎችን ማስጀመርና ማቆም ብቻ ይችላል።

የኮዲንግ ወኪል ባህሪው እንደሚሠራ ይናገራል። ምናልባትም እውነት ነው። የጻፋቸው ሙከራዎች ያልፋሉ፣ ይህም ሁሉም ከሚፈልገው ያነሰ ነገር ያረጋግጣል። በእርግጥ የሚፈልጉት ተጠቃሚዎች ጋር ከመቅረቡ በፊት በአሳሽ ከፍተው ማየት ነው፣ ያውም ወኪሉ ምርትን እንዲነካ ሳይጠይቁ።

የቅድመ እይታ አካባቢዎች ይህን ይፈታሉ፣ ለዚህም መድረክ አያስፈልግም። የራሱ IPv4 ያለው አንድ VPS፣ Docker፣ Caddy እና ሁለት አጫጭር ስክሪፕቶች ለእያንዳንዱ ቅርንጫፍ እንደ https://feature-login-form.preview.example.com ያለ የራሱን URL ይሰጣሉ፤ ከይለፍ ቃል ጀርባ፣ በእያንዳንዱ push እንደገና ይገነባል። ወኪሉ ቅድመ እይታዎችን ማስጀመርና ማቆም የሚችል፣ ሌላ ምንም የማይችል SSH ቁልፍ ያገኛል።

ይህን በሙከራ ሰርቨር ላይ ገንብተን ከመጻፋችን በፊት ሙሉውን ዑደት አስኬደነዋል፦ መፍጠር፣ መክፈት፣ እንደገና push ማድረግ፣ ማፍረስ፣ ቁልፉን አላግባብ ለመጠቀም መሞከር።

የሚያስፈልግዎ

  • ሕዝባዊ IPv4 ያለው VPS። AI-Agent-IP በአንድ ጊዜ ለበርካታ ቅድመ እይታዎች ቦታ አለው።
  • የwildcard DNS መዝገብ፦ *.preview.example.com → የሰርቨሩ IP።
  • በፖርት 8080 የሚያገለግል Dockerfile ያለው የመተግበሪያዎ ማከማቻ። ማንኛውም ቋንቋ ይሠራል።
  • apt install -y docker.io caddy git የተጫነበት Ubuntu 24.04 ወይም Debian 12/13።

ማከማቻውን ለማንበብ ብቻ በሚያገለግል የdeploy ቁልፍ አንድ ጊዜ ወደ /srv/app ይቅዱት።

ሁለቱ ስክሪፕቶች

/usr/local/bin/preview-up አንድን ቅርንጫፍ ገንብቶ በመስመር ላይ ያወጣዋል፦

#!/usr/bin/env bash
# preview-up <branch> — build the branch and open it at https://<name>.preview.example.com
set -euo pipefail
BRANCH="$1"
NAME=$(printf '%s' "$BRANCH" | tr '[:upper:]' '[:lower:]' | tr -c 'a-z0-9' '-' | sed 's/--*/-/g; s/^-//; s/-$//' | cut -c1-40)
DIR=/srv/previews/$NAME
git -C /srv/app fetch --quiet origin "$BRANCH"
rm -rf "$DIR"; git -C /srv/app worktree prune
git -C /srv/app worktree add --quiet --force --detach "$DIR" FETCH_HEAD
docker build --quiet -t "preview-$NAME" "$DIR" >/dev/null
docker rm -f "preview-$NAME" >/dev/null 2>&1 || true
docker run -d --name "preview-$NAME" --restart unless-stopped --memory 512m -p 127.0.0.1::8080 "preview-$NAME" >/dev/null
PORT=$(docker port "preview-$NAME" 8080/tcp | head -1 | awk -F: '{print $NF}')
cat > "/etc/caddy/previews/$NAME.caddy" <<CADDY
$NAME.preview.example.com {
	import preview_common
	reverse_proxy 127.0.0.1:$PORT
}
CADDY
systemctl reload caddy
echo "https://$NAME.preview.example.com"

/usr/local/bin/preview-down ያስወግደዋል፦

#!/usr/bin/env bash
# preview-down <branch> — remove the branch preview
set -euo pipefail
NAME=$(printf '%s' "$1" | tr '[:upper:]' '[:lower:]' | tr -c 'a-z0-9' '-' | sed 's/--*/-/g; s/^-//; s/-$//' | cut -c1-40)
docker rm -f "preview-$NAME" >/dev/null 2>&1 || true
docker image rm "preview-$NAME" >/dev/null 2>&1 || true
rm -f "/etc/caddy/previews/$NAME.caddy"; rm -rf "/srv/previews/$NAME"; git -C /srv/app worktree prune
systemctl reload caddy

እዚያ ውስጥ ያሉ አንዳንድ ምርጫዎች ሆን ተብለው የተደረጉ ናቸው። ኮንቴይነሮቹ የሚታተሙት በ127.0.0.1 ላይ በዘፈቀደ ፖርት ብቻ ነው፣ ስለዚህ ከCaddy በስተቀር ምንም አይደርስባቸውም። ይህ አስፈላጊ ነው፣ ምክንያቱም Docker የሚያትማቸው ፖርቶች ufwን ያልፋሉ። እያንዳንዱ ቅድመ እይታ 512 MB የማህደረ ትውስታ ገደብ አለው፣ ስለዚህ ከቁጥጥር የወጣ አንድ ቅርንጫፍ ሌሎቹን አይጥልም። ያንኑ ቅርንጫፍ እንደገና ማስኬድ በቦታው እንደገና ይገነባዋል፦ push፣ up ማስኬድ፣ ማደስ።

Caddy፦ ለእያንዳንዱ ቅድመ እይታ አንድ ፋይል፣ ለሁሉም አንድ የይለፍ ቃል

mkdir -p /etc/caddy/previews /srv/previews
chmod +x /usr/local/bin/preview-up /usr/local/bin/preview-down
caddy hash-password --plaintext 'choose-a-review-password'

hashን በ/etc/caddy/Caddyfile ውስጥ ያስገቡ፦

(preview_common) {
	basicauth {
		reviewer PASTE-THE-HASH-HERE
	}
}
import /etc/caddy/previews/*.caddy

ከዚያ systemctl reload caddy። አሁን እያንዳንዱ ቅድመ እይታ ከአንድ የመግቢያ ጀርባ ነው፣ ስለዚህ የስሕተት ማረሚያ ውጤት ያለው ግማሽ የተጠናቀቀ ቅርንጫፍ በክፍት ኢንተርኔት ላይ አይቀመጥም። በአዳዲስ የCaddy ስሪቶች ይህ መመሪያ basic_auth ተብሎም ይጻፋል፤ basicauth በሁለቱም አሁንም ይሠራል።

የወኪሉ ቁልፍ፦ up እና down፣ ሌላ ምንም

ወኪሉ ቅድመ እይታዎችን ማስነሳት ነው የሚያስፈልገው፣ ሰርቨሩን መያዝ አይደለም። deploy ተጠቃሚና በትክክል ሁለት ትዕዛዞችን የሚቀበል የበር ስክሪፕት ይፍጠሩ፦

#!/usr/bin/env bash
# /usr/local/bin/preview-gate — the only thing the agent's key may run
set -euo pipefail
read -r ACTION BRANCH EXTRA <<< "${SSH_ORIGINAL_COMMAND:-}"
[[ -z "${EXTRA:-}" && "${BRANCH:-}" =~ ^[A-Za-z0-9][A-Za-z0-9._/-]{0,99}$ && "$BRANCH" != *..* ]] || { echo "usage: up|down <branch>" >&2; exit 2; }
case "$ACTION" in
  up)   exec sudo /usr/local/bin/preview-up "$BRANCH" ;;
  down) exec sudo /usr/local/bin/preview-down "$BRANCH" ;;
  *)    echo "usage: up|down <branch>" >&2; exit 2 ;;
esac
useradd -m -s /bin/bash deploy
echo 'deploy ALL=(root) NOPASSWD: /usr/local/bin/preview-up, /usr/local/bin/preview-down' > /etc/sudoers.d/preview
chmod 440 /etc/sudoers.d/preview && visudo -cf /etc/sudoers.d/preview
chmod 755 /usr/local/bin/preview-gate

በ/home/deploy/.ssh/authorized_keys ውስጥ የወኪሉን ሕዝባዊ ቁልፍ ከዚያ ስክሪፕት ጋር ያስሩ፦

restrict,command="/usr/local/bin/preview-gate" ssh-ed25519 AAAA... coding-agent

ወኪሉ ከሚሠራበት ማሽን፦

ssh deploy@preview.example.com up feature/login-form
# https://feature-login-form.preview.example.com
ssh deploy@preview.example.com down feature/login-form

በሙከራችን up ቅርንጫፉን ገንብቶ አሳተመ፣ ከአዲስ commit በኋላ ሁለተኛው up አዲሱን ስሪት አቀረበ፣ down ደግሞ ኮንቴይነሩንና ጣቢያውን አስወገደ። በዚያ ቁልፍ cat /etc/shadow፣ up x; id፣ እንደ -x ወይም a/../b ያሉ የቅርንጫፍ ስሞች ወይም በይነተገናኝ መግቢያ የተደረጉ ሙከራዎች ሁሉ ያገኙት usage: up|down <branch> ብቻ ነው። የቅርንጫፍ ስም በፊደል ወይም በአሃዝ መጀመር አለበት፣ .. ሊይዝም አይችልም።

ከወኪሉ ጋር ማገናኘት

በClaude Code ወይም በCodex፣ በፕሮጀክቱ የመመሪያ ፋይል ውስጥ አንድ መስመር በቂ ነው፦

ቅርንጫፍ push ካደረግክ በኋላ ssh deploy@preview.example.com up <branch> አስኪድና የታተመውን URL በማጠቃለያህ ውስጥ አስገባ። ቅርንጫፉ ሲዋሃድ ወይም ሲተው down አስኪድ።

CIዎ አስቀድሞ በእያንዳንዱ push የሚሠራ ከሆነ፣ ያንኑ ትዕዛዝ ከዚያ ይጥሩ፣ ቁልፉንም ከወኪሉ አካባቢ ሙሉ በሙሉ ያርቁ። ይህ ይበልጥ ጥብቅ አማራጭ ነው፣ ከግል ፕሮጀክት ላለፈ ማንኛውም ነገር እኛ ይህን እንመርጣለን።

መከታተል ያለብዎ

  • ዲስክ። እያንዳንዱ ግንባታ የምስል ንብርብሮችን ይተዋል። ሳምንታዊ cron በdocker image prune -f ይህን ይቆጣጠራል፤ down የቅድመ እይታውን የራሱን ምስል አስቀድሞ ይሰርዛል።
  • ማንም የማይዘጋቸው ቅርንጫፎች። ወኪሎች ከሰዎች ይበልጥ ብዙ ቅርንጫፎችን ይከፍታሉ። ከአንድ ሳምንት በላይ የቆዩ preview-* ኮንቴይነሮችን ዘርዝሮ በእነሱ ላይ preview-down የሚያስኬድ cron ሃያ የተረሱ ቅድመ እይታዎችን ከማግኘት ያድንዎታል።
  • ሚስጥሮች። ቅድመ እይታዎች በሙከራ ምስክርነቶች መሥራት አለባቸው። የbasic auth የይለፍ ቃል የማያውቋቸውን ያርቃል፣ ነገር ግን ቅድመ እይታን ከምርት የመረጃ ቋት ጋር ማገናኘትን ትክክል አያደርገውም።
  • የግንባታ ጊዜ። ምስሎች በሰርቨሩ ላይ ይገነባሉ፣ ስለዚህ ከባድ ግንባታ ከሚሠሩ ቅድመ እይታዎች ጋር ለCPU ይወዳደራል። ግንባታዎች ደቂቃዎችን ከወሰዱ፣ በCI ውስጥ ገንብተው ምስሉን ይጎትቱ።

ወኪሉ ራሱ በዚህ ሰርቨር ላይ መኖር የለበትም። የሚኖር ከሆነ፣ ለClaude Code VPS ይመልከቱ፣ ያንን ሰርቨር ራሱ አዝዞ እንዲንከባከብ ደግሞ ከEQVPS MCP ሰርቨር ጋር ያገናኙት። ያው ማሽን የቡድንዎን MCP መግቢያ በር ማስተናገድም ይችላል። ያለ ምንም ሰርቨር የማይታመን ኮድ ለማስኬድ ሳንድቦክሶች አሉ፣ የራሳቸው IPv4 ያላቸው እቅዶች ደግሞ በወር ከ$8 ይጀምራሉ።

FAQ

ወኪሉ በቀጥታ ወደ ምርት እንዲያሰማራ ለምን አንፈቅድለትም?

ምክንያቱም «ሙከራዎቹ ያልፋሉ» እና «ይሠራል» አንድ አይደሉም፣ ይህንንም የሚወስነው ወኪሉ መጨረሻ መሆን አለበት። ቅድመ እይታ ማንኛውም ነገር ተጠቃሚዎች ጋር ከመድረሱ በፊት ሰው ጠቅ አድርጎ የሚያይበትን ነገር ይሰጣል፣ በአንድ ተጨማሪ ትዕዛዝ ዋጋ።

የትኛው እቅድ ይስማማል?

በአንድ ጊዜ ስንት ቅድመ እይታዎች እንደሚሠሩ ይወሰናል። AI-Agent-IP (በወር $15፣ 4 vCPU፣ 4 GB RAM፣ 40 GB ዲስክ) እያንዳንዳቸው 512 MB ገደብ ያላቸውን በርካታ ትናንሽ የድር መተግበሪያዎች በቀላሉ ይይዛል። በጣም ከባዱ ክፍል የDocker ግንባታ ነው፣ ስለዚህ ምስሎችዎ ትልቅ ከሆኑ ዲስክንና ማህደረ ትውስታን ይከታተሉ።

wildcard ሰርተፍኬት ያስፈልገኛል?

አያስፈልግም። Caddy ለእያንዳንዱ የቅድመ እይታ ንዑስ ዶሜይን ራሱ የተለየ ሰርተፍኬት ያገኛል። wildcard የሆነው የDNS መዝገቡ ብቻ ነው። Let's Encrypt ለእያንዳንዱ የተመዘገበ ዶሜይን በሳምንት 50 ገደማ አዲስ ሰርተፍኬቶችን ይፈቅዳል፣ ወኪሉ በመቶዎች የሚቆጠሩ ቅርንጫፎችን ካልፈጠረ በቂ ነው።

ወኪሉ በSSH ቁልፉ ሰርቨሩን ሊያበላሽ ይችላል?

በዚያ ቁልፍ አይችልም። ቁልፉ ደህንነቱ የተጠበቀ የቅርንጫፍ ስም ካለው «up <ቅርንጫፍ>» ወይም «down <ቅርንጫፍ>» ብቻ በሚቀበል አንድ ትዕዛዝ ተገድቧል። የshell መዳረሻ፣ ተጨማሪ ነጋሪ እሴቶችና የፖርት ማስተላለፍ ውድቅ ይደረጋሉ።

ይህ በNAT እቅድ ይሠራል?

አይሠራም። ቅድመ እይታዎች በራሳቸው ንዑስ ዶሜይኖች በፖርት 80 እና 443 መድረስ አለባቸው፣ ይህም ሕዝባዊ IPv4 ይጠይቃል። የNAT እቅዶች የሚያስተላልፉት የSSH ፖርትን ብቻ ነው።

አስተያየቶች

እስካሁን አስተያየቶች የሉም። መጀመሪያ ይሁኑ።

አስተያየት ይተዉ

አስተያየቶች ከመታየታቸው በፊት ይጣራሉ።