يك پشته نرم افزاري LEMP گروهي از نرم افزارهاي منبع باز است كه به طور معمول در كنار هم نصب مي شوند تا سرور بتواند ميزبان وب سايت هاي پويا و برنامه هاي وب باشد. اين اصطلاح در واقع حاصل يك مخفف است كه سيستم عامل لينوكس ، با سرور وب ENginx (كه جايگزين مولفه Apache يك پشته LAMP مي شود) را نشان ميدهد. داده هاي سايت در يك پايگاه داده مبتني بر MySQL ذخيره مي شوند و محتواي پويا توسط PHP پردازش مي شود.
در اين راهنما ، يك پشته LEMP را با PHP 7.4 كه روي يك سرور CentOS 7 نصب شده است ، با استفاده از MariaDB به عنوان سيستم مديريت پايگاه داده ، دريافت خواهيم كرد. MariaDB به عنوان يك جايگزين براي سرور اصلي MySQL كار مي كند ، كه در عمل به اين معني است كه مي توانيد بدون نياز به ايجاد پيكربندي يا تغيير كد در برنامه ، به MariaDB سوييچ كنيد.
پيش نيازها
قبل از شروع اين راهنما ، بايد يك حساب كاربري جداگانه و غير ريشه در سرور خود تنظيم كنيد. با انجام مراحل 1-4 در تنظيم اوليه سرور براي CentOS 7 مي توانيد نحوه انجام اين كار را ياد بگيريد.
مرحله 1 – نصب Nginx
به منظور نمايش صفحات وب براي بازديد كنندگان سايت ، قصد داريم از Nginx ، سرور وبي با كارايي بالا استفاده كنيم. براي به دست آوردن آخرين نسخه Nginx ، ابتدا مخزن EPEL را نصب خواهيم كرد كه حاوي نرم افزار اضافي براي سيستم عامل CentOS 7 است.
براي اضافه كردن مخزن CentOS 7 EPEL ، دستور زير را اجرا كنيد:
⦁ $ sudo yum install epel-release

از آنجا كه ما از يك دستور sudo استفاده مي كنيم ، اين عمليات با امتيازات اصلي انجام مي شود. از شما رمزعبور كاربر معمولي را ميخواهد تا تأييد كند كه شما اجازه اجراي دستورات داراي امتيازات اصلي را داريد. همچنين از شما خواسته مي شود نصب را تأييد كنيد ، بنابراين Y را براي ادامه فشار دهيد.
اكنون كه مخزن EPEL روي سرور شما نصب شده است ، Nginx را با استفاده از دستور yum زير نصب كنيد:
⦁ $ sudo yum install nginx

پس از اتمام نصب ، سرويس Nginx را با اين دستور راه اندازي كنيد:
⦁ $ sudo systemctl start nginx

با مراجعه به آدرس IP عمومي سرور خود در مرورگر وب ، مي توانيد بلافاصله چك كنيد كه همه چيز مطابق پيش بيني جلو ميرود (اگر اين اطلاعات را نداريد ، ميتوانيد آدرس IP عمومي خود را در زير عنوان بعدي ببينيد):
Open in a web browser:
http://server_domain_name_or_IP/

صفحه پيش فرض CentOS 7 Nginx را مشاهده خواهيد كرد ، كه براي اهداف اطلاع رساني و آزمايش ميباشد. بايد چيزي شبيه به اين ببينيد:

اگر اين صفحه را مشاهده كرديد ، اكنون سرور وب شما به درستي نصب شده است.
براي فعال كردن Nginx در بوت ، دستور زير را اجرا كنيد:
⦁ $ sudo systemctl enable nginx

چگونه آدرس IP عمومي سرور خود را پيدا كنيد
اگر نمي دانيد آدرس IP عمومي سرور شما چيست ، روش هاي مختلفي براي يافتن آن وجود دارد. معمولاً آدرسي است كه شما براي اتصال به سرور خود از طريق SSH استفاده مي كنيد.
از خط فرمان مي توانيد اين چند روش را پيدا كنيد. ابتدا مي توانيد از ابزار iproute2 استفاده كنيد تا آدرس خود را دريافت كنيد:
⦁ $ ip addr show eth0 | grep inet | awk ‘{ print $2; }’ | sed ‘s//.*$//’

اين دستور يك يا دو خط شما را به عقب باز مي گرداند. هر دو آدرس صحيح هستند ، اما رايانه شما فقط مي تواند يكي از آنها را استفاده ميكند ، بنابراين به راحتي هر يك را امتحان كنيد.
يك روش ديگر استفاده از يك جناح خارج است تا به شما بگويد سرور شما را چگونه مي بيند. مي توانيد با پرسيدن از يك سرور خاص آدرس IP خود را پيدا كنيد:
⦁ $ curl http://icanhazip.com

صرف نظر از روشي كه براي دريافت آدرس IP خود استفاده مي كنيد ، مي توانيد آن را در نوار آدرس مرورگر وب خود وارد كنيد تا به سرور خود برسيد.
مرحله 2 – نصب MariaDB
اكنون كه سرور وب خود را راه اندازي كرده ايم ، زمان آن است كه MariaDB ، يك جايگزين داخلي MySQL را نصب كنيد. MariaDB يك فورك توسعه يافته از سيستم مديريت پايگاه داده رابطه اي MySQL است.
باز هم ، مي توانيم از yum براي به دست آوردن و نصب نرم افزار خود استفاده كنيم. اين بار ، ما بسته هاي كمكي ديگري را نيز نصب خواهيم كرد كه در برقراري ارتباط با مؤلفه ها به ما كمك مي كنند:
⦁ $ sudo yum install mariadb-server mariadb

پس از اتمام نصب ، بايد MariaDB را با دستور زير شروع كنيم:
⦁ $ sudo systemctl start mariadb

اكنون كه پايگاه داده MariaDB ما در حال اجراست ، مي خواهيم يك اسكريپت امنيتي را اجرا كنيم كه برخي پيش فرض هاي پرخطر را حذف كرده و دسترسي به پايگاه داده ما را خاموش مي كند. اسكريپت تعاملي را با اجراي اين دستور شروع كنيد:
⦁ $ sudo mysql_secure_installation

اعلان از شما مي خواهد رمز عبور فعلي MariaDB خود را وارد كنيد. از آنجا كه شما به تازگي MariaDB را نصب كرده ايد ، به احتمال زياد رمز را نخواهيد داشت ، بنابراين با فشار دادن enter آن را خالي بگذاريد. سپس اعلان از شما سؤال مي كند كه آيا مي خواهيد رمز اصلي را تنظيم كنيد. پيش برويد و 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” بپذيريد. اين كار باعث حذف برخي از كاربران و ديتابيس هاي نمونه ميشود، ورود به سيستم ريشه از راه دور غيرفعال مي شود و اين قوانين جديد را بارگذاري مي كند تا MySQL فوراً با تغييراتي كه ايجاد كرده ايم منطبق شود.
آخرين كاري كه بايد انجام دهيد اين است كه MariaDB را فعال كنيد كه در بوت شروع شود. براي انجام اين كار از دستور زير استفاده كنيد:
⦁ $ sudo systemctl enable mariadb

در اين مرحله ، سيستم پايگاه داده شما اكنون تنظيم شده است و ما مي توانيم پيش برويم.
مرحله 3 – نصب PHP
PHP مؤلفه اي از ستاپ ما است كه كد را براي نمايش محتواي پويا پردازش مي كند. اين برنامه مي تواند اسكريپت ها را اجرا كند ، براي بدست آوردن اطلاعات به پايگاه داده هاي MySQL ما متصل شود و محتواي پردازش شده را براي نمايش به سرور وب ما تحويل دهد.
نسخه PHP موجود به طور پيش فرض در سرورهاي CentOS 7 منسوخ شده است ، و به همين دليل ، بايد يك مخزن بسته شخص ثالث را نصب كنيم تا PHP 7+ را دريافت كرده و آن بر روي سرور CentOS 7نصب كنيم. Remi يك مخزن بسته محبوب است كه جديدترين نسخه هاي PHP را براي سرورهاي CentOS ارائه مي دهد.
براي نصب مخزن Remi براي CentOS 7 ، دستور زير را اجرا كنيد:
⦁ $ sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

پس از اتمام نصب ، بايد دستوري اجرا كنيد تا مخزن حاوي نسخه دلخواه PHP شما فعال شود. براي بررسي اينكه نسخه هاي PHP 7+ در مخزن 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

در اين راهنما ، PHP 7.4 را نصب خواهيم كرد كه در حال حاضر به روزترين نسخه PHP است. براي فعال كردن بسته صحيح Remi براي نصب PHP 7.4 ، اجرا كنيد:
⦁ $ sudo yum-config-manager –enable remi-php74

اكنون مي توانيم پيش برويم و از yum براي نصب PHP استفاده كنيم. دستور زير كليه بسته هاي لازم را براي تنظيم PHP 7.4 در Nginx نصب مي كند و به آن اجازه مي دهد تا به پايگاه داده هاي مبتني بر MySQL متصل شود:
⦁ $ sudo yum install php php-mysqlnd php-fpm

براي تأييد اينكه PHP به عنوان نسخه انتخابي شما موجود است ، اين دستور را اجرا كنيد:
⦁ $ 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

فايل پيكربندي /etc/php-fpm.d/www.conf را با استفاده از nano يا ويرايشگر مورد نظر خود باز كنيد:
⦁ $ 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

توجه خواهيد كرد كه متغيرهاي كاربر و گروه روي 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;

در آخر ، ما بايد تنظيمات مالك و گروه را براي فايل سوكت كه اخيراً در دستورالعمل listen تعريف كرده ايم ، تغيير دهيم. دستورالعمل listen.owner ، listen.group و listen.mode را پيدا كنيد. اين خطوط بطور پيش فرض حذف مي شوند. با حذف علامت ; در شروع خط آنها را باطل كنيد. سپس ، مالك و گروه را به 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 پردازش شود.
مرحله 4 – پيكربندي Nginx براي پردازش صفحات PHP
اكنون همه اجزاي لازم نصب شده است. تنها تغيير پيكربندي كه بايد انجام دهيم اين است كه به 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 را مجدداً ريستارت كنيد تا تغييرات اعمال شود:
⦁ $ sudo systemctl restart nginx

اكنون سرور وب شما كاملاً تنظيم شده است. در مرحله بعدي ، ادغام PHP را با Nginx آزمايش خواهيم كرد.
مرحله 5 – تست پردازش PHP در وب سرور خود
اكنون كه سرور وب شما تنظيم شده است ، مي توانيم يك اسكريپت آزمايشي PHP ايجاد كنيم تا مطمئن شويم Nginx با كمك php-fpm به درستي اسكريپت هاي .php را اداره مي كند.
قبل از ايجاد اسكريپت ، ما در تنظيمات پيش فرض مالكيت در ريشه سند Nginx تغييري ايجاد خواهيم كرد ، به طوري كه كاربر sudo معمولي ما قادر به ايجاد فايل هايي در آن مكان باشد.
دستور زير مالكيت ريشه اصلي پيش فرض Nginx را به كاربر و گروهي به نام sammy تغيير مي دهد ، بنابراين حتماً نام كاربري و گروه هايلايت شده را در اين دستور جايگزين كنيد تا نام كاربري و گروه سيستم شما منعكس شود.
⦁ $ sudo chown -R sammy.sammy /usr/share/nginx/html/

اكنون يك صفحه PHP تست ايجاد ميكنيم تا مطمئن شويم كه سرور وب همانطور كه انتظار مي رود كار ميكند.
يك فايل PHP جديد با نام info.php در ديركتوري / usr / share / nginx / html ايجاد كنيد:
⦁ $ nano /usr/share/nginx/html/info.php

كد PHP زير اطلاعات مربوط به محيط PHP فعلي را كه روي سرور در حال اجرا است نمايش مي دهد:
/usr/share/nginx/html/info.php

phpinfo();

پس از اتمام ، فايل را ذخيره كنيد و ببنديد.
اكنون مي توانيم آزمايش كنيم كه آيا سرور وب ما مي تواند محتواي توليد شده توسط يك اسكريپت PHP را به درستي نمايش دهد. به مرورگر خود برويد و به نام ميزبان يا آدرس IP سرور خود كه به دنبال آن /info.phpنوشته شده است، دسترسي پيدا كنيد:
http://server_host_or_IP/info.php

صفحه اي شبيه به اين را مشاهده خواهيد كرد:

پس از بررسي اطلاعات مربوط به سرور PHP خود از طريق آن صفحه ، بهتر است فايل ايجاد شده را حذف كنيد زيرا حاوي اطلاعات حساسي در مورد محيط PHP و سرور CentOS شما است. براي حذف آن فايل مي توانيد از rm استفاده كنيد:
⦁ rm /usr/share/nginx/html/info.php

در صورت نياز بعداً مي توانيد اين فايل را دوباره بازيابي كنيد.
نتيجه
در اين راهنما ، با استفاده از Nginx به عنوان سرور وب و آخرين نسخه PHP ، يك پايه انعطاف پذير براي ارائه وب سايت هاي PHP و برنامه ها به بازديد كنندگان خود ايجاد كرديد. شما Nginx را به گونه اي تنظيم كرده ايد تا بتوانيد درخواست هاي PHP را از طريق php-fpm انجام دهيد ، همچنين يك پايگاه داده MariaDB را براي ذخيره اطلاعات وب سايت خود تنظيم نموده ايد.