LEMP به گروهی از نرم افزارهای آزاد گفته میشود که معمولا کنار هم برای میزبانی وبسایتها و وب اپهای داینامیک نصب میشوند. این اصطلاح در واقع ترکیبی از حروف اول نرم افزارهای: سیستم عامل Linux، وب سرور ENginx، دیتابیس MySQL(MariaDB) و PHP است.
پیش نیازها:
قبل از شروع به خواندن راهنما ابتدا باید یک اکانت جداگانهی غیر root برروی سرور خود داشته باشید.
نکته: اگر مشکلی هنگام اجرای Nginx داشتید مطمئن شوید قسمت SELinux فایل تنظیمات Nginx صحیح باشد یا حالت SELinuxرا به permissive یا disabled تغییر دهید. برای تغییر به حالت permissive میتوانید دستور زیر را در ترمینال اجرا کنید
$ setenforce 0
قدم اول – نصب Nginx
برای نمایش صفحات وب به بازدیدکنندگان از وب سرور مدرن و کارآمد Nginx استفاده خواهیم کرد.
برای افزودن مخزن EPEL دستور زیر را در ترمینال اجرا کنید
$ sudo yum install epel-release
پس از نصب مخزن EPEL بر روی سرور، میتوانید با استفاده از دستور زیر Nginx را نصب کنید
$ sudo yum install nginx
پس از اتمام نصب وب سرور Nginx میتوانید با کد زیر آنرا برروی سرور اجرا کنید
$ sudo systemctl start nginx
اکنون میتوانید با مراجعه به IP Public یا دامنهی سرور از طریق مرورگر وب از اجرای Nginx مطمئن شوید. در صورت انجام مراحل بطور صحیح باید با صفحهی زیر مواجه شوید
الان باید Nginx را برای اجرا بعد از boot سیستم عامل فعال کنید
$ sudo systemctl enable nginx
قدم دوم – نصب MySQL
پس از نصب و اجرای Nginx الان زمان نصب MariaDB جایگزین MySQL است. MariaDB نسخهای توسعه داده شده توسط جامعه برنامه نویسان از MySQL است.
دوباره از yum برای دریافت و نصب نرم افزار استفاده خواهیم کرد. اینبار از پکیجهای کمکی نیز برای ایجاد ارتباط میان کامپوننتها استفاده خواهیم کرد.
sudo yum install mariadb-server mariadb
زمانی که نصب تمام شد، با دستور زیر MariDB را اجرا خواهیم کرد.
$ sudo systemctl start mariadb
اکنون که دیتابیس MySQL در حال اجرا است، اسکریپت امنیتی را اجرا میکنیم که برخی از پیش فرضهای خطرناک را حذف میکند و دسترسی به دیتابیس را کمی سخت تر میکند. اسکریپت را با دستور زیر اجرا کنید
$ sudo mysql_secure_installation
از شما رمز عبور root درخواست خواهد شد که چون نرم افزار را به تازگی نصب کردهاید احتمالا رمز عبوری ندارید بنابراین آن را با زدن دکمهی Enter خالی بذارید.دوباره از شما برای تعیین رمز root درخواست میشود. با زدن دکمهی Y و ادامهی مراحل رمز عبور خود را تعیین کنید
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
New password: password
Re-enter new password: password
Password updated successfully!
Reloading privilege tables..
... Success!
برای ادامهی سوالات کافی است هربار کلید Enter را برای پذیرش حالت پیش فرض بزنید. این عملیات کاربران و دیتابیسهای نمونه را پاک کرده، دسترسی remote کاربر root را غیرفعال میکند. در آخر باید MariaDB را برای اجرا پس از boot فعال کنید
sudo systemctl enable mariadb
در این مرحله سیستم دیتابیس شما آماده است و میتوانیم به مرحلهی بعد برویم.
قدم سوم – نصب PHP
PHP کامپوننتی است که امکان پردازش کد را برای نمایش محتوای داینامیک دارد. امکان اجرای اسکریپتها، اتصال به دیتابیس MySQL برای دریافت اطلاعات، و انتقال محتوا را به وب سرور برای نمایش دارد.
بار دیگر از yum برای نصب کامپوننت مورد نیاز استفاده میکنیم. اینبار پکیجهای php-mysql و php-fpm را نیز نصب میکنیم
sudo yum install php php-mysql php-fpm
پیکربندی پردازشگر PHP
اکنون که کامپوننتهای PHP مورد نیاز نصب شده است، نیاز داریم تا چند تغییر پیکربندی برای امن کردن نصب انجام دهیم.
با دسترسی root فایل پیکربندی اصلی php-fpm را باز کنید
$ sudo vi /etc/php.ini
در این فایل بدنبال پارامتری میگردیم که مقدار cgi.fix_pathinfo را تعیین میکند که بصورت پیش فرض کامنت شده و مقدار ۱ را دارد. این تنظیم بسیار غیرامنی است چرا که باعث میشود نزدیک ترین فایل را در صورتی که فایل PHP پیدا نشد اجرا کند. این امکان اجازه میدهد کاربران درخواستهای PHP طوری بسازند که دسترسی آنها را به اجرای اسکریپتهایی که نباید دسترسی داشته باشند، فراهم کند.
با تغییر کد به حالت زیر این مشکلات رفع خواهد شد
cgi.fix_pathinfo=0
فایل را ذخیره کرده و خارج شوید. سپس فایل پیکربندی www.confphp-fpm را باز کنید
$ sudo vi /etc/php-fpm.d/www.conf
خطی را پیدا کنید که پارامتر listen را تعیین میکند و آن را به شکل زیر تغییر دهید
listen = /var/run/php-fpm/php-fpm.sock
سپس خطی را پیدا کنید که listen.ownerو listen.group را تعیین میکند و آن را از حالت کامنت در بیاورید
listen.owner = nobody
listen.group = nobody
و در آخر قسمتی را پیدا کنید که پارامترهای user و group را تعیین میکند و آن را مانند زیر تغییر دهید
user = nginx
group = nginx
سپس ذخیره کرده و فایل را ببندید. اکنون باید پردازشگر PHP را اجرا کنیم
sudo systemctl start php-fpm
سپس php-fpm را برای اجرا پس boot فعالسازی میکنیم.
$ sudo systemctl enable php-fpm
قدم چهارم – پیکربندی Nginx برای پردازش صفحات PHP
حالا ما تمام اجزای مورد نیاز را نصب کرده ایم. تنها تغییر پیکربندی که ما باید انجام دهیم این است که Nginx را برای استفاده از پردازشگر پی اچ پی برای محتوای پویا تعیین کنیم.
ما این کار را در سطح بلوک سرور انجام می دهیم (بلوک های سرور شبیه به میزبان مجازی آپاچی هستند). فایل پیکربندی بلوک سرور Nginx پیش فرض را باز کنید:
$ sudo vi /etc/nginx/conf.d/default.conf
حال با حذف شدن کامنت Nginx شروع به کار میکند:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
ما نیاز به اعمال تغییراتی برای سایت خود داریم که عبارتند از :
· درابتدا باید فایل index.php را ایجاد کنیم و به عنوان پیشفرض تعریف کنیم تا فایل های php را دراین فایل بارگذاری کنیم.
· ما همچنین باید دستورالعمل server_name را اصلاح کنیم تا به نام دامنه سرور یا آدرس IP عمومی ما اشاره شود.
· فایل پیکربندی واقعی شامل برخی از خطوط وکامنت هایی است که روال پردازش خطا را تعریف می کنند. ما این خطوط را که شامل این قابلیت هستند را از حالت کامنت خارج میکنیم.
· برای پردازش واقعی PHP، ما باید بخشی از قسمت های دیگر را از حالت کامنت خارج کنیم. ما همچنین باید یک دایرکتوری try_filesاضافه کنیم تا مطمئن شویم Nginx درخواست های بدی را به پردازنده پی اچ پی ما ارسال نمیکند.
تغییراتی که باید انجام دهید، در متن زیر با رنگ قرمز مشخص شده است. در صورت نیاز می توانید همه چیز را کپی و جایگذاری کنید، سپس مقدار نام سرور را با نام دامنه مناسب یا آدرس IPجایگزین کنید:
server {
listen 80;
server_name server_domain_name_or_IP;
# note that these lines are originally from the "location /" block
root /usr/share/nginx/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
وقتی تغییرات بالا را انجام دادید، می توانید فایل را ذخیره و بسته کنید.
$ sudo systemctl restart nginx
قدم پنجم – تست پردازش پی اچ پی در وب سرور شما
برای تست اینکه سیستم ما به درستی برای پی اچ پی پیکربندی شده است، می توانیم یک اسکریپت بسیار ساده PHP ایجاد کنیم.
ما این اسکریپت info.php نامگذاری میکنیم. برای اینکه آپاچی فایل را پیدا کند و به درستی آن را اجرا کند، باید آن را به یک پوشه بسیار خاصی که "web root" نامیده می شود، ذخیره کند.
در CentOS 7این پوشه در / usr/share/nginx/html/ واقع شده است. با تایپ کردن دستور زیر می توانیم فایل را در آن محل ایجاد کنیم:
$ sudo vi /usr/share/nginx/html/info.php
این یک فایل خالی را باز می کند که ما می خواهیم متن زیر را که کد PHPاست، قرار دهیم:
<?php phpinfo(); ?>
بعد از اتمام فایل را ذخیره کرده و آن را می بندیم.
اکنون می توانید آزمایش کنید که آیا وب سرور ما می تواند به طور صحیح محتوای تولید شده توسط یک اسکریپت PHPنمایش دهد. برای امتحان کردن این، ما فقط باید از این صفحه در مرورگر وب ما بازدید کنیم. شما دوباره به آدرس IP عمومی سرور خود نیاز دارید.
آدرس ای که می خواهید بازدید کنید عبارت است از:
http://your_server_IP_address/info.php
صفحه ای که به آن می روید باید چیزی شبیه به این باشد:
این صفحه اساسا به شما اطلاعاتی درباره سرور PHP می دهد. این صفحه برای اشکال زدایی مفید است و اطمینان حاصل می کند که تنظیمات شما به درستی اعمال شده است.
اگر بارگذاری این صفحه موفقیت آمیز بود به این معنا است که phpشما به درستی نصب شده است.
شما احتمالا می خواهید پس از این تست این فایل را حذف کنید زیرا می تواند اطلاعات مربوط به سرور شما را به کاربران ارائه دهد. برای انجام این کار، می توانید دستور زیر را اجرا کنید:
$ sudo rm /usr/share/nginx/html/info.php
ترجمه : حانیه عاصمی- امیر پناهنده