نکات کلیدی
- فایل های وردپرس را در مسیر اختصاصی وب سایت قرار دهید و مالکیت فایل ها را با کاربری که PHP-FPM تحت آن اجرا می شود هماهنگ کنید.
- همچنین اجرای فایل های PHP در مسیرهای بارگذاری شده توسط کاربر را محدود کنید و دسترسی به فایل های پنهان، نسخه پشتیبان و فایل های پیکربندی را ببندید.
- ابتدا صفحه های پرترافیک را شناسایی کنید و زمان پاسخ PHP، تعداد درخواست های پایگاه داده و مصرف منابع را در ساعات شلوغ بررسی کنید.
نصب وردپرس روی یک سرور مجازی به شما امکان میدهد منابع میزبانی، نسخه نرمافزارها و تنظیمات امنیتی را متناسب با وبسایت خود مدیریت کنید. برای این کار، سه جزء اصلی لازم است: Nginx برای دریافت درخواستهای وب، PHP-FPM برای اجرای کدهای وردپرس و MariaDB برای نگهداری اطلاعات سایت. در ادامه، مسیر آمادهسازی اوبونتو 24.04 و اتصال این اجزا را به شکلی منظم مرور میکنیم.
معماری موردنیاز برای میزبانی وردپرس
مرورگر بازدیدکننده درخواست را به Nginx میفرستد. این وبسرور فایلهای ثابت مانند تصویر، CSS و JavaScript را مستقیماً ارائه میکند و درخواستهای PHP را به سرویس PHP-FPM میسپارد. وردپرس برای خواندن نوشتهها، کاربران، تنظیمات و اطلاعات افزونهها نیز با MariaDB ارتباط میگیرد. اگر هر کدام از این سرویسها متوقف باشد یا تنظیمات ارتباطی آن اشتباه باشد، سایت ممکن است با خطای 502، خطای اتصال به پایگاه داده یا صفحه سفید روبهرو شود.
| جزء | وظیفه | نکته پیکربندی |
|---|---|---|
| Nginx | دریافت درخواست HTTP و HTTPS و ارائه فایلهای ثابت | تنظیم server block برای دامنه و ارسال PHP به سوکت FPM |
| PHP-FPM | اجرای فایلهای PHP وردپرس | انتخاب نسخه سازگار و محدودکردن تعداد workerها بر اساس RAM |
| MariaDB | ذخیره دادههای وردپرس | ساخت دیتابیس و کاربر مجزا با حداقل دسترسی لازم |
| گواهی TLS | رمزنگاری ارتباط بازدیدکننده و سایت | فعالسازی HTTPS و تمدید خودکار گواهی |
آمادهسازی اوبونتو و نصب سرویسها
ابتدا وارد سرور شوید و فهرست بستهها را تازهسازی کنید. اگر بهروزرسانی مخزن با Timeout روبهرو شد، پیش از ادامه وضعیت DNS، مسیر اینترنت و دسترسی سرور به مخزن بستهها را بررسی کنید. تغییر بیهدف چند مخزن همزمان، عیبیابی را دشوار میکند؛ بنابراین از فایل تنظیمات فعلی نسخه پشتیبان بگیرید و فقط منبع موردنیاز را اصلاح کنید.
پس از آماده شدن مخازن، Nginx، MariaDB و بستههای PHP متناسب با نسخه اوبونتو نصب میشوند. برای وردپرس معمولاً افزونههای PHP مربوط به MySQL، پردازش تصویر، XML، چندبایتی، curl، فشردهسازی و مدیریت فایل لازماند. پس از نصب، وضعیت سرویسها را جداگانه با systemctl بررسی کنید و مطمئن شوید هر سه سرویس در وضعیت active قرار دارند. فعالسازی در زمان بوت نیز باعث میشود پس از راهاندازی مجدد ماشین، سرویسها خودکار اجرا شوند.
تنظیم PHP-FPM متناسب با حافظه سرور
مهمترین پارامترهای استخر PHP-FPM تعداد فرایندهای آغازین، حداقل و حداکثر workerها و روش مدیریت آنها هستند. در حالت dynamic تعداد فرایندها با میزان تقاضا تغییر میکند؛ حالت static تعداد مشخصی فرایند را نگه میدارد و حالت ondemand هنگام ورود درخواست فرایند میسازد. انتخاب روش به الگوی ترافیک سایت بستگی دارد و یک مقدار ثابت برای همه سرورها مناسب نیست.
پارامتر pm.max_children سقف درخواستهای PHP همزمان را محدود میکند. برای تعیین آن، مصرف واقعی RAM هر worker را در زمان بار بررسی کنید و بخشی از حافظه را برای سیستمعامل، MariaDB، Nginx و سرویسهای جانبی کنار بگذارید. تقسیم حافظه قابلاختصاص بر میانگین مصرف هر worker، تخمین اولیهای برای سقف فرایندها میدهد. سپس با آزمون بار و پایش swap آن را اصلاح کنید.
اگر تعداد workerها بیش از ظرفیت RAM باشد، سیستم به استفاده از swap روی میآورد و زمان پاسخ کل وبسایت افزایش مییابد. از طرف دیگر، سقف بسیار پایین میتواند در زمان افزایش بازدید باعث صفشدن درخواستها شود. معیار مناسب، ترکیب زمان پاسخ، مصرف حافظه، تعداد درخواستهای همزمان و پیامهای خطای PHP-FPM است.
ساخت پایگاه داده و آمادهسازی فایلهای وردپرس
برای هر نصب وردپرس یک پایگاه داده و یک کاربر مستقل ایجاد کنید. نام دیتابیس، نام کاربر و گذرواژه قوی را جداگانه ثبت کنید و دسترسی کاربر را فقط به همان پایگاه داده محدود نگه دارید. استفاده از حساب مدیریتی MariaDB در فایل پیکربندی وردپرس انتخاب مناسبی نیست؛ زیرا در صورت افشای اطلاعات اتصال، دامنه دسترسی مهاجم بسیار گستردهتر میشود.
فایلهای وردپرس را در مسیر اختصاصی وبسایت قرار دهید و مالکیت فایلها را با کاربری که PHP-FPM تحت آن اجرا میشود هماهنگ کنید. مجوز پوشهها و فایلها باید بهاندازهای باشد که وردپرس بتواند عملیات ضروری را انجام دهد، اما نوشتن عمومی روی کل مسیر سایت مجاز نباشد. فایل wp-config.php شامل اطلاعات حساس اتصال است و باید از دسترسی مستقیم وب محافظت شود.
پیکربندی Nginx و اتصال دامنه
برای دامنه، یک server block جدا تعریف کنید. مقدار server_name باید دامنه اصلی و در صورت نیاز نسخه www را پوشش دهد. مسیر root به پوشه نصب وردپرس اشاره میکند و درخواستهای PHP باید فقط از طریق سوکت یا پورت تعیینشده PHP-FPM پردازش شوند. پیش از بارگذاری تنظیمات جدید، دستور بررسی پیکربندی Nginx را اجرا کنید؛ سپس سرویس را reload کنید تا تغییرات با کمترین وقفه اعمال شود.
وردپرس برای پیوندهای یکتا به بازنویسی مسیرها نیاز دارد. در پیکربندی Nginx باید درخواستهایی که فایل یا پوشه واقعی نیستند به index.php هدایت شوند. همچنین اجرای فایلهای PHP در مسیرهای بارگذاریشده توسط کاربر را محدود کنید و دسترسی به فایلهای پنهان، نسخه پشتیبان و فایلهای پیکربندی را ببندید. این موارد از اشتباهات رایج در پیکربندی اولیه هستند.
فعالسازی HTTPS و کنترلهای امنیتی
پس از آنکه رکورد DNS دامنه به IP سرور اشاره کرد، گواهی TLS را دریافت و مسیر HTTP را به HTTPS هدایت کنید. گواهی معتبر باعث رمزنگاری ارتباط و فراهمشدن قابلیتهایی مانند ورود امن و استفاده از امکانات مرورگر میشود. پس از فعالسازی، آدرس سایت و نشانی وردپرس را با پروتکل HTTPS تنظیم کنید و محتوای ترکیبی را بررسی کنید تا فایلهای سایت از HTTP بارگذاری نشوند.
- برای SSH از کلید عمومی استفاده کنید و ورود مستقیم root را در صورت امکان محدود سازید.
- بهروزرسانی سیستمعامل، PHP، وردپرس و افزونهها را در برنامه نگهداری قرار دهید.
- فایروال را به پورتهای موردنیاز محدود کنید؛ دسترسی پایگاه داده نباید از اینترنت عمومی باز باشد.
- از فایلها و دیتابیس نسخه پشتیبان مستقل تهیه و روند بازیابی را آزمایش کنید.
- لاگهای Nginx، PHP-FPM و MariaDB را برای خطاهای پرتکرار پایش کنید.
آزمون نهایی و عیبیابی خطاهای متداول
پس از نصب، صفحه اصلی، ورود به پیشخوان، بارگذاری رسانه، ذخیره نوشته و نصب یک افزونه را آزمایش کنید. اگر خطای 502 مشاهده شد، ابتدا وضعیت PHP-FPM و مسیر سوکت تعریفشده در Nginx را بررسی کنید. خطای اتصال پایگاه داده معمولاً از اشتباه بودن نام دیتابیس، کاربر، گذرواژه یا میزبان اتصال ناشی میشود. خطای دسترسی هنگام بارگذاری فایل نیز اغلب به مالکیت و مجوز پوشه wp-content مربوط است.
برای سنجش ظرفیت، فقط صفحه اصلی را یک بار باز نکنید. چند درخواست همزمان ایجاد کنید، مصرف CPU و RAM را ببینید و زمان پاسخ را در طول آزمون ثبت کنید. اگر منابع به سقف میرسند، ابتدا افزونههای پرمصرف و کوئریهای پایگاه داده را بررسی کنید؛ افزایش منابع سرور بدون شناخت گلوگاه ممکن است هزینه را بالا ببرد، اما مشکل اصلی را برطرف نکند.
پرسشهای پرتکرار
برای نصب وردپرس روی VPS چه سرویسهایی لازم است؟
حداقل به وبسرور مانند Nginx، محیط اجرای PHP از طریق PHP-FPM و پایگاه دادهای مانند MariaDB نیاز دارید. دامنه و گواهی TLS نیز برای انتشار امن سایت لازماند.
چرا سایت وردپرسی پس از تنظیم Nginx خطای 502 میدهد؟
معمولاً Nginx نمیتواند به PHP-FPM متصل شود. وضعیت سرویس، نسخه سوکت یا پورت، مجوز دسترسی سوکت و لاگ هر دو سرویس را بررسی کنید.
چطور تعداد پردازشهای PHP-FPM را تعیین کنم؟
مصرف RAM هر worker را در بار واقعی اندازه بگیرید، حافظه موردنیاز سیستم و دیتابیس را کنار بگذارید و pm.max_children را با آزمون تدریجی تنظیم کنید.
آیا دیتابیس وردپرس باید روی همان VPS باشد؟
برای سایتهای کوچک و متوسط میتواند روی همان ماشین اجرا شود؛ در بارهای بالاتر یا نیازهای دسترسپذیری، جداسازی پایگاه داده میتواند مدیریت منابع را بهتر کند.
بعد از نصب چه کاری را نباید فراموش کرد؟
پشتیبانگیری منظم و آزمون بازیابی، بهروزرسانی امنیتی، محدودسازی دسترسی SSH و بررسی لاگها را از همان ابتدا در برنامه نگهداری قرار دهید.
جمعبندی
راهاندازی موفق وردپرس روی VPS فقط به نصب چند بسته محدود نیست. هماهنگی Nginx و PHP-FPM، تنظیم محافظهکارانه تعداد workerها، ساخت حساب مستقل MariaDB، مجوزهای درست فایلها و فعالسازی HTTPS در پایداری سایت نقش مستقیم دارند. پس از راهاندازی نیز پایش منابع، بهروزرسانی و آزمون بازیابی نسخه پشتیبان را ادامه دهید تا زیرساخت با رشد وبسایت قابل اتکا باقی بماند.
تفکیک محیط آزمایشی و عملیاتی
پیش از نصب افزونههای متعدد یا تغییر نسخه PHP، یک محیط آزمایشی جداگانه در نظر بگیرید. در این محیط میتوانید سازگاری قالب، افزونهها، نسخه پایگاه داده و تنظیمات کش را بررسی کنید، بدون آنکه بازدیدکنندگان سایت اصلی تحت تأثیر قرار بگیرند. نسخه آزمایشی باید تا حد امکان از نظر نسخه نرمافزار و تنظیمات PHP به محیط اصلی نزدیک باشد؛ در غیر این صورت نتیجه آزمون قابل تعمیم نخواهد بود.
برای انتقال تغییرات از آزمایش به تولید، فایلها و پایگاه داده را با روش مشخص همگام کنید. اطلاعات حساس مانند رمز دیتابیس، کلیدهای امنیتی و نشانیهای محیط آزمایشی نباید به شکل ناخواسته در نسخه نهایی باقی بمانند. پس از انتقال، نشانی سایت، پیوندهای یکتا، وظایف زمانبندیشده و ارسال ایمیل را بررسی کنید.
کش، پایگاه داده و بهبود زمان پاسخ
افزایش منابع VPS همیشه اولین راهکار کندی وردپرس نیست. افزونههای پرمصرف، کوئریهای سنگین، تصاویر بزرگ و نبود کش میتوانند زمان پاسخ را افزایش دهند. ابتدا صفحههای پرترافیک را شناسایی کنید و زمان پاسخ PHP، تعداد درخواستهای پایگاه داده و مصرف منابع را در ساعات شلوغ بررسی کنید. سپس کش صفحه، کش شیء یا بهینهسازی پایگاه داده را متناسب با معماری سایت به کار بگیرید.
برای تصاویر، ابعاد متناسب با محل نمایش و قالب فشرده مناسب انتخاب کنید. بارگذاری تنبل برای تصاویر پایین صفحه میتواند درخواستهای اولیه را کاهش دهد. فایلهای CSS و JavaScript غیرضروری را در صفحات نامرتبط بارگذاری نکنید. هر تغییر را جداگانه اندازهگیری کنید تا مشخص باشد کدام اقدام واقعاً زمان پاسخ را بهتر کرده است.
پشتیبانگیری و برنامه بازیابی
نسخه پشتیبان باید هم فایلهای سایت و هم پایگاه داده را پوشش دهد. نگهداری تنها یک نسخه روی همان VPS در برابر خرابی دیسک یا حذف ناخواسته محافظت کافی ایجاد نمیکند؛ نسخهای مستقل در فضای جداگانه نگه دارید. تناوب پشتیبانگیری را بر اساس میزان تغییر محتوا تعیین کنید؛ فروشگاهی با سفارشهای روزانه به برنامهای پرتکرارتر از یک وبسایت کمتغییر نیاز دارد.
بازیابی را بهصورت دورهای آزمایش کنید. وجود فایل پشتیبان بدون آزمون بازگردانی، زمان واقعی بازیابی را مشخص نمیکند. یک نسخه را در محیط آزمایشی برگردانید، اتصال دیتابیس، رسانهها، ورود مدیر و صفحات مهم را بررسی کنید و زمان لازم برای بازگشت سرویس را ثبت کنید.
چکلیست پیش از انتشار سایت
- دامنه به IP صحیح اشاره میکند و گواهی HTTPS معتبر است.
- سرویسهای Nginx، PHP-FPM و MariaDB پس از reboot فعال میشوند.
- کاربر دیتابیس دسترسی محدود دارد و اطلاعات اتصال در فایل پیکربندی محافظت شده است.
- مجوز فایلها و پوشهها با نیاز وردپرس و کاربر PHP-FPM هماهنگ است.
- فایلهای حساس و مسیرهای مدیریتی در برابر دسترسی غیرمجاز محافظت شدهاند.
- پشتیبان مستقل تهیه شده و روند بازیابی آن آزمایش شده است.
- مصرف CPU، RAM، فضای دیسک و لاگها قابل پایش است.
مدیریت نسخه PHP و افزونههای موردنیاز
نسخه PHP را صرفاً بر اساس جدیدترین شماره موجود انتخاب نکنید؛ نسخه وردپرس، قالب و افزونههای ضروری باید با آن سازگار باشند. پیش از ارتقا، فهرست افزونههای فعال و نسخه آنها را ثبت کنید و در محیط آزمایشی، ورود به پیشخوان، ذخیره نوشته، پردازش تصویر و عملیات فروشگاه را بررسی کنید. پس از ارتقا نیز لاگ PHP را برای هشدارهای deprecated و خطاهای fatal بخوانید.
نصب همه افزونههای PHP موجود در مخزن همیشه انتخاب مناسبی نیست. تنها ماژولهای موردنیاز را نصب کنید تا سطح نگهداری و احتمال تداخل کاهش یابد. اگر افزونهای به ماژولی خاص نیاز دارد، وابستگی آن را مستند کنید و پس از بهروزرسانی PHP بررسی کنید که ماژول در همان نسخه فعال باشد؛ فعالبودن یک افزونه در CLI لزوماً به معنی فعالبودن آن در FPM نیست.
پیکربندی امن فایلها و دسترسیها
کاربر سیستمعامل که PHP-FPM با آن اجرا میشود باید به مسیرهای لازم دسترسی نوشتن داشته باشد، اما نباید کل سیستم فایل یا مسیرهای خارج از سایت را در اختیار بگیرد. مسیر wp-content معمولاً برای بارگذاری رسانه و برخی عملیات افزونهها به نوشتن نیاز دارد؛ فایلهای هسته وردپرس و تنظیمات حساس بهتر است تا حد ممکن فقط برای مدیر سیستم قابل تغییر باشند.
از قرار دادن فایلهای پشتیبان، dump پایگاه داده و فایلهای تنظیمات در مسیر عمومی وب خودداری کنید. اگر ابزار پشتیبانگیری خروجی را موقتاً در پوشه سایت قرار میدهد، انتقال آن به فضای خصوصی و حذف نسخه عمومی را در فرایند خودکار بگنجانید. دسترسی مستقیم به فایلهای مخفی و فایلهای پیکربندی نیز باید در Nginx مسدود شود.
پایش سلامت سرویسها در طول زمان
پایش فقط برای زمان بروز قطعی نیست. روند مصرف RAM، رشد فضای دیسک، تعداد درخواستهای PHP و تعداد اتصالهای دیتابیس را ثبت کنید تا افزایش تدریجی بار دیده شود. اگر مصرف حافظه در هر هفته بالا میرود، ممکن است افزونهای حافظه را آزاد نکند یا حجم کش و لاگها کنترل نشده باشد. بررسی روندها نسبت به مشاهده یک عدد لحظهای اطلاعات بیشتری میدهد.
برای هر سرویس یک آزمون ساده سلامت تعریف کنید: پاسخ HTTP از Nginx، اجرای یک مسیر PHP و امکان اتصال محلی به MariaDB. هشدارها را طوری تنظیم کنید که خطای کوتاه و گذرا موجب اعلانهای متعدد نشود، اما توقف واقعی سرویس یا پرشدن دیسک بیخبر نماند. زمان آخرین پشتیبان موفق را نیز در داشبورد نگهداری ثبت کنید.
پرسشهای متداول
برای نصب وردپرس روی VPS چه سرویسهایی لازم است؟
Nginx، PHP-FPM و MariaDB به همراه دامنه و گواهی HTTPS.
علت خطای 502 چیست؟
معمولاً ارتباط Nginx با PHP-FPM یا مسیر سوکت آن درست تنظیم نشده است.
چطور تعداد workerهای PHP را تعیین کنم؟
مصرف RAM هر worker را اندازه بگیرید و pm.max_children را با توجه به حافظه آزاد و آزمون بار تنظیم کنید.

کمپین ابتکار نو
کمپین ایده های نو
کمپین آینده روشن
کمپین طراحی مدرن