مجموعه “LEMP”گروهی از نرمافزارهای منبع باز یا همان open source است که معمولا به صورت یکجا نصب میشوند تا یک سرور را به منظور هاست یک وبسایت داینامیک یا پویا و اپلیکیشنهای وبسایت فعال کند.
“LEMP” در واقع حروف اول این کلمات میباشد: Linux که سیستم عامل ماست، ENginx که به عنوان web server ایفای نقش میکند (که در واقع جایگزین Apache در مجموعه LAMP میباشد).
MySQL که پایگاه داده وبسایت ما خواهد بود و PHP که محتوای داینامیک یا پویا را پردازش میکند.
در این آموزش، قرار است یاد بگیرید چطور مجموعه LEMP را همراه با PHP 7.4 بر روی سرور CentOS 7 نصب کنید و از MariaDB به عنوان سیستم مدیریت پایگاه داده استفاده کنید. MariaDB یک جایگزین drop-in برای سرور اصلی MySQL است. drop-in در عمل به این معناست که میتوانید بدون ایجاد تنظیمات خاصی یا تغییرات در کدهای اپلیکیشنها به MariaDB تغییر وضعیت دهید.
پیشنیاز:
پیشنهاد می گردد از اکانت root برای اجرای دستورات زیر استفاده کنید در غیر اینصورت می توانید یک اکانت عادی ایجاد کرده سپس ان را عضو گروه sudoers کرده تا بتواند دستورات زین پس با sudoاجرا کند.
برای نمایش صفحات وبسایت به بازدیدکننده، از Nginx استفاده کنید، Nginx یک web server با کارایی بالا میباشد. در ابتدا برای دریافت آخرین نسخه Nginx، مخزن EPEL را نصب کنید، که شامل نرمافزارهای بیشتری برای سیستم عامل CentOS 7 است.
برای اضافه کردن مخزن EPEL به CentOS 7، دستور زیر را دنبال کنید:
sudo yum install epel-release $
چون از دستور sudo استفاده میکنید، این عملیات با دسترسیهای root انجام میشود.
بنابراین ممکن است از شما کلمه عبور بخواهد. این کار برای آن است تا اجازه دسترسی شما برای اجرای دستورات توسط دسترسیهای root تایید شود. در اینجا برای تایید نصب باید کلید Y را فشار دهید تا عملیات آغاز شود.
حالا که EPEL روی سرور شما نصب گردید، برای نصب Nginx از دستور yum استفاده کنید:
sudo yum install nginx $
هنگامی که پروسه نصب به اتمام رسید، سرویس Nginx را با استفاده از دستور زیر اجرا کنید:
sudo systemctl start nginx $
حال میتوانید با مشاهده کردن public IP خود در مرورگر، همه چیز را واکاوی و بررسی کنید تا از درست کار کردن هر آنچه نصب نمودهاید و تنظیمات و تغییراتی که اعمال کردهاید اطمینان حاصل کنید. (اگر نمیدانید آدرس public IP چیست، تیتر بعدی این مقاله برای شما نوشته شده است):
Open in a web browser:
http://server_domain_name_or_IP/
با باز شدن public IP، صفحه پیشفرض CentOS 7 Nginx را مشاهده خواهید کرد که به منظور تست و بررسی اطلاعات طراحی شده است. این صفحه شبیه به تصویر زیر است:
اگر این صفحه را مشاهده کردید یعنی web server شما به درستی نصب شده است.
برای فعال کردن Nginx به منظور بالا آمدن در boot دستور زیر را دنبال کنید:
sudo systemctl enable nginx $
سرورنمیدانید آدرس public IP شما چیست؟ ما در اینجا به برخی از راههای پیدا کردن آن اشاره کردهایم. معمولا این آدرس همان آدرسی است که شما برای اتصال به سرورتان از طریق SSH استفاده میکنید.
برای یافتن ip public در سرور خود از دستور زیر استفاده نمایید:
ip addr show eth0 | grep inet | awk ‘{ print $2; }’ | sed ‘s/\/.*$//’
این دستور برای شما یک یا دو خروجی به همراه دارد که هر دو صحیح میباشند.
از دستور زیر می توانید برای به دست اوردن ip public استفاده نمایید:
sudo yum install curl $
curl http://icanhazip.com $
سرور شما ممکن است تنها یکی از آنها را پشتیبانی کند؛ در نتیجه هر دو را امتحان کنید.
فرقی نمیکند که از کدام روش برای پیدا کردن آدرس IP استفاده میکنید. در هر صورت شما میتوانید با وارد کردن آن در آدرس بار مرورگر به سرور خود دسترسی داشته باشید.
حال که web server را نصب کردید و از عملکرد صحیح آن اطمینان حاصل کردید، نوبت به نصب MariaDB، جایگزین MySQL drop-in رسیده است. MariaDB یک شاخه سیستم مدیریت دیتابیس MySQL است که محیطش ارتقا یافته است.
مجددا میتوانید از yumبرای دستیابی و نصب نرمافزارهای مورد نیاز استفاده کنید. اما این بار تعدادی از پکیجهای “helper” را نصب کنید تا شما را در دریافت مؤلفههای مورد نیاز برای ایجاد ارتباط بین یکدیگر یاری کنند:
sudo yum install mariadb-server mariadb $
هنگامی که نصب کامل شد، باید MariaDB را طبق دستور زیر اجرا کنید:
sudo systemctl start mariadb $
حال که پایگاه داده MySQL در حال اجراست، یک اسکریپت امنیتی ساده را اجرا کنید تا برخی پیش فرض های خطرناک را حذف کرده و دسترسی به دیتابیس را محدود کند. این اسکریپت تعاملی را با اجرای دستور زیر راه اندازی کنید:
sudo mysql_secure_installation $
بلافاصله بعد از وارد کردن دستور بالا، prompt بالا میآید و از شما کلمه عبور کاربر root فعلی MariaDB را میخواهد. چون به تازگی MariaDB را نصب کردهاید، احتمالا کلمه عبور ندارید، و باید با فشردن کلید enter آن بخش را خالی بگذارید.
در این مرحله prompt از شما میخواهد که اگر تمایل دارید، برای اکانت کاربری root خود یک کلمه عبور انتخاب کنید. ادامه دهید و Y را تایپ کنید و دستورات زیر را دنبال کنید:
mysql_secure_installation prompts:
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.
Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
… Success!
برای بقیهی سوالات کافی است کلید enter را در هر prompt فشار داده و ادامه دهید تا شرایط پیشفرض را بپذیرید. این کار کاربران فرضی و database پیش فرض را حذف میکند. ورود به سیستمهای خارج از محدوده را غیرفعال میکند و همچنین دستورات جدید را بارگذاری میکند تا به سرعت تغییرات جدید بر روی MySQL اعمال شود.
آخرین کاری که باید انجام داد فعال کردن MariaDB است تا بر روی محیط بوت اجرا شود. برای این کار دستور زیر را وارد کنید:
sudo systemctl enable mariadb $
هماکنون سیستم پایگاه داده شما کاملا تنظیم شده و میتوانید کار خود را ادامه دهید.
PHP عضوی از مجموعه LEMP است که در سیستم وظیفهی بازخوانی و پردازش کدهای مربوط به نمایش محتوای پویا را بر عهده دارد. همچنین میتواند اسکریپتها را اجرا کند، برای برداشت و استفاده از اطلاعات به پایگاه داده MySQL متصل شود و محتوای پردازش شده را برای نمایش به web server ارائه دهد.
نسخه پیشفرض PHP موجود در سرورهای CentOS 7 به روز نیست. به همین دلیل لازم است که پکیج دیگری نصب کنید تا نسخههای ۷ به بالای PHP را در اختیارتان قرار دهد و بر روی سرور CentOS 7 نصب کند. Remi یکی از repository های محبوب لینوکسی است که به روزترین PHP را برای سرورهای CentOS 7 به ارمغان میآورد.
برای نصب کردن مخزن remi بر روی CentOS 7 دستور زیر را اجرا کنید:
sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm $
بعد از اتمام مراحل نصب، لازم است برای فعال کردن مخزن شامل نسخهی انتخابی PHP شما، دستوری را اجرا کنید. برای اینکه از وجود نسخهی ۷ به بالای PHP در مخزن remi مطلع شوید، این دستور را اجرا کنید:
yum –disablerepo=”*” –enablerepo=”remi-safe” list php[7-9][0-9].x86_64 $
نتیجهی آن به این شکل است:
Output
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* remi-safe: mirrors.ukfast.co.uk
Available Packages
php70.x86_64 2.0-1.el7.remi remi-safe
php71.x86_64 2.0-1.el7.remi remi-safe
php72.x86_64 2.0-1.el7.remi remi-safe
php73.x86_64 2.0-1.el7.remi remi-safe
php74.x86_64 1.0-3.el7.remi remi-safe
php80.x86_64 1.0-3.el7.remi remi-safe
در این راهنما، نسخهی PHP 7.4 را نصب میکنیم که فعلا به روزترین و با ثباتترین نسخه میباشد. برای فعال کردن پکیجی از remi که PHP 7.4 را نصب میکند دستور زیر را اجرا کنید:
sudo yum-config-manager –enable remi-php74 $
اکنون میتوانید برای نصب PHP از yum استفاده کنید. دستوری که در ادامه آمده است تمامی پکیجهای مورد نیاز برای دریافت و نصب PHP 7.4 در Nginx را نصب میکند و به آن اجازه میدهد که به دیتابیسهایی که بر پایهی MySQL هستند متصل شود:
sudo yum install php php-mysqlnd php-fpm $
برای آنکه از در دسترس بودن نسخهی مد نظر مطمئن شوید این دستور را اجرا کنید:
php –version $
نتیجهی آن به این شکل است:
Output
PHP 7.4.5 (cli) (built: Apr 14 2020 12:54:33) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
هماکنون PHP با موفقیت بر روی سیستم شما نصب شده است. در ادامه باید یک سری تغییرات در تنظیمات اولیه به وجود بیاورید. برای آنکه راحتتر بتوانید فایلهای CentOS را ویرایش کنید، پیشنهاد میکنیم که nano را نصب کنید چرا که این ویرایشگر کاربر پسند تر از vi است:
sudo yum install nano $
با استفاده از ویرایشگر nano یا هر ویرایشگر دلخواه دیگر، فایل کانفیگ /etc/php-fpm.d/www.conf را باز کنید:
sudo nano /etc/php-fpm.d/www.conf $
اکنون به دنبال هدایتگرهای user و group بگردید. اگر از ویرایشگر nano استفاده میکنید، برای جستجو اینها در داخل فایل باز شده از کلید ترکیبی ctrl+w استفاده کنید.
/etc/php-fpm.d/www.conf
…
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user’s group
; will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = apache
; RPM: Keep a group allowed to write in log dir.
group = apache
…
توجه داشته باشید که هر دو user و group برای متغیر apache تنظیم هستند، و باید آنها را به nginx تغییر دهیم:
/etc/php-fpm.d/www.conf
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
…
سپس محل هدایتگر listen را تعیین کنید. به طور پیشفرض php-fpm طبق دستورات هاست و درگاه ویژهای در TCP عمل میکند. باید این تنظیمات را به گونهای تغییر دهید که بر طبق یک فایل سوکت تعریف شده در داخل سیستم عمل کند، زیرا عملکرد کلی سرور را بهبود میبخشد.
خطی که شامل هدایتگر listen است را به عبارت زیر تغییر دهید:
/etc/php-fpm.d/www.conf
listen = /var/run/php-fpm/php-fpm.sock;
در نهایت، باید تنظیمات owner و group فایل سوکتی که در داخل دایرکتوری listen تعریف کردید را تغییر دهید. محل هدایتگرهای listen.owner و listen.group و listen.mode را تعیین کنید. این خطها به صورت پیشفرض کامنت گذاری شدهاند. با پاک کردن ; از ابتدای خطوط کامنت آنها را حذف کنید. سپس owner و group را به nginx تغییر وضعیت دهید:
/etc/php-fpm.d/www.conf
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
پس از اتمام، تغییرات را ذخیره کنید و ویرایشگر را ببندید. اگر از nano استفاده میکنید این کار را با فشردن ctrl+x و سپس Y و در نهایت enter انجام دهید.
برای فعال کردن و شروع به کار سرویس php-fpm، این دستور را اجرا کنید:
$ sudo systemctl start php-fpm
محیط PHP اکنون آماده است. در ادامه، Nginx را طوری تنظیم میکنیم که تمام درخواستها را برای اسکریپتهای PHP بفرستد تا توسط php-fpm پردازش شوند.
اکنون تمام مؤلفههای مورد نیاز نصب شدهاند. تنها تنظیمات باقیمانده که باید انجام دهید این است که به Nginx دستور دهید برای محتوای پویا از پردازشگر PHP استفاده کند.
Nginx یک دایرکتوری اختصاصی دارد که در آن میتوانید با استفاده از یک سرور بلاک هر یک از وبسایتهای هاست شده را همراه با فایل جداگانهی پیکربندی آنها تعریف کنید. این دقیقا شبیه به سرور مجازی Apache میباشد.
با وجود نصب پیشفرض، این دایرکتوری خالی است. یک فایل جدید ایجاد کنید تا به عنوان وبسایت پیشفرض PHP بر روی این سرور عمل کند، که در این صورت سرور بلاک پیشفرض تعریف شده در فایل /etc/nginx/nginx.conf را لغو خواهد کرد.
در ابتدا یک فایل جدید در دایرکتوری /etc/nginx/conf.d باز کنید:
sudo nano /etc/nginx/conf.d/default.conf $
قسمت تعریف سرور PHP که در ادامه آمده است را در فایل پیکربندی کپی کنید و فراموش نکنید که هدایتگر server_name را به گونهای جایگزین کنید که به نام دامنه یا آدرس IP اشاره داشته باشد:
/etc/nginx/conf.d/default.conf
server {
listen 80;
server_name server_domain_or_IP;
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;
}
}
پس از اتمام، تغییرات را ذخیره کنید و فایل را ببندید.
در ادامه، برای اعمال تغییرات، Nginx را restart کنید:
sudo systemctl restart nginx $
web server شما اکنون کاملا آماده شده است. در قدم بعدی قرار است هماهنگی PHP با Nginx تست شود.
اکنون که web server آماده شده است، میتوانید برای اطمینان حاصل کردن از اینکه Nginx به درستی اسکریپتهای .php را با استفاده از php-fpm کنترل میکند، یک اسکریپت تست PHP ایجاد کنید.
پیش از ایجاد اسکریپت موردنظر، به گونهای در تنظیمات پیشفرض owner در اسناد root مربوط به Nginx تغییر ایجاد کنید که یوزر معمولی sudo قادر باشد در همان مکان فایلها را ایجاد کتد.
دستوری که در ادامه آمده است پیشفرض owner اسناد root مربوط به Nginx را به یک username یا گروه تغییر میدهد که sammy نامیده میشود. پس مطمئن شوید که username و گروه برجسته شده در این دستور را جایگزین کنید تا username و گروه، سیستم شما را نمایش دهد.
sudo chown -R sammy.sammy /usr/share/nginx/html/
اکنون یک صفحه تست PHP ایجاد کنید تا مطمئن شوید web server همانطور که باید کار میکند.
یک فایل PHP جدید به اسم info.php در دایرکتوری /usr/share/nginx/html ایجاد کنید:
nano /usr/share/nginx/html/info.php $
کد PHP که در ادامه آمده است، اطلاعاتی درباره محیط فعلی PHP اجرا شده بر روی سرور نمایش میدهد:
/usr/share/nginx/html/info.php
<?phpa
phpinfo();
وقتی که این کار تمام شد، فایل را ذخیره کرده و ببندید.
حالا میتوانید آزمایش کنید و ببینید که آیا web server شما میتواند محتوایی که توسط یک اسکریپت PHP ایجاد شده نمایش دهد یا خیر. مرورگر خود را باز کنید و وارد hostname یا آدرس IP که با /info.php همراه است، شوید:
http://server_host_or_IP/info.php
با وارد شدن به IP بالا صفحهای شبیه به صفحه زیر را مشاهده خواهید کرد:
بعد از بررسی اطلاعات مرتبط درباره سرور PHP که در این صفحه قابل مشاهده است، بهتر است که فایل ایجاد شده را حذف کنید. چرا که حاوی اطلاعات حساس و مهم درباره محیط PHP و سرور CentOS شماست. میتوانید از دستور rm برای حذف کردن آن استفاده کنید:
rm /usr/share/nginx/html/info.php $
شما همواره و در هر زمان که نیاز داشتید میتوانید این فایل را ایجاد کنید.
نتیجهگیری
در این آموزش شما توانستید با استفاده از Nginx و آخرین نسخه منتشر شده PHP یک بستر انعطافپذیر برای وبسایتها و اپلیکیشنهای برپایهی PHP برای بازدیدکنندگان خود بسازید، همچنین Nginx را برای کنترل کردن درخواستهای PHP از طریق php-fpm، و دیتابیس MariaDB را به منظور ذخیره اطلاعات وبسایت خود تنظیم کردید.