سرورلینوکس

آموزش اجرای چندین نسخه PHP روی یک سرور با استفاده از Apache و PHP-FPM در آلمالینوکس 9

مقدمه

وب‌سرور آپاچی (Apache) از قابلیتی به نام Virtual Hosts (میزبان‌های مجازی) برای مدیریت چندین دامنه روی یک نمونه واحد استفاده می‌کند. به طور مشابه، PHP-FPM با استفاده از یک دیمون (Daemon) به مدیریت چندین نسخه PHP روی یک سرور می‌پردازد. با ترکیب Apache و PHP-FPM می‌توانید چندین اپلیکیشن وب مبتنی بر PHP را میزبانی کنید؛ به طوری که هر کدام از نسخه متفاوتی از PHP استفاده کنند و همگی روی یک سرور و به صورت همزمان در حال اجرا باشند. این قابلیت بسیار کاربردی است، زیرا اپلیکیشن‌های مختلف ممکن است به نسخه‌های متفاوتی از PHP نیاز داشته باشند، در حالی که برخی پیکربندی‌های سرور مانند LAMP استاندارد فقط توانایی مدیریت یک نسخه را دارند. ترکیب آپاچی با PHP-FPM همچنین راه‌حلی مقرون‌به‌صرفه‌تر نسبت به میزبانی هر اپلیکیشن روی یک سرور مجزا است.

PHP-FPM گزینه‌های پیکربندی پیشرفته‌ای نیز برای لاگ‌برداری stderr و stdout، ری‌استارت در مواقع اضطراری و تولید تطبیقی پردازش‌ها (Adaptive Process Spawning) ارائه می‌دهد که برای سایت‌های با ترافیک بالا بسیار مفید است. در واقع، استفاده از آپاچی به همراه PHP-FPM یکی از بهترین معماری‌ها برای میزبانی اپلیکیشن‌های PHP، به ویژه از نظر عملکرد محسوب می‌شود.

نکته: از آنجایی که سیستم‌عامل CentOS 8 به پایان عمر خود (EOL) رسیده است، در این آموزش نسخه مدرن‌تر، یعنی آلمالینوکس 9 (AlmaLinux 9) را جایگزین کرده‌ایم. همچنین از نسخه‌های جدیدتر و پشتیبانی‌شده‌ی PHP (8.1 و 8.2) استفاده کرده‌ایم.

در این آموزش شما دو وب‌سایت PHP را روی یک سرور پیکربندی خواهید کرد. هر سایت از دامنه خودش استفاده کرده و هر دامنه نسخه PHP اختصاصی خود را اجرا خواهد کرد. دامنه اول site1.your_domain نسخه PHP 8.1 و دامنه دوم site2.your_domain نسخه PHP 8.2 را اجرا خواهند کرد.

پیش‌نیازها

  • یک سرور آلمالینوکس 9 (AlmaLinux 9) با حداقل ۱ گیگابایت رم که طبق راهنمای راه‌اندازی اولیه سرور پارمین کلود پیکربندی شده باشد (شامل یک کاربر غیر روت با دسترسی sudo و فایروال فعال).
  • وب‌سرور آپاچی روی سرور شما نصب و پیکربندی شده باشد.
  • یک نام دامنه که به سرور پارمین کلود شما اشاره داشته باشد. در این آموزش از دو زیردامنه استفاده خواهید کرد که هر کدام باید با یک رکورد A در تنظیمات DNS شما تعریف شوند: site1.your_domain و site2.your_domain.

مرحله ۱ — نصب نسخه‌های PHP 8.1 و 8.2 با PHP-FPM

پس از تکمیل پیش‌نیازها، اکنون نسخه‌های 8.1 و 8.2 PHP را همراه با PHP-FPM و چندین افزونه (Extension) اضافی نصب خواهید کرد. برای نصب چندین نسخه از PHP، باید مخزن Remi را روی سیستم خود نصب و فعال کنید. این مخزن جدیدترین نسخه‌های پشته PHP را برای توزیع‌های مبتنی بر RHEL (مانند آلمالینوکس) فراهم می‌کند.

با استفاده از دستور زیر، مخزن Remi (و مخزن EPEL) را به سیستم خود اضافه کنید:

bash
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm

ابتدا بررسی کنیم چه نسخه‌هایی از PHP در مخزن Remi در دسترس هستند:

bash
sudo dnf module list php

خروجی مشابه زیر را خواهید دید که نشان‌دهنده در دسترس بودن نسخه‌های مختلف است:

text
Output
Remi’s Modular repository for Enterprise Linux 9 – x86_64
Name Stream Profiles Summary
php remi-8.1 common [d], devel, minimal PHP scripting language
php remi-8.2 common [d], devel, minimal PHP scripting language
php remi-8.3 common [d], devel, minimal PHP scripting language

سپس، ماژول پیش‌فرض PHP را ریست کرده و ماژول PHP 8.1 از Remi را فعال کنید:

bash
sudo dnf module reset php
sudo dnf module enable php:remi-8.1

اکنون نصب php81 و php81-php-fpm را آغاز کنید:

bash
sudo dnf install php81 php81-php-fpm -y
  • پکیج php81 یک متاپکیج است که برای اجرای اپلیکیشن‌های PHP استفاده می‌شود.
  • پکیج php81-php-fpm مفسر FastCGI Process Manager را فراهم می‌کند که به عنوان یک دیمون اجرا شده و درخواست‌های Fast/CGI را دریافت می‌کند.

اکنون همین روند را برای نسخه PHP 8.2 تکرار کنید. php82 و php82-php-fpm را نصب کنید:

bash
sudo dnf module reset php
sudo dnf module enable php:remi-8.2
sudo dnf install php82 php82-php-fpm -y

پس از نصب هر دو نسخه PHP، سرویس php81-php-fpm را استارت کرده و آن را برای اجرا در زمان بوت سرور فعال کنید:

bash
sudo systemctl start php81-php-fpm
sudo systemctl enable php81-php-fpm

سپس وضعیت سرویس را بررسی کنید تا از فعال بودن آن مطمئن شوید:

bash
sudo systemctl status php81-php-fpm

خروجی باید نشان دهد که سرویس active (running) است.

این روند را برای سرویس php82-php-fpm نیز تکرار کنید:

bash
sudo systemctl start php82-php-fpm
sudo systemctl enable php82-php-fpm
sudo systemctl status php82-php-fpm

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


مرحله ۲ — ایجاد ساختار دایرکتوری برای هر دو وب‌سایت

در این بخش، شما یک دایرکتوری ریشه (Document Root) و یک صفحه ایندکس برای هر کدام از دو وب‌سایت خود ایجاد می‌کنید.

ابتدا دایرکتوری‌های ریشه را برای هر دو سایت ایجاد کنید:

bash
sudo mkdir /var/www/site1.your_domain
sudo mkdir /var/www/site2.your_domain

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

bash
sudo chown -R apache:apache /var/www/site1.your_domain
sudo chown -R apache:apache /var/www/site2.your_domain
sudo chmod -R 755 /var/www/site1.your_domain
sudo chmod -R 755 /var/www/site2.your_domain

سپس یک فایل info.php در داخل دایرکتوری ریشه هر وب‌سایت ایجاد کنید. این فایل اطلاعات نسخه PHP هر وب‌سایت را نمایش خواهد داد. با سایت اول شروع کنید:

bash
sudo nano /var/www/site1.your_domain/info.php

خط زیر را به آن اضافه کنید:

/var/www/site1.your_domain/info.php

php
<?php phpinfo(); ?>

فایل را ذخیره کرده و ببندید. اکنون فایل info.php را برای سایت دوم کپی کنید:

bash
sudo cp /var/www/site1.your_domain/info.php /var/www/site2.your_domain/info.php

وب‌سرور شما اکنون دایرکتوری‌های ریشه مورد نیاز برای سرو دادن اطلاعات به بازدیدکنندگان را دارد. در مرحله بعد، آپاچی را برای کار با دو نسخه متفاوت PHP پیکربندی خواهید کرد.


مرحله ۳ — پیکربندی آپاچی برای هر دو وب‌سایت

در این بخش، شما دو فایل پیکربندی Virtual Host ایجاد می‌کنید. این کار به دو وب‌سایت شما اجازه می‌دهد تا به صورت همزمان با دو نسخه متفاوت PHP کار کنند.

برای اینکه آپاچی بتواند این محتوا را سرو کند، باید فایل‌های میزبان مجازی (Virtual Host) با دستورالعمل‌های صحیح ایجاد کنید. شما دو فایل پیکربندی جدید در دایرکتوری /etc/httpd/conf.d/ ایجاد خواهید کرد.

ابتدا فایل پیکربندی جدیدی برای site1.your_domain ایجاد کنید. در اینجا آپاچی را هدایت می‌کنید تا محتوا را با استفاده از PHP 8.1 رندر کند:

bash
sudo nano /etc/httpd/conf.d/site1.your_domain.conf

محتوای زیر را اضافه کنید. مطمئن شوید که مسیر دایرکتوری، نام سرور و نسخه PHP با تنظیمات شما مطابقت داشته باشد:

/etc/httpd/conf.d/site1.your_domain.conf

apache
<VirtualHost *:80>
ServerAdmin admin@site1.your_domain
ServerName site1.your_domain
DocumentRoot /var/www/site1.your_domain
DirectoryIndex info.php
ErrorLog /var/log/httpd/site1.your_domain-error.log
CustomLog /var/log/httpd/site1.your_domain-access.log combined
<IfModule !mod_php7.c>
<FilesMatch \.(php|phar)$>
SetHandler “proxy:unix:/var/opt/remi/php81/run/php-fpm/www.sock|fcgi://localhost”
</FilesMatch>
</IfModule>
</VirtualHost>

در این فایل:

  • DocumentRoot: مسیر دایرکتوری ریشه وب‌سایت شماست.
  • ServerName: آدرس URL زیردامنه اول شماست.
  • SetHandler: مسیر فایل سوکت PHP-FPM برای نسخه 8.1 را مشخص می‌کند.

فایل را ذخیره کرده و ببندید.

سپس، فایل پیکربندی جدیدی برای site2.your_domain ایجاد کنید. این زیردامنه را برای اجرای PHP 8.2 تنظیم خواهید کرد:

bash
sudo nano /etc/httpd/conf.d/site2.your_domain.conf

محتوای زیر را اضافه کنید:

/etc/httpd/conf.d/site2.your_domain.conf

apache
<VirtualHost *:80>
ServerAdmin admin@site2.your_domain
ServerName site2.your_domain
DocumentRoot /var/www/site2.your_domain
DirectoryIndex info.php
ErrorLog /var/log/httpd/site2.your_domain-error.log
CustomLog /var/log/httpd/site2.your_domain-access.log combined
<IfModule !mod_php7.c>
<FilesMatch \.(php|phar)$>
SetHandler “proxy:unix:/var/opt/remi/php82/run/php-fpm/www.sock|fcgi://localhost”
</FilesMatch>
</IfModule>
</VirtualHost>

فایل را ذخیره کرده و ببندید. سپس، فایل پیکربندی آپاچی را از نظر خطاهای نحوی (Syntax) بررسی کنید:

bash
sudo apachectl configtest

باید خروجی Syntax OK را مشاهده کنید:

text
Output
Syntax OK

در نهایت، سرویس آپاچی را ری‌استارت کنید تا تغییرات اعمال شوند:

bash
sudo systemctl restart httpd

اکنون که آپاچی را برای سرو دادن هر سایت پیکربندی کرده‌اید، آن‌ها را تست خواهید کرد تا مطمئن شوید نسخه‌های صحیح PHP در حال اجرا هستند.


مرحله ۴ — تست وب‌سایت‌ها

در این مرحله، دو وب‌سایت را برای اجرای دو نسخه متفاوت PHP پیکربندی کرده‌اید. اکنون نتایج را تست کنید.

مرورگر وب خود را باز کرده و به هر دو سایت http://site1.your_domain و http://site2.your_domain بروید. شما دو صفحه را مشاهده خواهید کرد که اطلاعات نسخه PHP را نشان می‌دهند.

به عنوان‌ها (Titles) دقت کنید. صفحه اول نشان می‌دهد که site1.your_domain در حال اجرای نسخه 8.1 است. صفحه دوم نشان می‌دهد که site2.your_domain در حال اجرای نسخه 8.2 است.

اکنون که سایت‌های خود را تست کردید، فایل‌های info.php را حذف کنید. از آنجایی که این فایل‌ها حاوی اطلاعات حساسی درباره سرور شما هستند و برای کاربران غیرمجاز قابل دسترسی می‌باشند، یک آسیب‌پذیری امنیتی محسوب می‌شوند. برای حذف هر دو فایل، دستورات زیر را اجرا کنید:

bash
sudo rm -rf /var/www/site1.your_domain/info.php
sudo rm -rf /var/www/site2.your_domain/info.php

شما اکنون یک سرور واحد دارید که دو وب‌سایت با دو نسخه متفاوت PHP را مدیریت می‌کند. البته PHP-FPM تنها به این یک کاربرد محدود نمی‌شود.


نتیجه‌گیری

شما اکنون با ترکیب Virtual Host ها و PHP-FPM توانسته‌اید چندین وب‌سایت با نسخه‌های متفاوت PHP را روی یک سرور واحد میزبانی کنید. تنها محدودیت عملی برای تعداد سایت‌های PHP و نسخه‌هایی که سرویس آپاچی شما می‌تواند مدیریت کند، قدرت پردازشی سرور شماست.

از اینجا به بعد، می‌توانید ویژگی‌های پیشرفته‌تر PHP-FPM مانند تولید تطبیقی پردازش‌ها (Adaptive Process Spawning) یا نحوه لاگ‌برداری stderr و stdout را بررسی کنید. همچنین می‌توانید وب‌سایت‌های خود را با گواهینامه‌های رایگان TLS/SSL از Let’s Encrypt ایمن‌سازی نمایید.

از همراهی شما با پارمین کلود سپاسگزاریم.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همچنین ببینید
بستن
دکمه بازگشت به بالا