Railshot
AI deployment & operations platform
ดีพลอยเว็บแอปที่สร้างบนเครื่องไปยังสภาพแวดล้อมคลาวด์และออนพรีมิสที่เตรียมไว้ แล้วดูแลการทำงาน
แพลตฟอร์ม AI สำหรับการดีพลอยและการดูแลระบบ ที่นำเว็บแอปที่สร้างบนเครื่องไปยังสภาพแวดล้อมคลาวด์หรือออนพรีมิสที่เตรียมไว้และดูแลให้ทำงานต่อเนื่อง ส่งโปรเจกต์จากหน้าเว็บ หรือจากเอเจนต์ AI ของคุณเองที่เชื่อมผ่าน MCP แล้วระบบจะดำเนินการตั้งแต่เตรียมไฟล์ดีพลอย ซ่อมความล้มเหลว เผยแพร่อิมเมจ นำขึ้นสภาพแวดล้อม จนถึงตรวจยืนยัน URL สาธารณะ หลังดีพลอย หน้าเดิมแสดงประวัติและล็อก และจัดการการอัปเดต การหยุด การกลับมาทำงานต่อ และการลบ เป็นโปรเจกต์ทีม
Railshot vocabulary
- intake
- checks
- repair
- publish
- rollout
- route
- probe
- source commit
- digest
- binding
- unknown
- resume
- observation
Intake: deploy_repository · deploy_local_project · OAUTH MCP · Idempotency-Key · IDEMPOTENCY_CONFLICT · 202 ACCEPTED · EXECUTOR_BUSY · CAPACITY_EXCEEDED · maxConcurrentDeployments · workflow_dispatch · TARGET ALLOWLIST · reconciliation_required · CI_DISPATCH_UNCONFIRMEDChecks: package.policy · package.spec · source.quality · image.build · image.runtime · image.scan · GATE_ORDER · verdict.json · release_eligible · GATE VERDICT · SECRET SCAN · --cap-drop=ALL · source_change_allowed · verify_imagesAI Repair: GATE VERDICT · FIXABLE · give_up · PROMPT INJECTION · FAILURE SIGNATURE · REPAIR_SCOPE · MAX_REPAIR_ATTEMPTS · claude-agent-sdk · openai-codex · fixer · lessons.md · source_change_allowed · SDK_OUTCOME_UNKNOWNPublish: release_eligible · GHCR · images.json · EXACT TESTED BUNDLE · GITHUB-HOSTED RELEASE · published · publication_unverified · MANIFEST INSPECT · REGISTRY_VISIBILITY · publish-journal · railshot-release · containerd-snapshotter · images.tar · handoff.jsonRollout: bridge.py · workload.json · CONFIG GIT · pushing · REMOTE READBACK · ARGO CD · Synced · Healthy · targetRevision · sync_requested · NO PRUNE, NO FORCE · NetworkPolicy · readinessProbe · observed_images · NEVER BLINDLY RETRYPublic Route: routing · SHARED ALB · aws_lb_listener_rule · aws_lb_target_group · aws_route53_record · NodePort · LISTENER OWNERSHIP · GCP_ROUTE_APPLY_TIMEOUT · GCP_CERTIFICATE_DNS_FAILED · WireGuardHealth Probe: public_probe · site_probe · railshot-health/1 · NO PROXY, NO REDIRECT · expected_json · HTTPS 200 · verified_at · public_http · health_path · readinessProbe · probe_successSource Commit: workflow_dispatch · targetRevision · Railshot-Request · Railshot-Target · source_commit · source_parent · force: false · source_digest · snapshot.json · GITHUB_SHA · PLATFORM_REF · harness_sha256 · SUBMITTED SOURCE CHANGED · source_preparedImage Digest: GHCR · images.json · MANIFEST INSPECT · source_digest · IMMUTABLE GHCR DIGEST · images_sha256 · observed_images · PULL BY DIGEST · imagePullSecrets · containerd-snapshotter · RESUME_PUBLICATION_CHANGED · verify_images · images.tarRun Binding: Idempotency-Key · published · Railshot-Request · Railshot-Target · handoff.json · producer_attempt · bundle_artifact_id · run_id · state.bindings · CI_BINDING_MISMATCH · DEPLOYMENT BINDING CONFLICT · config_sha256 · TARGET ALLOWLIST · registered_applicationUnknown Outcome: publication_unverified · pushing · GCP_ROUTE_APPLY_TIMEOUT · outcome_unknown · CD_RECONCILE_REQUIRED · reconciliation_required · CD_OUTCOME_UNKNOWN · SDK_OUTCOME_UNKNOWN · unknown_timeout · CI_DISPATCH_UNCONFIRMED · NEVER BLINDLY RETRY · after_reconcile · reconcile_remote · CI_DISPATCH_NOT_IDENTIFIED · READ-ONLY OBSERVEResume: publish-journal · source_parent · RESUME_PUBLICATION_CHANGED · --resume · state.sqlite3 · resumePrepared · findDeployment · recoverDispatch · source_prepared · CI_DISPATCH_NOT_IDENTIFIED · resume_count · SAME WORKFLOW RUN · INTERRUPTEDObservation: observationRetry · next_retry_at · consecutive_failures · no_data · stale · collection_failed · NOT A SUCCESS GATE · probe_success · PROMETHEUS · BLACKBOX EXPORTER · READ-ONLY OBSERVE
หน้าเว็บและเอเจนต์ของคุณเองขอการดีพลอยผ่าน API ผลิตภัณฑ์ตัวเดียวกัน
ผลิตภัณฑ์ตั้งแต่คำขอดีพลอยที่ถูกรับ ผ่านการตรวจ CI และการเผยแพร่อิมเมจ ไปจนถึงการตั้งค่า Git และการนำขึ้นด้วย Argo CD บนเป้าหมายที่ลงทะเบียน และการตรวจยืนยัน HTTPS สาธารณะ ความสำเร็จถูกบันทึกเมื่อมีทั้ง revision ที่ถูกนำไปใช้และการตรวจสาธารณะเท่านั้น ผลลัพธ์ที่ไม่อาจรู้ได้คงเป็น unknown
ช่วงพัฒนาของงาน September 28, 2026 ถึง October 4, 2026
หน้าเว็บและเซิร์ฟเวอร์ MCP ที่สร้างระหว่างแฮกกาธอน MCP แบบรีโมตลงชื่อเข้าใช้ด้วย OAuth เพื่อส่งงาน ส่วนโฟลเดอร์ในเครื่องส่งผ่าน MCP ในเครื่อง
ส่ง → รับ
หน้าเว็บ MCP แบบรีโมต และ MCP ในเครื่อง เรียก API ผลิตภัณฑ์ตัวเดียวกัน ซึ่งบันทึกคำขอที่ตรวจแล้วเป็น queued และตอบด้วย 202
ผู้ใช้เบราว์เซอร์ข้อมูล: โฟลเดอร์ · ZIP · URL GitHubหน้าเว็บ · ประวัติ · Insights
apps/dashboardเลือกต้นทางและสภาพแวดล้อมที่ลงทะเบียนบนหน้าเว็บ
หน้าเว็บ · ประวัติ · Insights
apps/dashboardข้อมูล: API ผลิตภัณฑ์เดียวกัน · /api/v1ตรวจสอบ · เป้าหมาย · รับ 202apps/apiหน้าเว็บเรียก API ผลิตภัณฑ์จาก origin เดียวกัน
ไคลเอนต์ MCPข้อมูล: OAuth · deploy_repositoryOAuth MCP · deploy_repository
agent/remote-mcp.jsMCP แบบรีโมตเชื่อมต่อผ่าน OAuth และรับรีโพซิทอรี GitHub สาธารณะเป็นอินพุต
OAuth MCP · deploy_repository
agent/remote-mcp.jsข้อมูล: API ผลิตภัณฑ์เดียวกันตรวจสอบ · เป้าหมาย · รับ 202apps/apiเซิร์ฟเวอร์ MCP แบบรีโมตเรียก API ดีพลอยตัวเดียวกันผ่าน API client ภายใน
railshot-local MCPข้อมูล: อัปโหลด ZIP · deploy_local_projectตรวจสอบ · เป้าหมาย · รับ 202
apps/apiMCP แบบ stdio บนคอมพิวเตอร์ของผู้ใช้บีบอัดโฟลเดอร์เป็น ZIP แล้วอัปโหลด เซสชันนี้ไม่ได้ใช้ร่วมกับเซสชัน OAuth แบบรีโมต
ตรวจสอบ · เป้าหมาย · รับ 202
apps/apiข้อมูล: บันทึกเป็น queued · 202สถานะ operation · การผูกการรันapi/product-store.jsตรวจอินพุต เป้าหมายที่ลงทะเบียน ความจุ และ idempotency key แล้วบันทึก operation เป็น queued และตอบด้วย 202 ซึ่ง 202 หมายถึงรับแล้ว ไม่ใช่ดีพลอยแล้ว
สถานะ operation · การผูกการรัน
api/product-store.jsข้อมูล: ลำดับคิวคิวดีพลอย · ครั้งละ 3apps/apiดึงตามลำดับการรับ ภายในขีดจำกัดการดีพลอยพร้อมกัน (ค่าเริ่มต้น 3)
สถานะ operation · การผูกการรัน
api/product-store.jsการสังเกต: สถานะการดีพลอย · ประวัติหน้าเว็บ · ประวัติ · Insightsapps/dashboardหน้าเว็บและเครื่องมือ MCP อ่านบันทึก operation ชุดเดียวกัน ความพยายามล่าสุดและการดีพลอยที่ตรวจยืนยันแล้วในปัจจุบันแสดงแยกกัน และงาน AI ที่เสร็จแล้วไม่ใช่ความสำเร็จของการดีพลอย
การตรวจ CI → เผยแพร่อิมเมจ
โค้ดแพลตฟอร์มที่ตรึงไว้ตรวจคอมมิตที่ส่งมา ส่งเฉพาะความล้มเหลวที่แก้ได้ให้ AI และเผยแพร่เฉพาะอิมเมจที่ผ่านการตรวจชุดเดิมอีกครั้ง
คิวดีพลอย · ครั้งละ 3
apps/apiข้อมูล: source commitคอมมิตต้นทาง · trailerapps/<tenant>/<app>ซอร์สที่ส่งมากลายเป็นคอมมิตในรีโพซิทอรี apps ส่วนตัว (พร้อม trailer Railshot-Request และ Railshot-Target) และ branch ถูกอัปเดตโดยไม่ใช้ force
คิวดีพลอย · ครั้งละ 3
apps/apiรัน · นำไปใช้: workflow_dispatchloop · การตรวจพื้นฐาน L0–L3railshot-deploy.ymlขอการรันด้วย tenant, app, source_commit และ target_id หากการตอบกลับหาย จะไม่ส่งซ้ำ แต่จะค้นหาการรันของคอมมิตเดียวกันแทน
คอมมิตต้นทาง · trailer
apps/<tenant>/<app>ข้อมูล: คอมมิตที่ส่งมาloop · การตรวจพื้นฐาน L0–L3railshot-deploy.ymlcheckout เฉพาะคอมมิตที่ส่งมาและโค้ดแพลตฟอร์มที่ตรึงไว้ (PLATFORM_REF)
ซ่อมด้วย SDK · เฉพาะความล้มเหลวที่แก้ได้
railshot-deploy.ymlข้อมูล: คำขอแก้ไข · มีเงื่อนไขAI SDK providerเรียกเฉพาะประเภทความล้มเหลวที่แก้ได้ และหยุดเมื่อความล้มเหลวเดิมเกิดซ้ำหรือถึงขีดจำกัดจำนวนครั้ง ผ่านหรือไม่ผ่านตัดสินโดยการตรวจ ไม่ใช่โดย LLM
รีลีส · เผยแพร่ GHCR · การผูก
railshot-deploy.ymlข้อมูล: เผยแพร่อิมเมจที่ตรวจแล้วGHCRหลังตรวจยืนยัน bundle ที่ผ่านการตรวจแล้ว อิมเมจชุดเดียวกันจะถูกเผยแพร่ไปยัง GHCR ไม่มีการบิลด์ใหม่
ผูกการรัน CI · สังเกต
apps/apiการสังเกต: การรัน · อ่านการเผยแพร่railshot-deploy.ymlการเผยแพร่จะนับก็ต่อเมื่อ run id, source commit, target และ app ตรงกับบันทึกที่รับไว้
ผูกการรัน CI · สังเกต
apps/apiความล้มเหลว · ผลลัพธ์ที่ไม่ทราบ: failed · publication_unverifiedสถานะ operation · การผูกการรันapi/product-store.jsความล้มเหลวของ CI หรือการเผยแพร่ที่ยังไม่ได้ตรวจยืนยันจะถูกบันทึกพร้อมการวินิจฉัย และไม่ส่งต่อไปยัง CD
นำไปใช้ → ตรวจสาธารณะ
นำไปใช้ผ่าน config Git และ Argo CD เฉพาะเมื่อการเผยแพร่ตรงกับเป้าหมายที่ลงทะเบียน และบันทึกความสำเร็จหลังที่อยู่ HTTPS สาธารณะที่ลงทะเบียนผ่านการตรวจแล้วเท่านั้น
รีลีส · เผยแพร่ GHCR · การผูก
railshot-deploy.ymlข้อมูล: images.json · spec · verdict · manifestcd.js · deployPublishedapps/apiCD อ่านไฟล์ของบันทึกการเผยแพร่ผ่าน loader ที่เชื่อถือได้ CI เองไม่ได้สร้างทรัพยากรคลัสเตอร์ URL หรือความสำเร็จของการดีพลอย
cd.js · deployPublished
apps/apiรัน · นำไปใช้: apply · เป้าหมายที่ลงทะเบียนconfig ที่เชื่อถือ · เป้าหมายที่ลงทะเบียนgitops/bridge.pyรัน gitops/bridge.py ด้วย config ที่เชื่อถือได้ เฉพาะเมื่อแอปและ tenant ที่ลงทะเบียนตรงกับบันทึกการเผยแพร่
commit · push · อ่านกลับจากรีโมต
gitops/bridge.pyข้อมูล: workload commit · pushรีโพซิทอรี config Gitคอมมิตเฉพาะ workload.json ที่พาธที่ลงทะเบียนของ branch เฉพาะ บันทึกความตั้งใจจะ push ก่อน แล้ว push และอ่าน revision ฝั่งรีโมตกลับมา push ที่ผลไม่แน่นอนจะไม่ถูกทำซ้ำ
รีโพซิทอรี config Gitข้อมูล: revisionApplication · ตรวจ AppProject
Argo CDrevision ของรีโพซิทอรี config ที่ Argo CD Application ชี้อยู่
Argo sync · สังเกต
gitops/bridge.pyรัน · นำไปใช้: sync · สังเกตApplication · ตรวจ AppProjectArgo CDขอ sync หลังตรวจ AppProject การสังเกตเป็นการอ่านเท่านั้นโดยไม่ sync
Application · ตรวจ AppProject
Argo CDรัน · นำไปใช้: นำไปใช้workload · Serviceคลัสเตอร์แอป K3sนำ workload ไปใช้กับคลัสเตอร์เป้าหมายที่ลงทะเบียน
workload · Service
คลัสเตอร์แอป K3sข้อมูล: ดึงอิมเมจ · digestGHCRดึง digest ที่เผยแพร่แล้ว GHCR แบบส่วนตัวต้องใช้ข้อมูลรับรองสำหรับ pull โดยเฉพาะ
probe HTTPS สาธารณะ
gitops/bridge.pyการสังเกต: HTTPS healthURL HTTPS สาธารณะตรวจเฉพาะที่อยู่ health แบบ HTTPS ที่ผู้ดูแลระบบลงทะเบียนไว้ โดยไม่ตาม redirect ว่าได้ 200 (และ JSON ที่คาดไว้หากกำหนด)
URL HTTPS สาธารณะข้อมูล: เส้นทางสาธารณะworkload · Service
คลัสเตอร์แอป K3sเส้นทางสาธารณะ (LB, NodePort, ใบรับรอง) ต่างกันตามผู้ให้บริการและเป้าหมายที่ลงทะเบียน
cd.js · deployPublished
apps/apiข้อมูล: succeeded · revision · URLสถานะ operation · การผูกการรันapi/product-store.jsบันทึกเป็น succeeded ก็ต่อเมื่อมี cd.deployed, revision, การตรวจ HTTPS สาธารณะที่สำเร็จ เวลาของการตรวจ และ URL ที่ถูกต้อง
cd.js · deployPublished
apps/apiความล้มเหลว · ผลลัพธ์ที่ไม่ทราบ: unknown · ต้องกระทบยอดสถานะ operation · การผูกการรันapi/product-store.jsผลลัพธ์ที่ไม่อาจรู้ได้คงเป็น unknown การ apply เดิมจะไม่ถูกส่งซ้ำหรือย้อนกลับ
การสังเกต · ไม่ใช่คำตัดสิน
เมตริกและ probe ไม่ได้ตัดสินความสำเร็จของการดีพลอย ค่าที่หายไป เก่า และเก็บไม่สำเร็จจะแสดงตามจริง
metrics observer
apps/apiการสังเกต: คิวรี PromQLPrometheusอ่านซีรีส์ up, probe_success และ Pod ค่าที่หายไป เก่า หรือเก็บไม่สำเร็จจะแสดงตามสถานะนั้น และไม่ถูกแปลงเป็น 0
Prometheusการสังเกต: scrape · probeworkload · Service
คลัสเตอร์แอป K3sexporter scrape และ HTTP probe เมตริกเหล่านี้ไม่ได้ใช้ตัดสินความสำเร็จของการดีพลอย
สถานะ operation · การผูกการรัน
api/product-store.jsการสังเกต: สถานะการดีพลอย · ประวัติหน้าเว็บ · ประวัติ · Insightsapps/dashboardหน้าเว็บและเครื่องมือ MCP อ่านบันทึก operation ชุดเดียวกัน ความพยายามล่าสุดและการดีพลอยที่ตรวจยืนยันแล้วในปัจจุบันแสดงแยกกัน และงาน AI ที่เสร็จแล้วไม่ใช่ความสำเร็จของการดีพลอย
probe HTTPS สาธารณะ
gitops/bridge.pyการสังเกต: HTTPS healthURL HTTPS สาธารณะตรวจเฉพาะที่อยู่ health แบบ HTTPS ที่ผู้ดูแลระบบลงทะเบียนไว้ โดยไม่ตาม redirect ว่าได้ 200 (และ JSON ที่คาดไว้หากกำหนด)
ทุกการเชื่อมต่อมีน้ำหนักเท่ากัน เลือกโฟลว์เพื่อไฮไลต์เฉพาะเส้นทางของโฟลว์นั้นพร้อมขั้นตอนที่มีหมายเลข
- เส้นทึบ · ทิศทางที่ต้นทาง อิมเมจ และคำขอไหลไป
- เส้นประ · คำขอให้รัน การนำไปใช้ หรือ sync
- เส้นยาวสลับจุด · การอ่านสถานะ probe และเมตริก แยกจากคำตัดสิน
- เส้นประสั้น · ความล้มเหลวที่บันทึกไว้หรือผลลัพธ์ที่ไม่ทราบ
- เส้นดำหนา · โฟลว์ที่เลือก ตัวเลขบอกลำดับ
- กล่อง · ขอบเขตที่เป็นเจ้าของ พร้อมพาธซอร์สในส่วนหัว
- ชิปด้านใน · องค์ประกอบภายในขอบเขตนั้น
- กล่องเส้นประ · อยู่นอกแพลตฟอร์ม
- เส้นขอบสีส้ม · จุดที่โมเดลตัดสินใจ
- API ผลิตภัณฑ์
- บันทึกการดีพลอย
- ขอบเขตการรันของ CD
- ทางเข้า · CI · เป้าหมาย
ภาพของ October 2 (bc61a5a) ใน docs/architecture/README.md เป็นประวัติการพัฒนา สถาปัตยกรรมนี้เป็นไปตามโค้ด 645e28a ผู้ให้บริการและเส้นทางเครือข่ายต่างกันตามเป้าหมายที่ลงทะเบียน และไม่ได้หมายความว่าผู้ให้บริการทุกรายเปิดอยู่ตลอดเวลา