کلید سرور و routeهای سرور
دو اعتبارنامهی پروژهی ابرووا، کاری که تنظیم «server routeها به server secret نیاز دارند» انجام میدهد، و اینکه چطور log agent، check-inهای cron و نشانگرهای deploy را به کلید سرور منتقل کنید.
هر پروژهی ابرووا دو اعتبارنامه دارد. این صفحه توضیح میدهد هر کدام کجا به کار میرود، و چطور routeهایی را که فقط سرورهای شما استفاده میکنند طوری تنظیم کنید که فقط کلید سرور را بپذیرند.
دو اعتبارنامه#
| اعتبارنامه | شکل آن | جای آن |
|---|---|---|
| کلید اپ | ab_live_... | داخل اپهای موبایل و وب شما. همراه اپ منتشر میشود، پس هر کسی اپ را داشته باشد میتواند آن را استخراج کند. |
| کلید سرور | ab_srv_... | فقط روی سرورهای شما: log agent، cron jobها، اسکریپتهای deploy و SDKهای بکاند. هرگز آن را داخل اپ یا کدی که در مرورگر اجرا میشود نگذارید. |
هر دو در کنسول ابرووا در تنظیمات پروژه ← کلیدها هستند. کلید سرور فقط یک بار نمایش داده میشود، وقتی آن را میسازید یا عوض میکنید؛ آن را در secret manager یا محیط سرور خود نگه دارید.
این تنظیم چه میکند#
server routeها به server secret نیاز دارند یک سوییچ برای هر پروژه است که در کنسول ابرووا در تنظیمات پروژه ← محصولات ← ابرووا تریس قرار دارد. بهطور پیشفرض خاموش است.
وقتی روشن باشد، routeهایی که فقط سرورها و agentها صدا میزنند فقط کلید سرور را میپذیرند. درخواستی که فقط کلید اپ را دارد آنجا با 401 رد میشود:
| Route | استفادهکننده | با روشن بودن تنظیم |
|---|---|---|
| اتصال log agent | Abrova Trace Agent | کلید سرور لازم است |
| ثبت کانتینر و وضعیت آن | Abrova Trace Agent | کلید سرور لازم است |
| POST /api/cron-monitors/check-in | cron jobهای شما | کلید سرور لازم است |
| POST /api/logs/deploys | اسکریپتهای deploy شما | کلید سرور لازم است |
| POST /api/logs/ingest و /api/logs/ingest/batch | اپها، سرورها و agent | بیتأثیر؛ کلید اپ همچنان کار میکند |
| خطاها، پیامها و دادههای عملکرد | اپها و SDKهای شما | بیتأثیر؛ کلید اپ همچنان کار میکند |
برای اپهای شما چیزی تغییر نمیکند: خطاها، پیامها، دادههای عملکرد و لاگهایی که با کلید اپ فرستاده میشوند، چه این تنظیم روشن باشد چه خاموش، کار میکنند.
چرا روشنش کنیم#
کلید اپ ذاتاً عمومی است. بدون این تنظیم، کسی که آن را از اپ شما استخراج کرده میتواند:
- یک check-in جعلی cron با پیام «کار موفق بود» بفرستد و کاری را که شکست میخورد یا اجرا نمیشود پنهان کند،
- نشانگرهای deploy جعلی بنویسد،
- بهعنوان یک log agent جعلی وصل شود.
با روشن بودن این تنظیم، کلید اپ برای هیچکدام از این کارها کافی نیست.
وقتی روشنش کنید که log agent اجرا میکنید، از مانیتورینگ cron استفاده میکنید یا نشانگر deploy میفرستید. پروژهای که فقط از SDKهای موبایل و وب استفاده میکند به آن نیازی ندارد.
کلید سرور را به سرورهایتان بدهید#
دو راه برای فرستادن کلید سرور روی HTTP وجود دارد. هر دو روی همهی routeهای جدول بالا کار میکنند:
- کلید سرور را بهجای کلید بفرستید:
x-api-key: ab_srv_... - کلید اپ را در
x-api-keyنگه دارید و کلید سرور را در هدر دوم بفرستید:x-server-secret: ab_srv_...
Log agent
agent یک اعتبارنامه میگیرد، در ABROVA_TRACE_API_KEY. آن را روی کلید سرور بگذارید و agent را دوباره deploy کنید:
docker run -d \ --name abrova-trace-agent \ --restart=always \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ -e ABROVA_TRACE_API_KEY=ab_srv_your_server_secret \ ghcr.io/abrova-co/abrova-trace-agent:latest
در چیدمان چندسروری فقط collector اعتبارنامه را نگه میدارد؛ agentهای راه دور به تغییری نیاز ندارند. اپ دسکتاپ ابرووا (بهزودی) هم agent را deploy خواهد کرد و همین کلید را از شما میخواهد. Abrova Trace Agent را ببینید.
check-inهای cron
curl -X POST https://trace.abrova.ir/api/cron-monitors/check-in \
-H "X-API-Key: ab_srv_your_server_secret" \
-H "Content-Type: application/json" \
-d '{"monitor_slug": "daily-backup", "status": "ok"}'مانیتورینگ cron را ببینید.
نشانگرهای deploy
نشانگر deploy به ابرووا تریس میگوید «همین الان یک deploy انجام شد»، تا صفحهی لاگها بتواند نشان دهد از آخرین deploy چه چیزی جدید است. آن را در انتهای اسکریپت deploy صدا بزنید. همهی فیلدها اختیاریاند:
curl -X POST https://trace.abrova.ir/api/logs/deploys \
-H "x-api-key: ab_srv_your_server_secret" \
-H "Content-Type: application/json" \
-d '{
"version": "1.4.2",
"environment": "production",
"source": "api-server",
"description": "Checkout fixes"
}'| گزینه | نوع | اجباری | توضیح |
|---|---|---|---|
| version | string | خیر | نسخه یا commitی که deploy کردهاید |
| environment | string | خیر | محیط (پیشفرض: production) |
| source | string | خیر | چه چیزی deploy شده، مثلاً نام سرویس |
| description | string | خیر | متن آزاد |
| deployedAt | string | خیر | زمان به قالب ISO 8601 (پیشفرض: همین الان) |
پاسخ (201): {"success": true, "deploy": { ... }}
لاگهایی که از سرورها فرستاده میشوند
Logs REST API هیچوقت بهخاطر این تنظیم رد نمیشود، اما سرور بهتر است همچنان با کلید سرور احراز هویت کند، نه با کلید اپ. SDKهای Node.js و Laravel همین حالا کلید سروری را که با آن پیکربندیشان کردهاید میفرستند.
مطمئن شوید چیزی هنوز از کلید اپ استفاده نمیکند#
در کنسول ابرووا، تنظیمات پروژه ← محصولات ← ابرووا تریس را باز کنید. خط زیر سوییچ نشان میدهد درخواستهای اخیر روی routeهای سرور (در ۳۰ روز گذشته) چطور احراز هویت شدهاند:
- «در ۳۰ روز گذشته، N درخواست در server routeها از کلید برنامه استفاده کردهاند.»: چیزی هنوز کلید اپ را میفرستد. اول آن را پیدا کنید و به کلید سرور منتقل کنید.
- «آماده: در ۳۰ روز گذشته همهٔ درخواستهای server routeها از server secret استفاده کردهاند.»: روشن کردن امن است.
- «در ۳۰ روز گذشته هیچ درخواستی در server routeها نبوده است.»: هنوز چیزی از این routeها استفاده نمیکند؛ روشن کردن روی کسی اثر ندارد.
روشن کردن#
server routeها به server secret نیاز دارند را روشن کنید و ذخیره کنید. از آن به بعد، درخواستی روی route سرور که کلید سرور ندارد این پاسخ را میگیرد:
{
"error": "Server credential required",
"code": "server_credential_required"
}درخواستی که x-server-secret اشتباه بفرستد 401 با "code": "server_credential_invalid" میگیرد.
هر وقت بخواهید میتوانید این تنظیم را دوباره خاموش کنید؛ در این صورت کلید اپ مثل قبل روی این routeها پذیرفته میشود.
عیبیابی#
بعد از روشن کردن، check-inهای cron یا نشانگرهای deploy خطای 401 میدهند
کار هنوز کلید اپ را میفرستد. در هدر X-API-Key آن را با کلید سرور (ab_srv_...) عوض کنید، یا هدر x-server-secret را اضافه کنید. تا آن موقع مانیتور کار را اجرانشده نشان میدهد.
بعد از روشن کردن، کانتینرها بهروز نمیشوند یا قابل کنترل نیستند
agent هنوز با کلید اپ اجرا میشود. خطوط لاگ همچنان میرسند، اما agent دیگر نمیتواند کانتینرها را ثبت کند، وضعیتشان را بفرستد یا دستور بگیرد. آن را با مقدار کلید سرور در ABROVA_TRACE_API_KEY دوباره deploy کنید.
کلید سرور را عوض کردم
آن را همهجا بهروز کنید: agent، cron jobها، اسکریپتهای deploy و پیکربندی SDK بکاند. کلید قدیمی همان لحظهی عوض کردن از کار میافتد.