# تخزين أسرار التطبيق لموقع

Source: https://support.kapsulehost.com/ar-ae/site-secrets

تعالج علامة التبويب Secrets مخزنًا مشفرًا للقيم الحساسة في الإعدادات التي يحتاجها تطبيق Node.js، مثل مفاتيح API وأسرار التوقيع ورموز الجهات الخارجية، ويُحتفَظ بها لكل بيئة على حدة بحيث لا تختلط بيانات اعتماد الإنتاج الخاصة بك ببيانات اعتماد المعاينة أبدًا.

## أين تُحفظ الأسرار

افتح **المواقع**، ثم انقر على الموقع، ثم افتح مجموعة **Environment** في القائمة اليسرى للموقع، واختر **الأسرار**. عنوان التبويب هو **الأسرار**.

لا تظهر هذه العلامة إلا في مواقع Node.js. لا تعرضها مواقع WordPress و PHP والمواقع الثابتة، لأن إعداداتها محفوظة في ملفات على القرص بدلًا من ذلك: `wp-config.php` بالنسبة لـ WordPress، وأيًا كان ما يقرأه إطار العمل الخاص بك لتطبيق PHP بسيط.

![علامة تبويب Secrets لموقع Node.js في KPanel](https://support.kapsulehost.com/help/screenshots/site-secrets.812e0706.webp)

## كيف تُحمى القيم

تُشفَّر كل قيمة قبل أن تصل إلى قاعدة البيانات. لا يُخزَّن شيء كنص مقروء، وعرض القائمة لا يُظهر أبدًا القيمة كاملة: فهو يُظهر قناعًا يحتوي فقط على آخر أربعة أحرف، بحيث يمكنك التمييز بين مفتاحين متشابهين دون كشف أي منهما.

يحمل كل صف شارة **Encrypted** كتذكير بذلك. قراءة القيمة مرة أخرى إجراء منفصل ومتعمد وليس شيئًا يحدث بمجرد فتح الصفحة.

> **Note:** يتطلب ضبط السر وكشفه وحذفه جميعًا صلاحية **sites:write**. يمكن لعضو الفريق ذي الصلاحية للقراءة فقط رؤية المفاتيح الموجودة وأقنعتها، لكن ليس قيمها الفعلية.

## البيئتان

يُبدِّل عنصر تحكم مقسّم أعلى الصفحة بين **production** و**preview**. وهما مجموعتان منفصلتان تمامًا من المفاتيح. ضبط `STRIPE_SECRET_KEY` في بيئة الإنتاج لا يُنشئه في بيئة المعاينة، وحذفه من بيئة المعاينة لا يمسّ بيئة الإنتاج.

هذا الفصل هو بيت القصيد في هذه الميزة. بيئات المعاينة بيئات مؤقتة يمكن لأي شخص لديه وصول إلى المستودع إطلاقها، لذا ينبغي أن تحمل بيانات اعتماد اختبارية لا حيّة. راجع [نشر المعاينة لطلبات السحب](https://support.kapsulehost.com/ar-ae/site-preview) لمعرفة كيفية إنشاء بيئات المعاينة.

## إضافة سر أو تحديثه

1. اختر البيئة باستخدام عنصر التحكم المقسّم.
2. اكتب الاسم في حقل **KEY_NAME**. يفرض الحقل الأحرف الكبيرة أثناء الكتابة.
3. ضع القيمة في الحقل الثاني. تُخفى القيمة أثناء الكتابة.
4. انقر على **Set**.

ضبط مفتاح موجود بالفعل يستبدله. لا يوجد إجراء تحرير منفصل ولا خطوة تأكيد عند الاستبدال، لذا تحقق من تبويب البيئة قبل النقر على **Set**.

### قواعد أسماء المفاتيح

يجب أن يبدأ المفتاح بحرف كبير، ويمكن أن يحتوي بعد ذلك على أحرف كبيرة وأرقام وشرطات سفلية، بحد أقصى 128 حرفًا. `DATABASE_URL` و`API_KEY_V2` و`SENTRY_DSN` جميعها صالحة. يُرفض أي شيء آخر برسالة **Key يجب أن يكون UPPER_SNAKE_CASE أحرف/أرقام/شرطة سفلية**.

وهناك حدّان آخران يستحقان المعرفة:

- لا يمكن أن تكون القيمة فارغة. إرسال قيمة فارغة يُعيد الرسالة **القيمة مطلوبة**.
- لا يمكن أن تتجاوز القيمة 16 كيلوبايت. هذا حجم كافٍ لرمز مميز لكنه غير كافٍ مثلًا لسلسلة شهادات كاملة، والتي ينبغي أن تكون في ملف بدلًا من أن تكون سرًا.

## قراءة قيمة مرة أخرى

انقر على **Copy** في الصف. يقوم KPanel بفك تشفير القيمة على جانب الخادم ووضعها مباشرة في حافظتك، مع تأكيد **تم نسخ القيمة إلى الحافظة**. لا تُطبع القيمة على الشاشة، لذا فإن مشاركة الشاشة أو شخصًا يتطفل من خلف كتفك لن يلتقطها.

يُسجَّل كل كشف للقيمة في سجل تدقيق الموقع، مع ذكر من قام به وأي مفتاح، ويظهر في [سجل نشاط الموقع](https://support.kapsulehost.com/ar-ae/site-activity-log).

> **Tip:** إذا احتجت إلى التحقق من صحة قيمة دون كشفها، فقارن القناع بدلًا من ذلك. آخر أربعة أحرف كافية لتأكيد أن لديك الرمز الصحيح، وهي موجودة بالفعل على الشاشة.

## استخدام سر في تطبيقك

انسخ القيمة إلى حيث يقرأ تطبيقك إعداداته على الخادم. بالنسبة لتطبيق Node.js، يكون ذلك عادة متغير بيئة يضبطه مدير العمليات لديك، أو ملف `.env` في جذر التطبيق يُحمّله الكود عند بدء التشغيل.

> **Warning:** لا تقم بترحيل (commit) ذلك الملف إلى مستودعك. أضف `.env` إلى `.gitignore` قبل إنشائه. أي سر تم دفعه إلى مستودع git بعيد يجب التعامل معه على أنه مُسرَّب وتدويره لدى المزوّد، لأنه يبقى في السجل التاريخي حتى بعد حذف الملف.

علامة التبويب Secrets هي سجلّك لما تكون عليه القيمة، محفوظة مشفرة ومدققة، وليست ملاحظة في مدير كلمات مرور أو في سلسلة رسائل. حافظ عليها كمصدر الحقيقة الوحيد: فعندما تُدوِّر مفتاحًا لدى المزوّد، حدّثه هنا في الوقت نفسه، كي يكون لدى الشخص التالي الذي سينشر التطبيق القيمة الحالية.

## حذف سر

انقر على **Delete** في الصف. يطلب منك KPanel التأكيد بعبارة **Delete API_TOKEN؟** ويحذّر من أن التطبيق سيفقد الوصول إلى هذه القيمة عند إعادة تشغيله التالية. لا يوجد تراجع ولا نسخة محفوظة، لذا إن كنت قد تحتاج إلى القيمة مرة أخرى، انسخها أولًا.

احذف السر عندما تُلغى بيانات الاعتماد الأساسية لدى المزوّد، أو عندما يُزال الكود الذي كان يستخدمها. ترك مفاتيح قديمة متروكة يجعل من الصعب لاحقًا معرفة أيها مهم فعلًا.

## تدوير بيانات الاعتماد بأمان

الترتيب الآمن دائمًا هو: إنشاء بيانات الاعتماد الجديدة لدى المزوّد، تحديثها هنا، النشر، التأكد من أن التطبيق يعمل، ثم إلغاء بيانات الاعتماد القديمة لدى المزوّد.

القيام بذلك بالترتيب المعاكس، أي الإلغاء أولًا، يمنحك فترة يحمل فيها التطبيق قيد التشغيل بيانات اعتماد ميتة وتفشل كل طلبية تحتاجها. إذا كان التغيير محفوفًا بالمخاطر، خذ نسخة احتياطية أولًا حتى تتمكن من العودة إلى حالة معروفة وسليمة: راجع [إجراء نسخة احتياطية](https://support.kapsulehost.com/ar-ae/taking-a-backup).

## استكشاف الأخطاء وإصلاحها

**علامة التبويب Secrets غير موجودة في القائمة.** الموقع ليس موقع Node.js. تحقق من شارة المكدس التقني بجانب اسم الموقع أعلى الصفحة.

**زر Set لا يفعل شيئًا.** كلا الحقلين مطلوب. يُبلّغ الزر برسالة **مفتاح + قيمة مطلوبة** إذا كان أحدهما فارغًا.

**تم رفض المفتاح.** الأحرف الصغيرة والشرطات والنقاط والمسافات غير مسموح بها. `api-key` و`Api_Key` كلاهما يفشلان؛ `API_KEY` ينجح.

**عملية النسخ لم تضع أي شيء في الحافظة.** تمنع بعض المتصفحات الكتابة إلى الحافظة من تبويب غير نشط. انقر على الصفحة أولًا، ثم انقر على **Copy** مرة أخرى.

## إلى أين تذهب بعد ذلك

- [نشر المعاينة لطلبات السحب](https://support.kapsulehost.com/ar-ae/site-preview)، النصف الآخر من الفصل بين الإنتاج والمعاينة.
- [نشر Git لموقع](https://support.kapsulehost.com/ar-ae/site-git-deploy) لدفع الكود الذي يقرأ هذه القيم.
- [سجل نشاط الموقع](https://support.kapsulehost.com/ar-ae/site-activity-log) لمعرفة من قام بضبط سر أو كشفه أو حذفه.
