نحوه نصب LEMP stack در اوبونتو
در این مقاله از آموزش اوبونتو گامبهگام نحوه نصب و راهاندازی LEMP روی سرور اوبونتو را بررسی میکنیم و در ادامه توضیح میدهیم که چگونه Nginx، MySQL و PHP را نصب و برای اجرا آماده کنید. LEMP در واقع مجموعهای از ابزارهای نرمافزاری است که به شما کمک میکند سایتها و وباپلیکیشنهای پویا و نوشتهشده با PHP را اجرا کنید. در این ساختار، لینوکس بهعنوان سیستمعامل، Nginx بهعنوان وبسرور، MySQL برای ذخیره دادهها و PHP برای پردازش محتوای پویا به کار گرفته میشوند.
پیشنیازهای نصب و راهاندازی LEMP روی سرور اوبونتو
برای شروع، پیشنهاد میشود که روی اوبونتو از یک کاربر غیر روت با دسترسی sudo استفاده کنید و فایروال UFW نیز فعال باشد.
۱. نصب وبسرور Nginx
برای نمایش صفحات وب به کاربران، قرار است از Nginx استفاده کنیم؛ یک وبسرور قدرتمند و پرکاربرد که عملکرد بسیار خوبی دارد. برای نصب آن از مدیر بسته APT کمک میگیریم.
ابتدا فهرست مخازن سیستم را بهروزرسانی کنید:
سپس با دستور زیر Nginx را نصب کنید:
در صورت نمایش پیام تایید، کلید Y و سپس ENTER را بزنید. بعد از پایان نصب، وبسرور Nginx روی اوبونتوی شما فعال و در حال اجرا خواهد بود.
برای اطمینان از اجرا شدن سرویس، وضعیت آن را بررسی کنید:
در خروجی، باید وضعیت (Active (running را مشاهده کنید. جالب است بدانید که در اوبونتو، Nginx بهصورت پیشفرض بعد از نصب فعال میشود.
فعال کردن دسترسی HTTP در فایروال
Nginx هنگام نصب، چند پروفایل برای UFW ثبت میکند. ابتدا لیست پروفایلهای موجود را ببینید:
در حال حاضر هنوز SSL راهاندازی نشده است، پس فقط دسترسی HTTP روی پورت ۸۰ را فعال کنید:
برای بررسی وضعیت فایروال:
اگر در خروجی مشاهده کردید که Nginx HTTP مجاز شده، یعنی دسترسی HTTP برای سرور فعال است.
برای تست، در مرورگر آدرس دامنه سرور خود را وارد کنید:
اگر هنوز دامنهای متصل نکردهاید و IP عمومی سرور را نمیدانید، میتوانید با این دستورات IP را پیدا کنید:
یا:
همچنین میتوانید IP قابل دسترس از اینترنت را با دستور زیر بهدست آورید:
حالا IP بهدست آمده را در مرورگر وارد کنید. اگر صفحه پیشفرض Nginx نمایش داده شد، یعنی نصب Nginx و فعال شدن ترافیک HTTP با موفقیت انجام شده است.
۲. نصب MySQL
در این مرحله باید MySQL را نصب کنید تا ذخیره و مدیریت دادههای سایت انجام شود. MySQL یکی از رایجترین سیستمهای مدیریت پایگاه داده برای محیطهای مبتنی بر PHP است.
مثل قبل، با استفاده از apt برنامه را نصب کنید:
وقتی پیام تایید نمایش داده شد، کلید Y و سپس Enter را بزنید تا نصب انجام شود. بعد از اتمام نصب، برای افزایش امنیت و حذف تنظیمات پیشفرض ناامن، اسکریپت امنیتی MySQL را اجرا کنید:
در این مرحله از شما پرسیده میشود که آیا میخواهید افزونه VALIDATE PASSWORD را فعال کنید یا خیر؟
اگر میخواهید فعال شود، Y بزنید و در غیر این صورت هر کلید دیگری را فشار دهید.
اگر فعالش کنید، باید سطح سختگیری رمز عبور را مشخص کنید. برای مثال سطح ۲ قویترین حالت است و اگر رمز شامل عدد، حروف کوچک و بزرگ و کاراکتر خاص نباشد، خطا میدهد.
پس از این مرحله، باید برای کاربر root دیتابیس یک رمز عبور تعیین و تایید کنید. توجه داشته باشید که این کاربر با کاربر root سیستم فرق دارد و دسترسی کامل مدیریتی به دیتابیس دارد. حتی اگر روش احراز هویت MySQL نیاز به رمز نداشته باشد، باز هم بهتر است یک رمز قوی تنظیم کنید.
اگر اعتبارسنجی رمز را فعال کرده باشید، قدرت رمز به شما نمایش داده میشود و از شما میپرسد آیا میخواهید آن را تایید کنید یا نه؟ اگر مورد تایید است، Y را بزنید.
در مراحل بعدی نیز برای تمام پرسشها Y بزنید و Enter کنید تا کاربران ناشناس حذف شوند، دیتابیس تست پاک شود، دسترسیهای غیرضروری غیرفعال شود و تنظیمات امنیتی اعمال شوند. در پایان، برای اطمینان از صحت نصب، وارد کنسول MySQL شوید:
اگر همه چیز درست باشد، وارد محیط MySQL میشوید. برای خروج هم کد زیر را بنویسید:
احتمالا متوجه میشوید که بدون وارد کردن رمز وارد شدید. دلیلش این است که در اوبونتو بهصورت پیشفرض ورود کاربر root دیتابیس از طریق auth_socket انجام میشود و نه رمزعبور. این موضوع نه تنها مشکل امنیتی نیست، بلکه دسترسی را محدودتر و امنتر میکند؛ چون فقط کاربران دارای دسترسی sudo میتوانند وارد شوند. البته این حساب برای اپلیکیشنهای PHP استفاده نمیشود و بهتر است برای هر دیتابیس یک کاربر مجزا با سطح دسترسی محدود بسازید.
در این مرحله MySQL با موفقیت نصب و ایمنسازی شده است. حالا میتوانید سراغ PHP بروید که آخرین بخش LEMP است.
۳. نصب PHP
حالا نوبت نصب PHP است تا بتواند کدها را پردازش کرده و محتوای پویا تولید کند. از آنجایی که Nginx برخلاف Apache خودش بهطور مستقیم PHP را اجرا نمیکند، برای پردازش درخواستهای PHP به یک سرویس خارجی نیاز داریم.
در اینجا از PHP-FPM (مخفف FastCGI Process Manager) استفاده میکنیم. این سرویس با عملکرد بهینهتر و امکانات امنیتی بهتر، باعث میشود وبسایتهای PHPمحور سریعتر و پایدارتر اجرا شوند. برای این منظور باید بسته php-fpm را برای پردازش درخواستهای PHP و بسته php-mysql را برای برقراری ارتباط PHP با MySQL نصب کنیم. بستههای اصلی PHP بهصورت خودکار همراه با این موارد نصب خواهند شد.
برای نصب PHP 8.1-FPM و افزونه MySQL دستور زیر را اجرا کنید:
پس از نمایش پیام تایید، کلید Y و سپس ENTER را بزنید تا نصب انجام شود. برای اطمینان از اجرا شدن PHP-FPM وضعیت سرویس را بررسی کنید:
در صورت اجرای صحیح، باید وضعیت Active را مشاهده کنید:
همچنین میتوانید نسخه PHP نصبشده را بررسی کنید:
خروجی مشابه زیر خواهد بود:
در ادامه باید Nginx را طوری تنظیم کنیم که از PHP-FPM برای پردازش فایلهای PHP استفاده کند.
۴. تنظیم Nginx برای استفاده از پردازشگر PHP
بلاکهای سرور Nginx (مشابه Virtual Host در Apache) را بسازید تا تنظیمات هر سایت را جدا نگه دارید و بتوانید چند دامنه را روی یک سرور میزبانی کنید. در این راهنما از your_domain بهعنوان دامنه نمونه استفاده شده است.
در اوبونتو ۲۲٫۰۴، Nginx بهصورت پیشفرض یک بلاک سرور فعال دارد که فایلها را از مسیر /var/www/html سرو میکند. اگر قصد میزبانی چند سایت دارید، یک ساختار پوشه جدید داخل /var/www برای دامنه خود بسازید و /var/www/html را بهعنوان پیشفرض نگه دارید.
دایرکتوری ریشه وب دامنه را ایجاد کنید:
سپس مالکیت پوشه را به کاربر فعلی دهید:
حالا یک فایل کانفیگ جدید در مسیر sites-available بسازید:
محتوای زیر را داخل آن قرار دهید:
کار هر یک از این دستورها و بلاکهای location به شرح زیر است:
listen → مشخص میکند Nginx روی کدام پورت گوش دهد (اینجا پورت ۸۰ یعنی HTTP).
root → مسیر داکیومنت روت سایت.
index → ترتیب اولویت فایلهای index (بهطور معمول HTML قبل از PHP برای صفحات موقت).
server_name → دامنهها یا IPهایی که این بلاک باید پاسخ دهد.
location / → بررسی میکند آیا فایل/مسیر وجود دارد، در غیر این صورت ۴۰۴ میدهد.
location ~ .php$ → پردازش فایلهای PHP از طریق PHP-FPM.
location ~ /.ht → جلوگیری از دسترسی به فایلهای .htaccess چون Nginx آنها را پردازش نمیکند.
بعد از اتمام ویرایش، فایل را ذخیره کرده و ببندید. اگر از ویرایشگر nano استفاده میکنید، با فشردن CTRL+X، سپس Y و ENTER تغییرات را تایید کنید.
کانفیگ خود را با ایجاد لینک به فایل تنظیمات از دایرکتوری sites-enabled در Nginx فعال کنید:
کانفیگ پیشفرض را غیرفعال کنید: (در صورت نیاز میتوانید دوباره لینک پیشفرض را برگردانید.)
این به Nginx میگوید که در دفعه بعدی که بارگذاری شد، از این کانفیگ استفاده کند. برای بررسی خطاهای نگارشی فایل کانفیگ، دستور زیر را اجرا کنید:
اگر خطایی گزارش شد، قبل از ادامه کار به فایل کانفیگ خود برگردید و محتویات آن را بررسی کنید.
وقتی آماده بودید، Nginx را مجدداً بارگذاری کنید تا تغییرات اعمال شوند:
وبسایت جدید شما اکنون فعال است، اما دایرکتوری ریشه وب /var/www/your_domain هنوز خالی است. یک فایل index.html در این مسیر ایجاد کنید تا مطمئن شوید بلاک سرور جدید شما به درستی کار میکند.
محتوای زیر را در فایل قرار دهید:
حالا در مرورگر آدرس دامنه یا IP سرور را مطابق http://server_domain_or_IP باز کنید.
اگر صفحه Hello World را دیدید یعنی بلاک سرور Nginx درست کار میکند.
در این مرحله LEMP شما آماده است. مرحله بعد تست PHP است تا مطمئن شوید Nginx فایلهای PHP را اجرا میکند.
۵. تست PHP با Nginx
در این مرحله، استک LEMP شما باید به طور کامل آماده باشد. حالا میتوانید تست کنید که Nginx قادر است فایلهای .php را به درستی به پردازشگر PHP تحویل دهد.
برای این کار، یک فایل تست PHP داخل روت سایت ایجاد کنید. یک فایل جدید به نام info.php در مسیر داکیومنت روت بسازید:
محتوای زیر را داخل فایل قرار دهید. این یک کد PHP معتبر است که اطلاعات سرور شما را نمایش میدهد:
بعد از ذخیره و بستن فایل، در مرورگر آدرس دامنه یا IP سرور خود (http://server_domain_or_IP/info.php) را به همراه /info.php باز کنید.
باید صفحهای شامل اطلاعات کامل PHP سرور خود ببینید.
پس از بررسی اطلاعات مورد نیاز، بهتر است این فایل را حذف کنید چون شامل اطلاعات حساس درباره محیط PHP و سرور اوبونتوی شما است. برای حذف فایل از دستور زیر استفاده کنید:
هر زمان لازم شد دوباره میتوانید این فایل را ایجاد کنید.
۶. تست اتصال پایگاه داده از طریق PHP (اختیاری)
اگر میخواهید بررسی کنید که PHP قادر است به MySQL متصل شود و کوئری اجرا کند، میتوانید یک دیتابیس تست بسازید، دادهی آزمایشی اضافه کنید و سپس از طریق PHP آن را بخوانید.
نکته: برخی نسخههای قدیمی کتابخانه MySQL PHP از روش احراز هویت caching_sha2_authentication در MySQL 8 پشتیبانی نمیکنند، بنابراین ممکن است مجبور شوید کاربران را با mysql_native_password بسازید.
در این راهنما یک دیتابیس با نام example_database و یک کاربر با نام example_user میسازیم (شما میتوانید نامها را تغییر دهید).
ابتدا وارد کنسول MySQL شوید:
برای ایجاد یک دیتابیس جدید، دستور زیر را در کنسول MySQL خود اجرا کنید:
ساخت کاربر جدید با روش احراز هویت mysql_native_password و تعیین پسورد (پسورد خودتان را جایگزین کنید):
دادن سطح دسترسی کامل به این دیتابیس:
این دستور به کاربر example_user دسترسی کامل روی دیتابیس example_database میدهد، در حالی که از ایجاد یا تغییر سایر دیتابیسهای سرور جلوگیری میکند. حالا برای خروج از محیط MySQL از دستور زیر استفاده کنید:
برای بررسی اینکه کاربر جدید دسترسیهای لازم را دارد یا خیر، دوباره وارد کنسول MySQL شوید، اما این بار با استفاده از نام کاربری و رمز عبور مخصوص همان کاربر جدید. توجه کنید که گزینه -p باعث میشود هنگام ورود، رمز عبور کاربر example_user از شما درخواست شود.
پس از ورود به کنسول MySQL، با کد زیر مطمئن شوید که به دیتابیس دسترسی دارید:
سپس خروجی باید چیزی شبیه به این باشد:
چند ردیف نمونه در جدول تستی وارد کنید. میتوانید دستور زیر را چند بار با مقادیر متفاوت تکرار کنید:
برای اطمینان از اینکه دادهها با موفقیت در جدول شما ذخیره شدهاند، دستور زیر را اجرا کنید:
سپس خروجی باید چیزی شبیه به دستور زیر باشد:
پس از اطمینان از ثبت صحیح دادهها، خارج شوید:
حالا یک فایل PHP برای اتصال به دیتابیس و نمایش دادهها ایجاد کنید:
دستور زیر را وارد کنید:
فایل را ذخیره کنید و ببندید. حالا در مرورگر آدرس زیر را باز کنید:
http://server_domain_or_IP/todo_list.php
اگر لیست موارد وارد شده را دیدید، یعنی PHP شما به درستی به MySQL متصل شده و آماده استفاده است.
رفع مشکلات رایج
خطای ۵۰۲ Bad Gateway
رایجترین مشکل در استک LEMP زمانی رخ میدهد که Nginx نتواند با PHP-FPM ارتباط برقرار کند.
مراحل بررسی و رفع مشکل:
بررسی وضعیت PHP-FPM:
بررسی مسیر سوکت PHP-FPM:
خروجی مورد انتظار باید فایل php8.1-fpm.sock را نشان دهد.
راهحلهای رایج برای رفع مشکل:
ریاستارت کردن PHP-FPM:
مطمئن شوید مسیر سوکت در Server Block Nginx، با مسیر واقعی سوکت PHP-FPM یکی است.
دسترسی فایل را بررسی کنید تا یوزر Nginx (یعنی www-data) اجازه دسترسی داشته باشد:
مشکل دسترسی
اگر با خطاهای مربوط به مجوز دسترسی مواجه شدید، مجوزهای دایرکتوری وب را اصلاح کنید:
مشکل اتصال MySQL
اگر با مشکل اتصال به MySQL مواجه شدید، میتوانید رمز کاربر root را ریست کنید:
اجرا نشدن PHP
اگر به این مشکل برخوردید که PHP پردازش نمیشود، مراحل زیر را برای بررسی و رفع آن دنبال کنید.
بررسی ماژولهای PHP:
بررسی پیکربندی PHP-FPM و Nginx:
اطمینان حاصل کنید که فایل index.php در دستور index در تنظیمات Nginx ذکر شده است.
بررسی کنید فایل مورد نظر در مسیر وب وجود دارد:
مشاهده لاگ خطاهای Nginx برای جزئیات بیشتر:
جمعبندی
در این مقاله نحوه نصب و راهاندازی LEMP Stack روی سرور اوبونتو را مرور کردیم. با دنبال کردن این لایسنس نود۳۲ مراحل، اکنون میتوانید وبسایتها و برنامههای PHP را با بهرهگیری از Nginx بهعنوان وبسرور، MySQL برای ذخیره و مدیریت دادهها و PHP-FPM برای پردازش محتوای پویا اجرا کنید.