استک LEMP یک بسته نرم‌افزاری متن باز شامل Linux (حرف L)، Nginx (حرف E)، MySQL یا MariaDB (حرف M) و PHP (حرف P) جایگزین استک LAMP با این تفاوت که وب‌سرور Nginx به جای Apache می‌باشد.

در این آموزش نحوه نصب و کانفیگ اولیه استک LEMP را در CentOS 7 آموزش خواهیم داد.

پیش نیازها

برای نصب استک LEMP بر روی سرور، مطمئن شوید که با یک کاربر با دسترسی sudo به سرور وارد شده‌اید.

مرحله 1 – نصب Nginx

وب‌سرور Nginx در مخزن یا Repository پیش‌فرض در CentOS 7 موجود نیست، پس می‌بایست از مخازن EPEL استفاده کنیم. برای افزودن مخزن EPEL از دستور زیر استفاده می‌کنیم.

yum install epel-release

سپس Nginx را با دستور زیر نصب می‌کنیم.

yum install nginx

پس از نصب Nginx، با دستورات زیر Nginx را استارت و فعال می‌کنیم.

systemctl start nginx
systemctl enable nginx

به منظور بررسی اجرا و فعال شدن Nginx، می‌توانید IP سرور را در مرورگر وارد نمایید.

آموزش پیدا کردن IP سرور

جهت یافتن آدرس IP سرور، می‌توان از یکی از دستورات زیر استفاده نمود.

ip a s | sed -ne '/127.0.0.1/!{s/^[ \t]*inet[ \t]*\([0-9.]\+\)\/.*$/\1/p}'
curl https://ipecho.net/plain; echo
curl https://icanhazip.com

مرحله 2 – نصب MySQL یا MariaDB

پس از نصب موفقیت آمیز وب سرور (Nginx)، زمان نصب MariaDB می‌باشد. پکیج MariaDB در مخازن CentOS 7 وجود دارد.

با دستور زیر MariaDB را نصب می‌کنیم.

yum install mariadb-server mariadb

جهت استارت و فعال کردن MariaDB از دو دستور زیر استفاده می‌کنیم.

systemctl start mariadb
systemctl enable mariadb

پس از نصب MariaDB، یک اسکریپت امنیتی ساده را جهت حذف برخی از محتویات پیش‌فرض و همچنین قفل کردن دسترسی به سیستم دیتابیس را اجرا می‌کنیم.

mysql_secure_installation

پس از اجرای دستور، اعلان از شما رمز عبور فعلی MySQL را می‌خواهد. با توجه به اینکه در حال حاضر MySQL بدون رمز عبور می‌باشد، با یک Enter به مرحله بعد می‌رویم. پس از سوال تنظیم رمز عبور، Y را بزنید و برای روت MySQL خود یک رمز وارد نمایید.

برای بقیه سوالات فقط کافیست Enter بزنید تا مقادیر پیش‌فرض ذخیره شود. این کار باعث حذف برخی از کاربران و دیتابیس‌های نمونه، غیر فعال کردن ورود از راه دور به دیتابیس خواهد شد.

نمونه خروجی:

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

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!

مرحله 3 – نصب PHP

بصورت پیش‌فرض در مخازن CentOS 7 از PHP 5.4 استفاده می‌شود. بنابراین ما از مخازن Remi جهت نصب PHP 7.2 استفاده خواهیم کرد.

دستور زیر مخازن Remi را به سرور CentOS 7 اضافه خواهد کرد.

yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

پس از اضافه شدن مخازن Remi، بسته yum-utils را نصب می‌کنیم و remi-php72 را فعال می‌کنیم.

yum install yum-utils
yum-config-manager --enable remi-php72

اکنون می‌توانیم PHP-FPM و چند ماژول متداول PHP را با دستور زیر نصب نماییم.

yum install php php-mysql php-fpm

کانفیگ پردازشگر PHP

با استفاده از دستور sed می‌توانیم تغییرات مورد نظر را در فایل‌های php.ini و www.conf انجام دهیم.

sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /etc/php.ini
sed -i 's/user = apache/user = nginx/g' /etc/php-fpm.d/www.conf
sed -i 's/group = apache/group = nginx/g' /etc/php-fpm.d/www.conf

همچنین می‌توانید با استفاده از ویرایشگری نظیر vi یا nano تغییرات را بصورت زیر اعمال نماییم.

فایل php.ini را بصورت زیر ویرایش می‌کنیم.

vi /etc/php.ini

خط زیر را پیدا می‌کنیم.

;cgi.fix_pathinfo=1

و بصورت زیر ویرایش می‌کنیم.

cgi.fix_pathinfo=0

سپس فایل کانفیگ PHP-FPM که www.conf می‌باشد را ویرایش می‌کنیم.

vi /etc/php-fpm.d/www.conf

خطی که شامل پارامتر listen می‌باشد را پیدا کنید و بصورت زیر ویرایش نمایید.

listen = /var/run/php-fpm/php-fpm.sock

سپس خطوطی که تنظیمات مربوط به listen.owner و listen.group را شامل می‌باشد را پیدا کنید و بصورت زیر ویرایش کنید.

listen.owner = nginx
listen.group = nginx

و در آخر خطوطی که مربوط به تنظیمات user و group می‌باشد را از apache به nginx تغییر دهید.

و در نهایت با دستورات زیر PHP-FPM را استارت و فعال کنید. منظور از فعال کردن، قرار دادن سرویس در استارت‌آپ CentOS 7 می‌باشد.

systemctl enable php-fpm
systemctl start php-fpm

مرحله 4 – کانفیگ Nginx برای پردازش صفحات PHP

در این مرحله می‌بایست فایل کانفیگ بلاک server وب‌سرور Nginx را ویرایش کنیم تا Nginx بتواند فایل‌های PHP را پردازش کند.

ابتدا دستور زیر را جهت ویرایش فایل default.conf اجرا می‌کنیم.

vi /etc/nginx/conf.d/default.conf

در صورتی که محتوایی در این فایل وجود داشت، تمامی خطوط را حذف می‌نماییم. سپس محتویات زیر را به فایل اضافه و فایل را ذخیره می‌کنیم.

server {
    listen       80;
    server_name  server_domain_name_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;
    }
}

نکته: مقدار server_name را با IP یا نام دامین خود جایگزین نمایید.

در پایان Nginx را با دستور زیر ریستارت می‌کنیم.

systemctl restart nginx

مرحله 5 – بررسی اجرای صحیح PHP بر روی Nginx

دستور زیر را جهت ایجاد فایل info.php وارد نمایید.

vi /usr/share/nginx/html/info.php

عبارت زیر را درون فایل ایجاد شده کپی و فایل را ذخیره کنید.

<?php phpinfo();

سپس در مرورگر خود IP سرور را وارد و در انتها info.php/ اضافه نمایید. (بصورت زیر)

http://your_server_IP_address/info.php