d3bbc0c0a0
Build and Deploy Platform / build-and-deploy (push) Successful in 14m57s
User-app builds no longer pull gcr.io/docker.io directly when build.images is configured in values.yaml, fixing ImagePullBackOff on clusters without upstream registry access. Co-authored-by: Cursor <cursoragent@cursor.com>
173 lines
7.5 KiB
Markdown
173 lines
7.5 KiB
Markdown
# وضعیت رفع یافتههای گزارش ممیزی CloudHost
|
||
|
||
> مرجع: `AUDIT-REPORT.fa.pdf` / `scripts/audit-report.fa.html`
|
||
> آخرین بهروزرسانی: ۳ تیر ۱۴۰۴ (3 Jul 2026)
|
||
|
||
| نماد | معنی |
|
||
|------|------|
|
||
| ✅ | رفع شده |
|
||
| ⚠️ | جزئی / نیاز به پیکربندی محیط |
|
||
| 🔜 | عمداً به تعویق افتاده (اسکوپ بزرگ یا trade-off) |
|
||
|
||
---
|
||
|
||
## خلاصه
|
||
|
||
| دسته | تعداد | ✅ | ⚠️ | 🔜 |
|
||
|------|-------|----|----|-----|
|
||
| بلاکرهای پروداکشن | 8 | 8 | 0 | 0 |
|
||
| بیلد و Kaniko | 10 | 9 | 0 | 1 |
|
||
| دیپلوی و پیشنمایش | 6 | 6 | 0 | 0 |
|
||
| دیتابیس / سرویس اختیاری | 9 | 8 | 0 | 1 |
|
||
| Migration / اسکیما | 4 | 4 | 0 | 0 |
|
||
| بیلینگ و امنیت مالی | 5 | 5 | 0 | 0 |
|
||
| GitOps / CI-CD | 4 | 4 | 0 | 0 |
|
||
| امنیت اپ / auth | 6 | 3 | 0 | 3 |
|
||
| بهبود / زیرساخت | 5 | 2 | 1 | 2 |
|
||
|
||
**نتیجه:** همه بلاکرهای پروداکشن و تقریباً همه باگهای قطعی رفع شدهاند. موارد باقیمانده عمدتاً پیکربندی آینه رجیستری، JWT در localStorage، و پاکسازی PVC یتیم هستند.
|
||
|
||
---
|
||
|
||
## ۱. بلاکرهای پروداکشن (اولویت ۱–۸)
|
||
|
||
| # | یافته | وضعیت | اقدام |
|
||
|---|--------|--------|-------|
|
||
| 1 | شارژ رایگان کیف پول (`POST /billing/wallet/charge`) | ✅ | HMAC + گارد production در `billing-wallet.controller.ts` |
|
||
| 2 | دیپلوی بدون پرداخت | ✅ | گارد بیلینگ در `triggerDeployment`, `startDeployment`, `PATCH resources` |
|
||
| 3 | namespace از ۸ کاراکتر UUID | ✅ | `userIdSlug` / `userNamespace` با UUID کامل |
|
||
| 4 | migration بدون ردیابی نسخه | ✅ | `schema_migrations` + `000_base_schema.sql` + pre-upgrade hook |
|
||
| 5 | `015` ستون `user_id` / `001` بدون گارد TYPE | ✅ | اصلاح نام ستون + `IF NOT EXISTS` |
|
||
| 6 | workflow Gitea بدون تست | ✅ | job تست + rebase در `.gitea/workflows/build-deploy.yaml` |
|
||
| 7 | رمز هاردکد Elasticsearch | ✅ | حذف از git + SealedSecret |
|
||
| 8 | COPY گو / `\|\| echo` Node | ✅ | اصلاح در `build.service.ts` |
|
||
|
||
---
|
||
|
||
## ۲. بیلد (Kaniko + Dockerfile)
|
||
|
||
| یافته | وضعیت | یادداشت |
|
||
|--------|--------|---------|
|
||
| Go COPY نامعتبر | ✅ | |
|
||
| Node build failure نادیده | ✅ | `npm ci` + fail-on-build |
|
||
| Laravel extensions | ✅ | mbstring, xml, bcmath, zip, fileinfo, tokenizer |
|
||
| Python pyproject.toml | ✅ | تشخیص + نصب poetry/pdm |
|
||
| Kaniko 4Gi / PVC بدون SC | ✅ | limits قابل تنظیم + `BUILD_PVC_STORAGE_CLASS` |
|
||
| Git token در spec / branch injection / SSRF | ✅ | GIT_ASKPASS + Secret + validation |
|
||
| Zip slip در unzip | ✅ | اعتبارسنجی مسیر قبل و بعد از extract |
|
||
| state بیلد در حافظه | ✅ | Redis session + startup recovery |
|
||
| دیپلوی همزمان بدون قفل | ✅ | in-flight guard در `triggerDeployment` |
|
||
| Base image بدون آینه | ✅ | `build.images` در Helm values + پیشفرض Harbor در configuration |
|
||
| zip bomb (۱۰GiB) | 🔜 | سقف آپلود موجود؛ محدودیت تعداد entry در archive پیشنهاد میشود |
|
||
|
||
---
|
||
|
||
## ۳. دیپلوی و پیشنمایش
|
||
|
||
| یافته | وضعیت | یادداشت |
|
||
|--------|--------|---------|
|
||
| حذف preview با custom domain pending | ✅ | `hasVerifiedCustomDomain()` در k8s + deployments |
|
||
| getPreviewInfo پچ NodePort | ✅ | فقط خواندن؛ ingressUrl اولویت دارد |
|
||
| fallback بینکلاستری → ImagePullBackOff | ✅ | `CLUSTER_DEPLOY_FALLBACK_ENABLED=true` برای fallback |
|
||
| NodePort host از API server | ⚠️ | `getClusterHostIp` همچنان fallback؛ ingressUrl مسیر اصلی |
|
||
| suspend NodePort revoke | ✅ | `deleteTemporaryAccessServicesForApp` در suspend |
|
||
|
||
---
|
||
|
||
## ۴. دیتابیس و سرویسهای اختیاری
|
||
|
||
| یافته | وضعیت | یادداشت |
|
||
|--------|--------|---------|
|
||
| Redis/RabbitMQ randAlphaNum | ✅ | الگوی `lookup` در helm templates |
|
||
| probe بدون auth | ✅ | redis-cli `-a` / mongo با credential |
|
||
| RWO بدون Recreate | ✅ | `strategy: Recreate` |
|
||
| dbPassword fallback هر deploy | ✅ | generate + persist در DB |
|
||
| Mongo snapshot/restore | ✅ | |
|
||
| WordPress MySQL اجباری | ✅ | |
|
||
| wp-content restore از PVC | ✅ | |
|
||
| PVC یتیم بعد از suspend/delete | 🔜 | نیاز به job پاکسازی دورهای |
|
||
| ایمیج DB از Docker Hub | ⚠️ | آینه در `values.yaml`؛ پیکربندی per-cluster |
|
||
|
||
---
|
||
|
||
## ۵. Migration / اسکیما
|
||
|
||
| یافته | وضعیت |
|
||
|--------|--------|
|
||
| Job دوباره همه SQL | ✅ |
|
||
| post-upgrade → pre-upgrade | ✅ |
|
||
| نبود base schema | ✅ |
|
||
| 015 user_id | ✅ |
|
||
|
||
---
|
||
|
||
## ۶. بیلینگ
|
||
|
||
| یافته | وضعیت |
|
||
|--------|--------|
|
||
| wallet charge بدون درگاه | ✅ |
|
||
| proration اشتباه | ✅ |
|
||
| race در wallet | ✅ | pessimistic lock |
|
||
| auto-renew دو بار بین replicas | ✅ | lock روی Application در transaction |
|
||
| دیپلوی بدون پرداخت | ✅ |
|
||
|
||
---
|
||
|
||
## ۷. GitOps / CI-CD
|
||
|
||
| یافته | وضعیت |
|
||
|--------|--------|
|
||
| workflow بدون تست | ✅ |
|
||
| elastic password در git | ✅ |
|
||
| platform Redis requirepass | ✅ |
|
||
| backend RollingUpdate + limits + postgres backup | ✅ |
|
||
| Swagger در production | ✅ |
|
||
| RUNBOOK-DEPLOY portable | ✅ | commit `6d9cd89` |
|
||
|
||
---
|
||
|
||
## ۸. امنیت اپلیکیشن
|
||
|
||
| یافته | وضعیت | یادداشت |
|
||
|--------|--------|---------|
|
||
| gitToken / dbPassword در API | ✅ | `@Exclude` + `hasDbPassword` / `hasGitToken` |
|
||
| Elasticsearch log isolation | ✅ | namespace کامل |
|
||
| OTP Math.random | ✅ | `crypto.randomInt` |
|
||
| OTP consume race | ✅ | pessimistic lock در transaction |
|
||
| JWT در localStorage | 🔜 | نیاز به httpOnly cookie + CSRF — اسکوپ frontend بزرگ |
|
||
| refresh token rotation | 🔜 | |
|
||
| secret پیشفرض dev | ⚠️ | `validate-production-config` در production fail میکند |
|
||
| docker compose NODE_ENV=production | ✅ | `NODE_ENV: development` برای dev محلی |
|
||
|
||
---
|
||
|
||
## ۹. بهبود / زیرساخت
|
||
|
||
| یافته | وضعیت |
|
||
|--------|--------|
|
||
| Backend Dockerfile helm/kubectl از اینترنت | 🔜 | mirror یا COPY از stage |
|
||
| orphan PVC cleanup | 🔜 |
|
||
| zip bomb hard limit | 🔜 |
|
||
|
||
---
|
||
|
||
## متغیرهای محیطی جدید (مرجع deploy)
|
||
|
||
| متغیر | پیشفرض | توضیح |
|
||
|--------|---------|-------|
|
||
| `CLUSTER_DEPLOY_FALLBACK_ENABLED` | `false` | fallback بین کلاستر |
|
||
| `CLUSTER_DEPLOY_FALLBACK_ATTEMPTS` | `3` | فقط وقتی fallback فعال |
|
||
| `BASE_IMAGE_REGISTRY` | `registry.abrban.com/proxy-dockerhub/library` | آینه base imageهای بیلد (یا از `build` در Helm values) |
|
||
| `KANIKO_IMAGE` | `registry.abrban.com/proxy-gcr/...` | Kaniko executor (یا `build.images.kaniko` در values) |
|
||
| `BUILD_PVC_STORAGE_CLASS` | — | StorageClass برای PVC بیلد |
|
||
| `BILLING_WALLET_HMAC_SECRET` | — | اجباری در production |
|
||
| `PAYMENT_GATEWAY_*` | — | اجباری برای charge واقعی |
|
||
|
||
---
|
||
|
||
## commitهای مرتبط
|
||
|
||
- `22359be` — fix(platform): apply production hardening from audit plan
|
||
- `6d9cd89` — docs: add portable from-zero deploy runbook and GitOps templates
|
||
- *(uncommitted)* — رفع موارد باقیمانده این سند (preview، OTP، zip slip، auto-renew lock، docker-compose)
|