چرا یک runtime مدیریتشده PHP بر یک VPS خام برتری دارد
روی یک VPS خام، شما مالک کل استک هستید: بهروزرسانیهای سیستمعامل، pool مربوط به PHP-FPM، پیکربندی وبسرور، تمدید TLS، قواعد فایروال و daemon دیتابیس. انحراف هرکدام از اینها سایت را خراب میکند، و بیشتر این کار هیچ ربطی به اپلیکیشن شما ندارد. پلتفرم مدیریتشده PHP به شما یک runtime پشتیبانیشده PHP 8 با افزونههای معمول از پیش موجود میدهد، بنابراین مسئولیت شما به کد، وابستگیها و پیکربندی آن — بخشهایی که واقعاً مال شماست — کوچک میشود.
سازگار با فریمورکهای Laravel و Symfony
فریمورکهای مدرن یک چیدمان مشخص انتظار دارند: یک document root از نوع public/، یک دایرکتوری قابلنوشتن storage یا var، و وابستگیهای مدیریتشده با Composer. پلتفرم مستقیماً به آن نگاشت میشود — document root را روی public/ تنظیم میکنید و بقیه درخت را خصوصی نگه میدارید. افزونه phpredis روی runtime در دسترس است، بنابراین اپلیکیشنی که به Redis خودش متصل میشود بدون یک build سفارشی کار میکند؛ اگر میخواهید یک نمونه مدیریتشده Redis برایتان تأمین شود، آن یک افزونه Container Apps است.
یک دیتابیس مدیریتشده MySQL بدون آنکه DBA باشید
برپا کردن MySQL بهدست خودتان یعنی تنظیم، پشتیبانگیری، مدیریت کاربران و وصله نگه داشتن آن. اینجا دیتابیس همراه حساب مدیریتشده میآید: برای شما تأمین میشود، اعتبارنامهها در پنل نشان داده میشوند و شما آنها را در پیکربندی اپلیکیشن خود قرار میدهید. چرخاندن password یک اقدام پنلی است، و datastore جدا از runtime اپلیکیشن شما نگهداری میشود.
ساده deploy کنید — و بدانید خط لوله Git کجاست
هر پروژه PHP روی Git نیست، و یک سایت کوچک یا یک اپلیکیشن قدیمی آپلودشده از طریق file manager میتواند ظرف چند دقیقه زنده شود — این همان گردشکاری است که این پلتفرم حول آن ساخته شده است. وقتی پروژهای از آن فراتر میرود و push-to-deploy، گامهای build و لاگهای deploy میخواهد، خانه درست Container Apps با GitHub Deploy است: اپلیکیشن را یکبار کانتینری میکنید و خط لوله کامل Git را همانجا بهدست میآورید.
edge cache و WAF در جلوی PHP پویا
اپلیکیشنهای PHP برای رندر صفحات CPU واقعی مصرف میکنند، بنابراین ارائه پاسخهای قابلcache از edge مستقیماً runtime شما را از بار محافظت میکند. تصمیم میگیرید کدام مسیرها امناند که cache شوند — یک کاتالوگ عمومی یا یک مقاله — و کدام همیشه اجرا میشوند، مانند یک داشبورد کاربر واردشده یا یک endpoint از نوع POST. WAF در edge در جلوی اپلیکیشن قرار میگیرد و ترافیک injection و اسکنر را پیش از رسیدن به PHP فیلتر میکند، و Auto SSL بدون یک cron تمدید، HTTPS را معتبر نگه میدارد.
یک مسیر کنترلشده برای مدرنسازی PHP قدیمی
اپلیکیشنهای قدیمی نوشتهشده برای PHP 5 یا یک CMS نگهدارینشده، دست زدن به آنها خطرناک است، اما نمیتوانند برای همیشه روی یک runtime پایانعمر بمانند. پلتفرم به شما جایی میدهد تا کد را بیاورید، دیتابیس آن را با مجموعهکاراکتر درست به MySQL مدیریتشده منتقل کنید و آن را روی PHP 8 اجرا کنید، جایی که میتوانید deprecation ها را بیابید و اصلاح کنید. روی یک URL موقت راستیآزمایی میکنید و WAF را جلوی یک codebase که دیگر وصله امنیتی دریافت نمیکند قرار میدهید، بنابراین سطح حمله عمومی حتی پیش از پاکسازی کامل کد کاهش مییابد.
راهنمای گامبهگام deploy
اپلیکیشن PHP را بسازید و runtime را انتخاب کنید
در پنل بخش Platform را باز کنید، PHP را انتخاب کنید و نسخه PHP 8 و پلن را برگزینید. runtime با افزونههای رایجی که اپلیکیشنهای PHP انتظار دارند — PDO، mbstring، GD، OpenSSL و افزونه Redis — عرضه میشود، بنابراین برای فعال شدن یک افزونه تیکت باز نمیکنید.
کد خود را روی پلتفرم بیاورید
اپلیکیشن خود را از طریق file manager توکار آپلود کنید — برای اپلیکیشنهای فریمورکی document root را روی دایرکتوری public/ تنظیم میکنید و بقیه درخت را خصوصی نگه میدارید. اگر تیم شما push-to-deploy از Git با گامهای build میخواهد، آن گردشکار همان چیزی است که Container Apps با GitHub Deploy برای آن ساخته شده؛ پلتفرم PHP استقرار را عمداً ساده نگه میدارد.
دیتابیس مدیریتشده MySQL را متصل کنید
یک دیتابیس مدیریتشده MySQL همراه حساب هاستینگ شما تأمین میشود. host، نام، user و password آن در پنل نشان داده میشوند — خودتان آنها را در .env یا پیکربندی اپلیکیشن قرار میدهید، و میتوانید هر زمان password را از پنل بازنشانی کنید بدون دست زدن به سرور دیتابیس، چون سرور دیتابیسی وجود ندارد که شما ادارهاش کنید.
دامنه را اشاره دهید و Auto SSL صادر کنید
دامنه خود یا یک زیردامنه name.cdn.com.tr را متصل کنید، و Auto SSL گواهی را برای apex و www صادر و تمدید میکند. اکنون ترافیک ابتدا به edge شبکه cdn.com.tr میرسد، جایی که خاتمه SSL پیش از proxy شدن درخواستها به runtime از نوع PHP شما انجام میشود.
قواعد edge cache و WAF را تنظیم کنید
تعریف کنید کدام مسیرها در edge قابلcache هستند و کدام همیشه به PHP میرسند، و یک پروفایل WAF اعمال کنید. پاسخهای قابلcache بدون بیدار کردن runtime شما از edge ارائه میشوند، و یک purge از پنل یا API پس از آپلود یک نسخه جدید بیدرنگ آنها را پاک میکند.
نمونه سناریوها
یک اپلیکیشن Laravel روی runtime مدیریتشده PHP 8 با دیتابیس مدیریتشده MySQL اجرا میشود و پشت Auto SSL، edge cache و WAF ارائه میشود.
یک پرتال قدیمی با CMS سفارشی به PHP 8 با یک دیتابیس مدیریتشده منتقل، پشت WAF قرار داده و مسیربهمسیر بدون قطعی مدرن میشود.
یک API از نوع PHP دستنویس روی runtime مدیریتشده با دیتابیس مدیریتشده MySQL اجرا میشود و روی یک دامنه با خاتمه SSL در edge و فیلتر WAF در جلو در معرض دید قرار میگیرد.
پرسشهای پرتکرار
کدام افزونههای PHP روی runtime در دسترساند؟
runtime از نوع PHP 8 با افزونههایی که اپلیکیشنهای معمول به آنها وابستهاند عرضه میشود — درایورهای PDO و MySQL، mbstring، GD برای کار با تصویر، OpenSSL، cURL و افزونه phpredis برای اپلیکیشنهایی که به یک Redis از آنِ خود متصل میشوند. چون مجموعه افزونهها استاندارد است، Laravel، Symfony و بیشتر بستههای Composer بدون یک build سفارشی نصب میشوند.
آیا میتوانم یک queue worker از نوع Laravel یا کارهای زمانبندیشده اجرا کنم؟
روی پلتفرم PHP نه — این پلتفرم اپلیکیشن شما را بهازای هر درخواست وب اجرا میکند و مدیر worker یا cron ندارد. اگر اپلیکیشن شما به queue worker ها یا کارهای زمانبندیشده وابسته است، آن را در عوض بهصورت یک Container App اجرا کنید: کانتینرها فرایندهای بلندمدتاند، و آن پلتفرم همچنین Redis مدیریتشده را بهعنوان یک backend صف ارائه میدهد.
اعتبارنامههای دیتابیس چگونه به اپلیکیشن من میرسند؟
اعتبارنامههای MySQL مدیریتشده — host، نام دیتابیس، user، password — در پنل نشان داده میشوند. آنها را در فایل .env یا پیکربندی خود روی پلتفرم (بیرون از مسیر ارائهشده وب) قرار میدهید، بنابراین هرگز لازم نیست به Git commit شوند، و میتوانید بدون تیکت پشتیبانی password را از پنل بازنشانی کنید.
اپلیکیشن من PHP 7 را هدف گرفته — آیا روی PHP 8 اجرا میشود؟
بیشتر کد نگهداریشده با تنظیمات جزئی روی PHP 8 اجرا میشود، اما PHP 8 برخی رفتارهای منسوخ را حذف کرده است. رویکرد درست این است که کد را روی پلتفرم بیاورید، آن را روی یک URL موقت اجرا کنید و deprecation هایی را که مییابید پیش از تغییر دامنه اصلاح کنید — runtime مدیریتشده جای امنی برای انجام دقیق همین کار به شما میدهد.
آیا document root را روی public/ تنظیم کنم؟
بله. برای Laravel، Symfony و فریمورکهای مشابه، web root را روی دایرکتوری public/ اشاره میدهید تا بقیه درخت اپلیکیشن — شامل .env، vendor و storage — بیرون از مسیر ارائهشده وب بماند. اپلیکیشنهای قدیمی که از دایرکتوری سطحبالای خود ارائه میدهند نیز پشتیبانی میشوند؛ root را متناسب با آن تنظیم میکنید.
چگونه آپلود فایلهایی را که باید از یک deploy مجدد جان بهدر ببرند رسیدگی کنم؟
اپلیکیشن یک volume پایدار برای داده کاربر دارد، و برای اپلیکیشنهای پُررسانه میتوانید آپلودها را به object storage منتقل و آنها را بهجای runtime از طریق CDN ارائه کنید. این deploy ها را سریع و بدونوضعیت نگه میدارد، و یعنی یک deploy مجدد یا رویداد scale هرگز فایلهای آپلودشده را به خطر نمیاندازد.