ایجاد Secrets و استفاده در متغییر محیطی
Environment Variables و Secrets در Runflare
در Runflare میتوانید تنظیمات برنامه و اطلاعات حساس را با استفاده از Environment Variables و Secrets مدیریت کنید.
این قابلیت باعث میشود تنظیمات و اطلاعات حساس برنامه از Source Code جدا باشند و بتوان برای محیطهای مختلف مانند Development، Staging و Production مقادیر متفاوتی تعریف کرد.
Environment Variable چیست؟
Environment Variable مقداری است که برنامه آن را از محیط اجرای خود دریافت میکند.
برای مثال:
APP_ENV=production
PORT=3000
API_URL=https://api.example.com
از Environment Variable معمولاً برای تنظیمات عمومی و غیرحساس برنامه استفاده میشود، مانند:
- آدرس API
- Port برنامه
- نوع Environment
- تنظیمات عمومی Application
- Feature Flag
Secret چیست؟
Secret برای نگهداری اطلاعات حساس و محرمانه استفاده میشود؛ اطلاعاتی که نباید در Source Code یا Repository قرار بگیرند.
برای مثال:
DATABASE_PASSWORD=********
API_TOKEN=********
JWT_SECRET=********
PRIVATE_KEY=********
اطلاعاتی مانند Password، Token، Private Key و سایر Credentialهای دسترسی باید به عنوان Secret مدیریت شوند.
Build-time Variable چیست؟
Build-time Variable متغیری است که در زمان Build برنامه مورد استفاده قرار میگیرد.
Source Code
↓
Build
↓
Build Artifact
اگر مقدار یک Variable در زمان Build داخل فایلهای نهایی Application قرار بگیرد، ممکن است بخشی از Build Artifact شود.
بنابراین اطلاعات حساس را به صورت Build-time وارد Frontend نکنید.
Runtime Variable چیست؟
Runtime Variable متغیری است که هنگام اجرای برنامه در اختیار Application قرار میگیرد.
Application Start
↓
Environment / Secret
↓
Running Application
استفاده از Runtime Variable این امکان را فراهم میکند که تنظیمات برنامه از Source Code جدا باشند و برای محیطهای مختلف مقادیر متفاوتی داشته باشند.
همچنین در مواردی میتوان مقدار تنظیمات Runtime را بدون تغییر Source Code مدیریت کرد.
چه چیزی را Environment Variable قرار دهیم؟
برای مقادیر غیرحساس و تنظیمات عمومی برنامه از Environment Variable استفاده کنید.
مثال:
APP_ENV=production
LOG_LEVEL=info
PORT=3000
API_URL=https://api.example.com
چه چیزی را Secret قرار دهیم؟
برای اطلاعات حساس و محرمانه از Secret استفاده کنید.
مثال:
DATABASE_PASSWORD=********
DATABASE_USER=********
API_TOKEN=********
JWT_SECRET=********
PRIVATE_KEY=********
خلاصه
Environment Variable: برای نگهداری تنظیمات عمومی و غیرحساس برنامه استفاده میشود.
Secret: برای نگهداری اطلاعات حساس و محرمانه استفاده میشود.
Build-time: برای مقادیری استفاده میشود که در زمان Build برنامه مورد نیاز هستند.
Runtime: برای مقادیری استفاده میشود که هنگام اجرای Application در اختیار برنامه قرار میگیرند.
نکته مهم: هر مقداری که به Browser ارسال شود، دیگر یک Secret محسوب نمیشود؛ زیرا کاربر امکان مشاهده آن را دارد.
ایجاد Secret و استفاده از آن در Environment Variable در Runflare
۱. آمادهسازی Application
ابتدا باید Application را به گونهای تنظیم کنید که مقادیر موردنیاز خود را از Environment دریافت کند.
برای مثال، در پروژه Django میتوان Secret Key را به جای قرار دادن مستقیم در Source Code، از Environment دریافت کرد.

۲. ورود به بخش Secrets
وارد آیتم موردنظر شوید و سپس به بخش Secrets بروید.

۳. ایجاد Secret جدید
در بخش Secrets میتوانید فهرست Secretهای ایجادشده را مشاهده کنید.
برای ایجاد یک Secret جدید، روی گزینه ایجاد Secret کلیک کنید و اطلاعات موردنظر را وارد نمایید.
برای ایجاد Secret، اطلاعات زیر را وارد کنید:
- Name: یک نام دلخواه برای شناسایی Secret وارد کنید.
- Key: کلید Secret را وارد کنید. برای مثال، برای یک رمز عبور میتوانید از PASSWORD و برای یک توکن از API_TOKEN استفاده کنید.
- Value: مقدار واقعی Secret را در این بخش وارد کنید.
- در نهایت روی گزینه افزودن کلیک کنید تا Secret ایجاد شود.

برای مثال، برای تنظیمات پروژه Django میتوانید Secret مربوط به کلید Django را ایجاد کنید:

۴. ایجاد Secret
پس از ثبت اطلاعات، Secret موردنظر ایجاد میشود.

۵. ورود به بخش Environment Variables
پس از ایجاد Secret، وارد بخش Environment Variables آیتم موردنظر شوید.

۶. افزودن Environment Variable
روی گزینه افزودن متغیر محیطی کلیک کنید.

۷. اتصال Secret به Environment Variable
در صفحه بازشده، اطلاعات موردنظر را وارد کنید.
برای مثال، اگر در Application از متغیر DJANGO_SECRET_KEY استفاده کردهاید، تنظیمات را به صورت زیر انجام دهید:
- نام کامل متغیر: نام متغیری را که Application انتظار دارد دریافت کند وارد کنید؛ برای مثال <DJANGO_SECRET_KEY.</li
- حالت: حالت را روی Secret قرار دهید؛ زیرا مقدار این متغیر حساس و محرمانه است.
- نوع استفاده: گزینه Running را انتخاب کنید؛ زیرا این مقدار باید هنگام اجرای Application در دسترس باشد.
- نام Secret: نام Secretای را که در مرحله قبل ایجاد کردهاید انتخاب یا وارد کنید.
- کلید (Key): کلیدی را وارد کنید که هنگام ایجاد Secret در بخش Secrets تعریف کردهاید.
پس از تکمیل اطلاعات، تنظیمات را ذخیره کنید. از این پس مقدار Secret در زمان اجرای Application با نام DJANGO_SECRET_KEY در اختیار Django قرار خواهد گرفت.

۸. اتصال موفق Secret به Application
پس از انجام مراحل بالا، Secret به صورت امن به Application متصل میشود و در زمان اجرای برنامه در اختیار آن قرار میگیرد.
در این روش، مقدار واقعی Secret در Source Code قرار نمیگیرد و Application آن را از طریق Environment دریافت میکند.
به عنوان مثال، Django میتواند مقدار DJANGO_SECRET_KEY را از Environment دریافت کند و از آن در زمان اجرای Application استفاده نماید.
نکته امنیتی: مقدار واقعی Secret را در Source Code، Repository یا فایلهای عمومی پروژه قرار ندهید.