کار راهاندازیای که دیگر انجام نمیدهید
برپا کردن یک دیتابیس معمولاً یعنی تأمین یک سرور، نصب موتور، ساخت user ها و grant ها، تنظیم محدودیتهای اتصال، باز کردن port های درست و وصله نگه داشتن کل مجموعه. برای یک اپلیکیشن واحد این کلی کار بیثمر پیش از نوشتن یک خط منطق کسبوکار است. cdn.com.tr نمونه MySQL، MariaDB، PostgreSQL یا Redis را برای شما تأمین و اعتبارنامههای آمادهاستفاده را تحویل میدهد، بنابراین مستقیماً به اتصال اپلیکیشن خود میپرید.
اعتبارنامهها بهعنوان محیط، نه بهعنوان کد
پلتفرم نام کاربری و password را تولید و host، port، دیتابیس، user و password را بهعنوان متغیرهای محیطی به اپلیکیشن متصل تزریق میکند. این هم برای امنیت و هم برای عملیات اهمیت دارد: secret ها هرگز در تاریخچه Git یا image از نوع Docker شما نمینشینند، و چون اپلیکیشن آنها را در زمان اجرا میخواند، چرخاندن یک password یک بهروزرسانی binding است نه یک تغییر کد. این جدایی دوازدهعاملی پیکربندی از کد را بدون آنکه شما لولهکشی آن را بسازید حفظ میکند.
انتخاب میان MySQL، MariaDB و PostgreSQL
بیشتر استکهای WordPress و PHP کلاسیک، MySQL یا همخانواده جایگزینش MariaDB را انتظار دارند، و هرکدام یک پیشفرض امن برای آن اپلیکیشنهاست. PostgreSQL انتخاب درست است وقتی فریمورک یا schema شما به type ها، extension ها یا رفتار سختگیرانهتر SQL مخصوص Postgres تکیه دارد. چون هر سه بهعنوان افزونههای مدیریتشده با همان جریان attach-and-inject ارائه میشوند، تصمیم درباره چیزی است که اپلیکیشن شما انتظار دارد، نه اینکه اجرای هرکدام چقدر سخت است — همه به یک روش تأمین میشوند.
Redis مدیریتشده واقعاً برای چیست
Redis یک store درونحافظهای است، و روی پلتفرم معمولاً یکی از سه کار را انجام میدهد: cache کردن نتایج پرهزینه کوئری و fragment های رندرشده، نگهداری نشستهای کاربر تا در سراسر replica های container دوام بیاورند، و عمل کردن بهعنوان object cache از نوع WordPress برای کاهش زدنهای مکرر به دیتابیس در صفحات پرترافیک. چون بیرون از container اپلیکیشن زندگی میکند، یک سرویس مقیاسیافته یک cache و یک store نشست را به اشتراک میگذارد بهجای اینکه هر replica مال خودش را نگه دارد. همین است که مقیاسپذیری افقی را برای امکانات با حس stateful درست رفتار میدهد.
object cache از نوع Redis برای WordPress
یک سایت WordPress زیر بار، زمان شگفتآوری را صرف اجرای مجدد همان کوئریهای دیتابیس برای ساخت هر صفحه میکند. اشاره دادن WordPress به یک افزونه مدیریتشده Redis بهعنوان object cache آن یعنی آن نتایج بهجای دیتابیس از حافظه ارائه میشوند، که فشار کوئری را کم و زمان پاسخ را وقتی ترافیک در یک کمپین جهش میکند پایدار میکند. جفتشده با CDN cache برای داراییهای ثابت، Redis سمت پویا را رسیدگی میکند تا دیتابیس گلوگاه نباشد.
چرخش، بازنشانی و استفاده مشترک
password ها نباید برای همیشه بمانند، و گاهی یکی در یک لاگ یا یک اسکرینشات نشت میکند. جریان reset/rotate یک اعتبارنامه تازه تولید میکند و اپلیکیشنهای متصل آن را از طریق binding خود دریافت میکنند، بنابراین یک password که hardcode شده را در چند codebase دنبال نمیکنید. وقتی چند سرویس واقعاً یک دیتابیس را به اشتراک میگذارند، اتصال همان افزونه به هرکدام آنها را سازگار نگه میدارد، در حالی که وضعیت پلتفرم یک جای واحد برای تأیید سلامت لایه داده پس از هر تغییر میدهد.
راهاندازی گامبهگام
موتوری را که اپلیکیشنتان نیاز دارد انتخاب کنید
در پنل بخش Add-ons را باز کنید و یک دیتابیس بسازید. برای بیشتر بارهای PHP و WordPress، MySQL یا MariaDB را انتخاب کنید، یا PostgreSQL را برای اپلیکیشنهایی که امکانات Postgres را انتظار دارند. برای caching، نشستها یا یک object cache از نوع WordPress، یک افزونه Redis بسازید. هرکدام با یک نام دیتابیس، user و password تولیدشده برای شما تأمین میشود.
آن را به یک اپلیکیشن متصل کنید
از افزونه یا از تنظیمات خودِ اپلیکیشن، دیتابیس را به یک Container App، PHP Platform یا سایت WordPress متصل کنید. اتصال، جزئیات را به اپلیکیشن سیمکشی میکند بهجای وادار کردن شما به کپی دستی آنها، و همان افزونه میتواند توسط سرویسهایی که واقعاً به آن نیاز دارند به اشتراک گذاشته شود.
اعتبارنامهها را از محیط بخوانید
پس از اتصال، host، port، نام دیتابیس، نام کاربری و password بهعنوان متغیرهای محیطی در اپلیکیشن میرسند. کد شما آنها را در زمان اجرا میخواند — برای مثال یک DSN از نوع PDO یا یک کلاینت Redis ساختهشده از آن متغیرهای env — بنابراین هیچ چیز حساسی درون image پخته یا به مخزن commit نمیشود.
بگذارید WordPress و PHP خودشان را سیمکشی کنند
برای یک سایت WordPress، پلتفرم اتصال دیتابیس را در حین راهاندازی پُر میکند تا wp-config را دستی ویرایش نکنید، و یک افزونه Redis میتواند object cache را پشتیبانی کند. برای یک اپلیکیشن PHP سفارشی، پیکربندی دیتابیس و cache فریمورک خود را به نامهای env تزریقشده اشاره دهید و متصل هستید.
در صورت نیاز بچرخانید یا بازنشانی کنید
اگر یک اعتبارنامه افشا شد یا صرفاً طبق یک زمانبندی میچرخانید، از جریان reset/rotate روی افزونه استفاده کنید. یک password جدید تولید میشود و اپلیکیشنهای متصل مقدار بهروزشده را از طریق binding خود دریافت میکنند، بنابراین چرخش به معنای یک شکار deploy دستی در سراسر سرویسها نیست.
سلامت را تماشا کنید و با cdnctl خودکار کنید
از وضعیت پلتفرم برای تأیید بالا و در دسترس بودن افزونه استفاده کنید، و کارهای روتین را — ساخت یک افزونه، اتصال آن، راهاندازی یک rotate — از cdnctl پیش ببرید تا تأمین محیط بهجای کلیکهای دستی، در اسکریپتها و CI جای گیرد.
نمونه سناریوها
یک سایت محتوایی با یک دیتابیس مدیریتشده MySQL در راهاندازی و یک افزونه Redis بهعنوان object cache تأمین میشود، بنابراین صفحات از حافظه رندر میشوند و بدون کوبیدن دیتابیس از جهشهای ترافیک جان بهدر میبرند.
یک API از نوع Laravel یک افزونه مدیریتشده PostgreSQL و یک افزونه Redis برای صفها و cache متصل میکند و هر دو مجموعه اتصال را از متغیرهای محیطی تزریقشده بدون هیچ مدیریت سروری میخواند.
یک اپلیکیشن container که به چند replica مقیاس یافته، نشستها را در Redis مدیریتشده ذخیره میکند تا یک کاربر بدون توجه به اینکه کدام replica درخواست بعدی را ارائه میدهد واردشده بماند.
یک تیم password دیتابیس خود را هر فصل از پنل میچرخاند؛ اپلیکیشنهای متصل secret جدید را از طریق binding خود دریافت میکنند و از یک جاروی دستی فایلهای پیکربندی پرهیز میشود.
پرسشهای پرتکرار
کدام موتورهای دیتابیس را میتوانم تأمین کنم؟
MySQL، MariaDB و PostgreSQL بهعنوان افزونههای مدیریتشده دیتابیس در دسترساند، و Redis بهعنوان یک افزونه مدیریتشده cache در دسترس است. برای اپلیکیشنهای معمول WordPress و PHP، MySQL یا MariaDB را انتخاب کنید، و PostgreSQL را وقتی اپلیکیشن شما بهطور خاص Postgres را انتظار دارد.
اپلیکیشن من چگونه جزئیات اتصال را دریافت میکند؟
وقتی یک افزونه را به یک اپلیکیشن متصل میکنید، host، port، نام دیتابیس، نام کاربری و password بهعنوان متغیرهای محیطی تزریق میشوند. کد شما DSN یا کلاینت Redis خود را از آن متغیرها در زمان اجرا میسازد، بنابراین هیچ اعتبارنامهای در image یا مخزن زندگی نمیکند.
آیا Redis جایگزین دیتابیس است یا یک cache؟
یک cache و store درونحافظهای است، نه جایگزینی برای دیتابیس اصلی شما. از آن برای cache کردن کوئری و fragment، نشستهایی که باید در سراسر replica ها به اشتراک گذاشته شوند، و بهعنوان object cache از نوع WordPress استفاده کنید — در حالی که داده بادوام شما در MySQL، MariaDB یا Postgres میماند.
چگونه یک password دیتابیس را بدون خراب کردن اپلیکیشنها بچرخانم؟
از جریان reset/rotate روی افزونه استفاده کنید. یک password جدید تولید میشود و اپلیکیشنهای متصل آن را از طریق binding خود دریافت میکنند، بنابراین لازم نیست پیکربندی را در هر codebase ویرایش کنید. پس از آن سلامت را از طریق وضعیت پلتفرم تأیید کنید.
آیا چند اپلیکیشن میتوانند یک دیتابیس یا نمونه Redis را به اشتراک بگذارند؟
بله. همان افزونه را به هر سرویسی که واقعاً به آن نیاز دارد متصل کنید و آنها نمونه را به اشتراک میگذارند و سازگار میمانند. برای جداسازی، بهجای آن یک افزونه جداگانه بهازای هر اپلیکیشن تأمین کنید — هر دو الگو از همان جریان attach-and-inject استفاده میکنند.
آیا WordPress به پیکربندی دستی دیتابیس نیاز دارد؟
خیر. پلتفرم اتصال دیتابیس را در حین راهاندازی WordPress پُر میکند، بنابراین wp-config را برای آن دستی ویرایش نمیکنید، و یک افزونه Redis میتواند بهعنوان object cache سیمکشی شود تا کوئریهای مکرر دیتابیس در صفحات پرترافیک را کاهش دهد.