−25%

د Windows پر کلنۍ تادیه، تر ۳۱ اکتوبر. پلانونه وګورئ

EQVPS
پیل وکړئ

د کوډنګ اجنټ د مخکتنو لپاره VPS: هره هغه څانګه چې اجنټ یې push کوي خپل URL اخلي

کوډنګ اجنټ یوه څانګه بشپړه کړې او وايي چې کار کوي. ورته داسې سرور ورکړئ چې دا پکې وڅېړل شي: هره څانګه په کانټینر کې جوړېږي او د پټنوم شاته په خپل HTTPS فرعي ډومېن پرانیستل کېږي، او د اجنټ SSH کیلي یوازې مخکتنې پیلولی او درولی شي.

کوډنګ اجنټ وايي چې ځانګړنه کار کوي. ښايي رښتیا وي. هغه ازموینې چې ده لیکلې تېرېږي، او دا تر هغه لږ څه ثابتوي چې ټول یې غواړي. هغه څه چې تاسو یې په رښتیا غواړئ دا دي چې مخکې له دې چې کاروونکو ته نږدې شي، په براوزر کې یې پرانیزئ، او دا هم پرته له دې چې له اجنټ وغواړئ تولید ته لاس ووړي.

د مخکتنې چاپېریالونه همدا حل کوي، او د دې لپاره پلاټفارم ته اړتیا نشته. یو VPS د خپل IPv4 سره، Docker، Caddy او دوه لنډ سکرېپټونه هرې څانګې ته خپل URL ورکوي لکه https://feature-login-form.preview.example.com، د پټنوم شاته او په هر push سره بیا جوړېږي. اجنټ داسې SSH کیلي ترلاسه کوي چې مخکتنې پیلولی او درولی شي، او نور هېڅ.

موږ دا په ازمویښتي سرور جوړ کړ او له لیکلو مخکې مو ټوله دوره وچلوله: جوړول، پرانیستل، بیا push، لرې کول، او د کیلي د ناوړه کارونې هڅه.

څه پکار دي

  • یو VPS د عامه IPv4 سره. په AI-Agent-IP کې په یو وخت څو مخکتنې ځای کېږي.
  • یو wildcard DNS ریکارډ: *.preview.example.com → د سرور IP.
  • ستاسو د اپلیکېشن زېرمه د یو Dockerfile سره چې په 8080 پورټ خدمت کوي. هره ژبه سمه ده.
  • Ubuntu 24.04 یا Debian 12/13 د apt install -y docker.io caddy git سره.

زېرمه یو ځل د یوازې لوستلو 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'

هش په /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 د مخکتنې خپل انځور دمخه ړنګوي.
  • هغه څانګې چې هېڅوک یې نه تړي. اجنټان تر انسانانو ډېرې څانګې پرانیزي. یو cron چې له یوې اونۍ زاړه preview-* کانټینرونه لېست کړي او پرې preview-down وچلوي، تاسو د شلو هېرو شوو مخکتنو له موندلو ژغوري.
  • رازونه. مخکتنې باید د ازمویښتي اسنادو سره وچلېږي. د basic auth پټنوم ناشنا خلک بهر ساتي، خو دا نه سموي چې مخکتنه د تولید ډېټابېس ته ونښلول شي.
  • د جوړونې وخت. انځورونه په سرور جوړېږي، نو درنه جوړونه د روانو مخکتنو سره پر CPU سیالي کوي. که جوړونه څو دقیقې نیسي، په CI کې یې جوړ کړئ او انځور راکش کړئ.

لازمه نه ده چې پخپله اجنټ په دې سرور اوسېږي. که اوسېږي، د Claude Code لپاره VPS وګورئ، او د دې لپاره چې دا سرور پخپله فرمایش او ساتنه وکړي، هغه د EQVPS MCP سرور سره ونښلوئ. همغه ماشین ستاسو د ټیم MCP دروازه هم کوربه کولی شي. پرته له کوم سرور د نامعتبر کوډ چلولو لپاره سینډباکسونه شته، او د خپل IPv4 لرونکي پلانونه له میاشتې $8 څخه پیلېږي.

پوښتنې

ولې اجنټ ته اجازه نه ورکوو چې مستقیم تولید ته ډیپلای وکړي؟

ځکه «ازموینې تېرېږي» او «کار کوي» یو شی نه دي، او د دې پرېکړه باید وروستی اجنټ وکړي. مخکتنه انسان ته داسې څه ورکوي چې کلیک پرې وکړي، مخکې له دې چې هر څه کاروونکو ته ورسېږي، یوازې د یو اضافي کمانډ په بیه.

کوم پلان مناسب دی؟

دا پورې اړه لري چې په یو وخت څو مخکتنې چلېږي. AI-Agent-IP (په میاشت $15، 4 vCPU، 4 GB RAM، 40 GB ډیسک) څو کوچني ویب اپلیکېشنونه چې هر یو 512 MB حد لري په اسانۍ ځای کوي. تر ټولو دروند برخه د Docker جوړونه ده، نو که انځورونه مو لوی وي ډیسک او حافظې ته پام وکړئ.

ایا wildcard سند ته اړتیا لرم؟

نه. Caddy د هر مخکتنې فرعي ډومېن لپاره پخپله جلا سند اخلي. یوازې DNS ریکارډ wildcard دی. Let's Encrypt د هر ثبت شوي ډومېن لپاره په اونۍ کې شاوخوا ۵۰ نوي سندونه اجازه کوي، چې بس دي، مګر دا چې اجنټ سلګونه څانګې جوړې کړي.

ایا اجنټ کولی شي د خپلې SSH کیلي سره سرور خراب کړي؟

په هغې کیلي نه. هغه یو کمانډ ته محدوده ده چې یوازې «up <څانګه>» یا «down <څانګه>» د خوندي نوم سره مني. shell لاسرسی، اضافي ارګومېنټونه او د پورټ لېږد رد کېږي.

ایا دا په NAT پلان کار کوي؟

نه. مخکتنې باید په خپلو فرعي ډومېنونو کې له 80 او 443 پورټونو د لاسرسي وړ وي، چې عامه IPv4 ته اړتیا لري. NAT پلانونه یوازې د SSH پورټ لېږدوي.

تبصرې

لا تبصرې نشته. لومړی اوسئ.

یوه تبصره پریږدئ

تبصرې د ښکاره کیدو مخکې اعتدال کیږي.