
أمر واحد يُقيّم حسابك السحابي بأكمله — الأخطاء في التهيئة، نقص المراقبة، والوضع الأمني.
أمر واحد يقيم حساب السحابة بالكامل — التكوينات الخاطئة، ونقص المراقبة، والحالة الأمنية، مرتبة وفقًا لأهم خمسة أشياء يجب إصلاحها أولاً.
وجِّهه إلى AWS، Cloudflare، Vercel، Supabase، Render، Fly.io، أو Railway وسيعود بتقييم، وما هو مكسور، وإصلاح لكل مشكلة — مكتفٍ ذاتيًا بحيث يمكن تسليمه مباشرة إلى وكيل.
npx cloud-doctor
https://github.com/user-attachments/assets/60b610ab-7aee-4c3a-8d9e-83f045c8cc56
ذلك يختار مزودًا، ويحل هويتك (ملف تعريف AWS، رمز API، …)، ويشغل الفحص تفاعليًا. للتخطي مباشرة إلى مزود:
npx cloud-doctor aws --profile prod
npx cloud-doctor cloudflare --yes
npx cloud-doctor vercel --yes
إذا كان ملف ~/.npmrc يحتوي على min-release-age (تقوية سلسلة التوريد) ويمنع الإصدارات الجديدة:
# =<number>, 0 chosen as example
npm x --min-release-age=0 cloud-doctor -- aws profiles
تفضل أحدث الإصدارات؟ يتم نشر الإصدارات التجريبية تحت وسومها الخاصة: npx cloud-doctor@alpha.
| المزود | الأمر | المصادقة |
|---|---|---|
| AWS | cloud-doctor aws | سلسلة بيانات اعتماد AWS SDK — --profile, AWS_PROFILE, متغيرات البيئة, SSO, هوية الويب |
| Cloudflare | cloud-doctor cloudflare | CLOUDFLARE_API_TOKEN |
| Vercel | cloud-doctor vercel | VERCEL_TOKEN (+ اختياري VERCEL_TEAM_ID) |
| Supabase | cloud-doctor supabase | SUPABASE_ACCESS_TOKEN |
| Render | cloud-doctor render | RENDER_API_KEY |
| Fly.io | cloud-doctor fly | FLY_API_TOKEN (+ اختياري FLY_ORG) |
| Railway | cloud-doctor railway | RAILWAY_API_TOKEN (رمز مساحة العمل/الحساب) |
يمكن تعيين رموز المصادقة كمتغيرات بيئة أو يمكنك تقديمها عندما يطلبها واجهة المستخدم النصية:
CLOUDFLARE_API_TOKEN=cfut_aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1kUXc0dzlXZ1hjUQ== npx cloud-doctor cloudflare
(لا تقم بفك تشفير الرمز base64)
أو
$ npx cloud-doctor cloudflare
Cloudflare credentials are not set — enter them below.
Kept for this run only, never written to disk. Skip these prompts: export CLOUDFLARE_API_TOKEN
dashboard → My Profile → API Tokens
? Cloudflare read-only API token › <input>
قريبًا: Google Cloud، وKubernetes، وقواعد البيانات (Postgres, MySQL, Redis) — انظر ما التالي.
npx cloud-doctor # pick provider (default AWS) → pick identity → scan
npx cloud-doctor aws # AWS fast path
npx cloud-doctor aws --profile prod # non-interactive when unambiguous
npx cloud-doctor aws --yes --json # CI, machine-readable output
npx cloud-doctor aws --yes --json --fail-under 75 # CI gate on the score
npx cloud-doctor cloudflare --yes # needs CLOUDFLARE_API_TOKEN
npx cloud-doctor vercel --yes # needs VERCEL_TOKEN (+ VERCEL_TEAM_ID)
npx cloud-doctor supabase --yes # needs SUPABASE_ACCESS_TOKEN
npx cloud-doctor render --yes # needs RENDER_API_KEY
npx cloud-doctor fly --yes # needs FLY_API_TOKEN (+ FLY_ORG)
npx cloud-doctor railway --yes # needs RAILWAY_API_TOKEN
npx cloud-doctor aws profiles # list ~/.aws/config profiles
npx cloud-doctor aws whoami # show resolved AWS identity
--yes يتخطى المطالبات (آمن للتكامل المستمر)؛ --json يطبع تقريرًا مستقرًا ذو إصدار مخطط بدلاً من عرض المحطة؛ --verbose يطبع كل الاكتشافات بدلاً من المخالفين الأوائل؛ --no-color يعطل إخراج الألوان.
النقاط لا تُزيف أبدًا: إذا لم تتمكن أي قاعدة من التشغيل، تكون النقاط null مع التسمية "لم يتم تشغيل أي فحص"، وليس 100 فارغة.
ضبط القواعد لكل مزود عبر doctor.config.ts (أو doctor.config.json، أو cloudDoctor في package.json):
import { defineConfig } from "cloud-doctor/api";
export default defineConfig({
defaultProvider: "aws",
aws: {
profile: "prod",
regions: ["us-east-1", "eu-west-1"],
account: "123456789012",
},
rules: {
"aws/s3-unencrypted-bucket": "off",
"aws/iam-user-access-key": "error",
},
});
"off" يعطل قاعدة؛ "error" / "warning" يلغي شدتها. القواعد المعطلة تُحذف من التقييم وتُكشف كـ مكتومة — لا تُطرح بصمت أبدًا.
واجهة سطر أوامر رقيقة فوق سجل الإضافات — كل مزود ينفذ نفس العقد، لذا لا تتعامل واجهة سطر الأوامر مع أي مزود بشكل خاص.
| الحزمة | الدور |
|---|---|
packages/cloud-doctor | واجهة سطر أوامر (commander, prompts, ora) + برمجي diagnose() API |
packages/core | سجل الإضافات، التقييم، تحميل الإعدادات، الأنواع المشتركة |
packages/plugin-* | حزمة واحدة لكل مزود — اكتشاف الهوية + القواعد |
packages/plugins | سجل افتراضي يربط كل المزودين معًا |
كل مزود ينفذ CloudDoctorPlugin:
discoverIdentities() — قائمة الملفات الشخصية/المشاريع/الحسابات للاختيارresolveIdentity() — تعيين الأعلام/البيئة/الإعدادات → الهوية، لا مكالمات شبكةvalidateIdentity() — إثبات أن بيانات الاعتماد تعمل (sts:GetCallerIdentity أو ما يعادلها)scan() — تشغيل القواعد المقيدة، إرجاع التشخيصات + النقاطيتم تسجيل المزودين الجدد في packages/plugins/src/index.ts.
gcloud، k8s، و db قادمون قريبًا.
pnpm install
pnpm build
pnpm typecheck
pnpm test
للتحقق العملي من القواعد دون الوصول إلى حساب سحابي حقيقي، يأتي المستودع مع أداة اختبار http-mock و Moto/fab: (ملاحظة: fab هي واجهة سطر أوامر لإنشاء بيئة للتشغيل ضدها، حاليًا خاصة، سيتم جعل المشروع التابع مفتوح المصدر أيضًا)
pnpm mock:up <scenario> # boot a persistent mock instance
eval "$(pnpm -s mock:env <scenario>)" # point env vars at it
pnpm mock:run <scenario> # run the CLI against it
تحية لـ react-doctor