P Pitchbar مستندات

معماری

چرخش APP_KEY

Pitchbar هر کلید مخفی کنترل‌شده توسط مشتری را در حالت استراحت تحت APP_KEY لاراول رمزگذاری می‌کند. اگر آن کلید نشت کند، باید آن را به یک کلید جدید تغییر دهید بدون اینکه دسترسی به داده‌های موجود را از دست بدهید. دستور Artisan security:rotate-app-key چرخش را ایمن و idempotent می‌کند.

ستون‌های پوشش‌داده‌شده

  • workspaces.cta_context_secret
  • workspaces.byok_keys
  • workspaces.slack_webhook_url
  • workspaces.teams_webhook_url
  • webhook_subscriptions.secret
  • workspace_api_tokens.shopper_signing_secret
  • dsr_requests.result_payload
  • integration_connections.credentials_encrypted
  • sources.credentials_encrypted
  • app_settings.* (Stripe، PayPal، Razorpay، Cloudflare، OpenAI، OpenRouter، ایمیل، اسرار صف داخلی)

جریان چرخش

  1. یک کلید جدید تولید کنید:
    php artisan key:generate --show
    # خروجی را کپی کنید
  2. کلید جدید را به‌عنوان APP_KEY فعال اضافه کنید و کلید قدیمی را به APP_PREVIOUS_KEYS منتقل کنید (در صورت چندین کلید، با کاما جدا کنید). مثال:
    APP_KEY=base64:NEW_KEY
    APP_PREVIOUS_KEYS=base64:OLD_KEY
  3. استقرار دهید. لاراول ردیف‌ها را با هر دو کلید رمزگشایی می‌کند (کلید جدید در نوشتن اولویت دارد). خوانش‌ها با استفاده از متن رمز قدیمی به کلید قبلی بازمی‌گردند. برنامه بدون وقفه به کار خود ادامه می‌دهد.
  4. پاک‌سازی را اجرا کنید:
    php artisan security:rotate-app-key --confirm-production
  5. دستور هر ستون رمزگذاری‌شده را در دسته‌های ۲۰۰ ردیفی تکرار می‌کند، با کلید فعلی (یا بازگشت به کلید قبلی) رمزگشایی کرده و با کلید جدید دوباره رمزگذاری می‌کند. ردیف‌های رد شده (ردیف‌هایی که متن رمز آنها قابل رمزگشایی نیست) گزارش می‌شوند اما پاک‌سازی را متوقف نمی‌کنند.
  6. پس از اتمام دستور، APP_PREVIOUS_KEYS را از محیط خود حذف کنید. کلید قدیمی دیگر برای هیچ ردیفی مورد نیاز نیست.

پرچم‌های ایمنی

  • --confirm-production — در محیط production الزامی است. در staging / local حذف کنید.
  • --dry-run — تعداد ردیف‌ها + ستون‌هایی را که باز رمزگذاری می‌شوند، بدون نوشتن شمارش می‌کند. برای پیش‌نمایش سطح قبل از اجرا مفید است.

Idempotency

اجرای دستور دو بار بی‌ضرر است. بار دوم همان مقادیر را رمزگشایی و دوباره رمزگذاری می‌کند؛ بایت‌های متن رمز تغییر می‌کنند (IV جدید) اما متن ساده دست نخورده باقی می‌ماند.

اگر یک ردیف قابل رمزگشایی نباشد چه می‌شود؟

دستور ستون و شناسه ردیف را در کنسول ثبت کرده و ادامه می‌دهد. آن ردیف با هر کلیدی که متن رمز فعلی خود را تولید کرده است، باقی می‌ماند. اگر APP_PREVIOUS_KEYS را قبل از اتمام پاک‌سازی حذف کرده‌اید، آن ردیف‌ها غیرقابل بازیابی هستند — از یک پشتیبان بازیابی کرده و با کلید قبلی در محیط دوباره اجرا کنید.

ردپای حسابرسی

دستور به‌تنهایی در audit_logs نمی‌نویسد — اما اپراتوری که آن را اجرا می‌کند باید چرخش را در سیستم مدیریت تغییرات خود ثبت کند. اگر می‌خواهید هر چرخش به‌طور خودکار حسابرسی شود، فراخوانی artisan را در یک اسکریپت استقرار بپیچید که یک ردیف حسابرسی منتشر کند.

زبان خود را انتخاب کنید