سنت او اسسیستم عامل لینوکسمقالات وب
چگونه LEMP stack را بر روی سنت او اس 7 نصب کنیم؟
پشته LEMP یا همان lemp stack که از اول واژه های لینوکس، NGINX، MariaDB و PHP به دست آمده است یک پیکربندی محبوب برای سرورهاست که برای توسعه و اپلیکیشن های میزبانی وب مورد استفاده قرار می گیرد. چهار جزء تشکیل دهنده این پشته به گونه ای انتخاب شده اند که می توان به جای هر کدام از آن ها از فناوری های دیگر نیز استفاده کرد. پشته LEMP یکی از گزینه های رایج و کاربردی است که در آن وب سرور آپاچی با NGINX جایگزین می شود. در این مقاله قصد داریم نحوه نصب LEMP بر روی سنت او اس 7 را با هم مرور کنیم. پس همراه وب ایده باشید.
قبل از اینکه بخواهید کار را آغاز کنید باید موارد زیر را مدنظر داشته باشید:
- برای اینکه بتوانید این پشته را نصب کنید به دسترسی روت یا کاربری با دسترسی بالا نیاز دارید
- هاست نیم سرور خود را پیکربندی کنید.
- سیستم خود را به روزرسانی نمایید.
نصب NGINX:
در این آموزش ما NGINX را از مخزن رسمی این وب سرور دانلود کرده و نصب خواهیم کرد. اگر به دنبال توزیع های دیگر هستید می توانید به صفحه ادمین NGINX بروید و راهنمای موجود را مطالعه نمایید. در ویرایشگری فایلی را در /etc/yum.repos.d/nginx.repo ایجاد کنید و موارد زیر را بدان بیفزایید:
/etc/yum.repos.d/nginx.repo
1
2 3 4 5 |
[nginx]
name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck=0 enabled=1 |
نکته: اگر از سنت او اسی استفاده می کنید که ورژن آن بالاتر از 7 است می توانید عبارت 7 را در baseurl در nginx.repofile با ورژن صحیح جایگزین نمایید:
baseurl=http://nginx.org/packages/mainline/<OS>/<OSRELEASE>/$basearch/
به روزرسانی YUM و نصب NGIMX:
به کمک دستور زیر می توانید NGINX را نصب کنید:
sudo yum update sudo yum install nginx
باید مطمئن شوید NGINX در حال اجراست و به صورت خودکار در ریبوت سیستم استارت می شود:
sudo systemctl start nginx sudo systemctl enable nginx
پایگاه داده MariaDB:
شما می توانید سرور MariaDB و MySQL/MariaDB-PHP را نصب کنید. ممکن است در طول این فرایند از شما خواسته شود پسورد روت را تنظیم کنید:
sudo yum install mariadb-server php-mysql
مطمئن شوید که NGINX در حال اجراست و به صورت خودکار در ریبوت سیستم اجرا می شود:
sudo systemctl start mariadb sudo systemctl enable mariadb
حالا اسکریپت mysql_secure_installation را اجرا کنید:
sudo mysql_secure_installation
اگر از شما خواسته نشد پسورد کاربرد روت MYSQL را به هنگام نصب MariaDB ایجاد کنید به هنگام درخواست پسورد روت در این مرحله می توانید اینتر را بزنید:
Enter current password for root (enter for none):
اگر درخواستی داشتید می توانید پسورد روت را ایجاد کنید:
Set root password? [Y/n]
در موارد زیر می توانید با عبارت Y به سوالات پاسخ دهید:
- Remove anonymous users?
- Disallow root login remotely?
- Remove test database and access to it?
- Reload privilege tables now?
به شل SQL پایگاه داده mariaDB لاگین کنید. پسورد کاربر روت را در صورت نیاز وارد نمایید:
mysql -u root -p
پایگاه داده و کاربر تستی را ایجاد کنید. باید testdb و testuser را با نام های مناسبی که در تنظیمات خود ایجاد کرده اید جایگزین نمایید. پسورد را هم با پسورد قوی جایگزین نمایید:
CREATE DATABASE testdb; CREATE USER 'testuser' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON testdb.* TO 'testuser'; quit
نصبPHP:
حالا باید به کمک دستور زیر PHP و dependencyهای آن را نصب کنید:
sudo yum install php-fpm
مطمئن شوید که PHP-FPM در حال اجراست و در بوت سیستم به صورت خودکار استارت می شود:
sudo systemctl start php-fpm sudo systemctl enable php-fpm
به PHP بگویید تنها URI هایی را برای فایل ها قبول کند که واقعا بر روی سرور وجود دارد. اینکار خطرات و اسیب پذیری هایی که در مورد PHP می تواند ایجاد شود را کاهش می دهد.
sudo sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /etc/php.ini
PHP به گونه ای تنظیم شده است که تحت کاربر آپاچی اجرا می شود اما این کاربر باید با کاربر و گروه کاربری استفاده شده توسط NGINX همخوانی داشته باشد. اگر NGINX را از طریق مزخن NGINX نصب کرده اید ، این وب سرور از کاربر و گروه nginx استفاده خواهد کرد. برای همخوانی بیشتر می توانید متغیرهای کاربر و گروه را در www.conf تغییر دهید:
sudo sed -i 's/user = apache/user = nginx/g' /etc/php-fpm.d/www.conf sudo sed -i 's/group = apache/group = nginx/g' /etc/php-fpm.d/www.conf
تنظیم پیکربندی سایت NGINX:
دایرکتوری روت را برای سایت خود ایجاد کنید. در عبارت زیر example.com را با نام دامنه خود جایگزین نمایید:
sudo mkdir -p /var/www/example.com/
پیکربندی پیش فرض فراهم شده را غیر فعال کنید:
sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.disabled
فایل پیکربندی سایت باید در مسیری به نام /etc/nginx/conf.d/ نگهداری شود. فایل پیکربندی را برای سایت خود ایجاد کنید. باز هم در عبارت های زیر example.com را با دامنه خود تعویض نمایید:
/etc/nginx/conf.d/example.com.conf
server {
listen 80 default_server; listen [::]:80 default_server; server_name example.com www.example.com; root /var/www/example.com; index index.html;
location / { try_files $uri $uri/ =404; }
location ~* \.php$ { fastcgi_pass 127.0.0.1:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; } } |
بلوک سرور بالا گزینه های پیکربندی زیر را مشخص می کند:
- NGINX در پورت 80 به اتصالات و ارتباطات ورودی گوش می دهد.
- try_files به NGINX می گوید که فایل درخواستی یا دایرکتوری در فایل سیستم روت سایت وجود دارد . اگر چنین چیزی وجود نداشته باشد خطای 404 نشان داده می شود.
- location ~* \.php$ به NGINX می گوید این پیکربندی را به همه فایل های .php در دایرکتوری روت سایت که در برگیرنده هر زیردایرکتوری شامل فایل PHP است اعمال نماید.
- علامت * در موقعیت ~* \.php$ نشان می دهد که نام فایل PHP به حروف کوچک و بزرگ حساس نیست.
- fastcgi_pass آی پی آدرس و پورت جایی که PHP به اتصالات ورودی گوش می دهد را نشان می دهد.
پشته LEMP خود را مورد بررسی قرار دهید:
PHP را ریستارت کنید و پیکربندی NGINX را دوباره بارگذاری نمایید:
sudo systemctl restart php-fpm sudo nginx -s reload
صفحه تستی را ایجاد کنید تا تایید نمایید NGINX می تواند php را رندر کند و به پایگاه داده وصل شود. testuser و password را با دسترسی های MYSQL که در بالا ایجاد کردید جایگزین نمایید:
/var/www/example.com/test.php
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<html> <head> <h2>LEMP Stack Test</h2> </head> <body> <?php echo '<p>Hello,</p>'; // Define PHP variables for the MySQL connection. $servername = "localhost"; $username = "testuser"; $password = "password"; // Create a MySQL connection. $conn = mysqli_connect($servername, $username, $password); // Report if the connection fails or is successful. if (!$conn) { exit('<p>Your connection has failed.<p>' . mysqli_connect_error()); } echo '<p>You have connected successfully.</p>'; ?> </body> </html>
|
به http://example.com/test.php در مرورگر خود بروید. شما باید پیامی همچون You have connected successfully را دریافت نمایید. اگر خطایی داشتید یا صفحه بارگذاری نشد پیکربندی های خود را دوباره بررسی کنید.بعد از اینکه مطمئن شدید همه چیز به درستی کار می کند فایل تست را حذف نمایید:
sudo rm /var/www/example.com/test.php
جالب بودش ممنونم