مدیریت سکرتها
Secret Manager ابرکلیک اطلاعات حساس (مانند کلیدهای خصوصی و credentials ایمیج رجیستریهای خصوصی) را در سطح پروژه ذخیره میکند و به اپلیکیشنها اختصاص میدهد.
تفاوت سکرت و متغیر محیطی
| ویژگی | متغیر محیطی (env_vars) | سکرت (secrets) |
|---|---|---|
| محدوده | هر اپ | سطح پروژه — قابل استفاده مجدد |
| نوع | رشته ساده | نوعدار: registry یا kv |
| مورد استفاده | پیکربندی اپلیکیشن | credentials رجیستری، کلیدهای مشترک |
| رمزنگاری | در دیتابیس رمز میشود | در دیتابیس رمز میشود |
از سکرت برای اطلاعات حساسی که بین چند اپ به اشتراک گذاشته میشوند استفاده کنید. از متغیر محیطی برای پیکربندی خاص هر اپ.
انواع سکرت
registry — رجیستری خصوصی
برای pull کردن ایمیج از رجیستریهای خصوصی (مثلاً ghcr.io یا Docker Hub private) استفاده میشود.
{
"registry": "ghcr.io",
"username": "mahyar",
"password": "ghp_xxxxxxxxxxxxxxxxxx"
}
سکرت نوع registry بهعنوان imagePullSecret در Kubernetes تبدیل میشود و به اپلیکیشن اختصاص داده میشود.
kv — کلید-مقدار
برای ذخیره کلیدهای API، توکنها یا هر مقدار دلخواه:
{
"STRIPE_KEY": "sk_live_xxxxxxxxxxxx",
"GITHUB_TOKEN": "ghp_yyyyyyyyyyyy",
"CUSTOM_SECRET": "value"
}
کلیدهای سکرت نوع kv بهعنوان متغیر محیطی به اپلیکیشن تزریق میشوند.
نام و نوع سکرت پس از ایجاد غیرقابل تغییر است. برای تغییر نوع یا نام، سکرت را حذف کرده و دوباره بسازید.
ایجاد سکرت
از طریق داشبورد
۱. وارد داشبورد ابرکلیک شوید
۲. پروژه موردنظر را باز کنید
۳. به بخش سکرتها بروید
۴. روی ایجاد سکرت کلیک کنید
۵. نام سکرت و نوع (registry یا kv) را انتخاب کنید
۶. فیلدهای data را پر کنید
۷. تأیید کنید
از طریق API
curl -X POST https://api.abrclick.ir/v1/projects/{projectId}/secrets \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"name": "ghcr-pull-secret",
"type": "registry",
"data": {
"registry": "ghcr.io",
"username": "mahyar",
"password": "ghp_xxxxxxxxxx"
}
}'
سرور فیلدهای حساس (مثلاً password) را رمزنگاری میکند. شما مقادیر را plaintext ارسال میکنید.
اختصاص سکرت به اپلیکیشن
پس از ایجاد سکرت در سطح پروژه، باید آن را به یک اپ اختصاص دهید.
از طریق داشبورد
۱. وارد صفحه اپلیکیشن شوید ۲. تب سکرتها را باز کنید ۳. روی اضافه کردن سکرت کلیک کنید ۴. سکرت موردنظر را از لیست پروژه انتخاب کنید ۵. اپ را ریدپلوی کنید (الزامی برای اعمال)
از طریق API
# اختصاص
curl -X POST https://api.abrclick.ir/v1/apps/{appId}/secrets/{secretId} \
-H "Authorization: Bearer <token>"
# جداسازی
curl -X DELETE https://api.abrclick.ir/v1/apps/{appId}/secrets/{secretId} \
-H "Authorization: Bearer <token>"
پس از اختصاص یا جداسازی سکرت، اپ باید ریدپلوی شود تا تغییرات اعمال شوند.
مثال: استفاده از ایمیج خصوصی GitHub
فرض کنید شما یک ایمیج Docker خصوصی در ghcr.io/mahyar/my-app:latest دارید.
۱. ایجاد سکرت رجیستری
curl -X POST https://api.abrclick.ir/v1/projects/{projectId}/secrets \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"name": "github-registry",
"type": "registry",
"data": {
"registry": "ghcr.io",
"username": "mahyar",
"password": "ghp_xxxxxxxxxxxxxxxxxxxx"
}
}'
۲. اختصاص سکرت به اپ
از داشبورد وارد اپ شوید و سکرت github-registry را اضافه کنید.
۳. ریدپلوی اپ
abrclick deploy --image ghcr.io/mahyar/my-app:latest
حالا Kubernetes میتواند ایمیج خصوصی را pull کند.
مثال: سکرت KV برای کلیدهای API
curl -X POST https://api.abrclick.ir/v1/projects/{projectId}/secrets \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"name": "api-keys",
"type": "kv",
"data": {
"STRIPE_KEY": "sk_live_xxxxxxxxxxx",
"SENDGRID_KEY": "SG.xxxxxxxxxxxxxxx"
}
}'
پس از اختصاص به اپ، این کلیدها بهعنوان process.env.STRIPE_KEY و process.env.SENDGRID_KEY در دسترس هستند.
بهروزرسانی سکرت
curl -X PATCH https://api.abrclick.ir/v1/projects/{projectId}/secrets/{secretId} \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"data": {
"password": "ghp_newtoken"
}
}'
نام و نوع سکرت غیرقابل تغییر است. فقط data قابل بهروزرسانی است.
حذف سکرت
curl -X DELETE https://api.abrclick.ir/v1/projects/{projectId}/secrets/{secretId} \
-H "Authorization: Bearer <token>"
حذف یک سکرت آن را از تمام اپلیکیشنهای اختصاصیافته جدا میکند. اپها باید ریدپلوی شوند تا سکرت از محیط حذف شود.
رفع خطاهای رایج
PULL_IMAGE_FAILED — ایمیج قابل دسترس نیست
علت: سکرت رجیستری اشتباه یا اختصاص نیافته.
راهحل:
۱. بررسی کنید username و password درست باشد
۲. بررسی کنید سکرت به اپ اختصاص داده شده باشد
۳. اپ را ریدپلوی کنید
سکرت نوع kv تزریق نمیشود
علت: اپ بعد از اختصاص ریدپلوی نشده.
راهحل: اپ را از داشبورد یا CLI ریدپلوی کنید:
abrclick deploy
SECRET_NAME_CONFLICT — نام تکراری
علت: سکرتی با همین نام در پروژه وجود دارد.
راهحل: نام دیگری انتخاب کنید.