atVSG

0011001000110100

وحید امیری مطلق

توسعه دهنده وب و موبایل

نصب و راه اندازی Apache + PHP-FPM با استفاده از Homebrew


apache + phpfpm on macos

بعد از مدت ها سر و کله زدن با MAMP چند ساعت پیش مجبور شدم ماژول mongodb رو آپدیت کنم. متاسفانه نسخه جدید بخاطر تغییرات macOS High Sierra در زمینه SSL با Apache کار نمیکنه بنابراین اگر میخواید PHP رو با mod_php اجرا کنید با مشکل مواجه میشید. راه حلش هم یا استفاده از نسخه های قدیمی تر php_mongodb یا اجرای PHP در یک پروسه جداگانه و مستقل از Apache مثل PHP-FPM. برای من راه اول مناسب نیست بنابراین مجبور شدم MAMP رو به کلی پاک کنم و Apache و PHP رو هم از اول نصب کنم. در این مطلب توضیح میدم که چطوری PHP-FPM رو به همراه Apache روی macOS با استفاده از ابزار Homebrew نصب کنید.

اولین قدم نصب خود Homebrew. یک برنامه پکیج منیجر برای مک هست که خیلی کارتون رو راحت تر میکنه. برای نصب به سایتش برید و اون یک خط وسط صفحه رو داخل یه پنجره Terminal کپی و پیست کنید و مراحل نصب رو پیش ببرید.

حالا باید مخازن Homebrew رو آماده کنیم. داخل ترمینال دستور زیر رو وارد کنید:

brew tap homebrew/homebrew-php

سپس برای نصب Apache دستور زیر رو در ترمینال وارد کنید. توجه کنید که DocumentRoot پیش فرض /usr/local/var/www هست و پورت های پیش فرض هم 8080 برای HTTP و 8443 برای HTTPS هستن. این ها رو بعدا به راحتی میشه تغییر داد.

brew install httpd

حالا نوبت به نصب PHP میرسه. اینجا من نوشتم php71 که باعث میشه PHP 7.1 نصب بشه. اگه نسخه دیگه ای رو میخواید نصب کنید کافیه به همین فرمت اسمش رو بنویسید. مثلا برای نصب نسخه 7.0 کافیه بنویسید php70 یا برای 7.2 بنویسید php72

brew install php71

نکته: در صورتی که بخواید بدون PHP-FPM نصب کنید اینجا باید به صورت زیر وارد کنید:

brew install php71 –with-httpd

برای مشاهده لیست تمام گزینه های موجود برای اضافه کردن هنگام نصب (مثل PEAR یا PECL) از دستور زیر استفاده کنید:

brew options php71

الان باید ماژول هایی که میخواید به PHP اضافه کنید رو نصب کنید. مثلا php_mongodb یا php_opcache. لزومی نداره حتما الان نصب کنید و بعدا هم میشه اقدام کرد:

brew install  php71-intl php71-mongodb php71-opcache

 

کارمون با نصبی ها تموم شد. حالا باید Apache رو تنظیم کنیم. اول باید فایل تنظیمات آپاچی رو با یه text editor باز کنید:

/usr/local/etc/httpd/httpd.conf

داخلش موارد زیر رو پیدا کنید و از حالت کامنت خارجشون کنید (یعنی اون علامت # رو از قبلشون حذف کنید)

LoadModule proxy_module lib/httpd/modules/mod_proxy.so
LoadModule proxy_fcgi_module lib/httpd/modules/mod_proxy_fcgi.so
LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
LoadModule vhost_alias_module lib/httpd/modules/mod_vhost_alias.so

حالا دنبال عبارت httpd-vhosts.conf بگردید و اون خط هم از حالت کامنت خارج کنید.اگه میخواید پورت ها رو تغییر بدید باید داخل همین فایل انجام بشه. حالا میتونید این فایل رو ذخیره کنید و ببندید. حالا در همون فولدری که httpd.conf هست برید داخل فولدر extra و فایل httpd-vhosts.conf رو پیدا کنید و بازش کنید. اینجا باید همه Virtual Host هایی (سایت ها) که میخواید رو تعریف کنید. البته اینجا با حالت های عادی که از mod_php استفاده میشه یکم متفاوته. ما باید تمام درخواست ها به فایل های PHP رو به PHP-FMP که به طور پیش فرض تحت پورت 9000 اجرا میشه پروکسی کنیم. نمونه ای از فایل httpd-vhosts.conf برای آشنایی:

	
<VirtualHost *:8080>
	AddHandler application/x-httpd-php .php
	DocumentRoot "/Users/vahid/dev/Projects/my_app/public_html"
	ServerName myapp.localhost.dev
	ErrorLog "/usr/local/etc/httpd/logs/univer30t-error.log"
	CustomLog "/usr/local/etc/httpd/logs/univer30t-access.log" common
	<Directory "/Users/vahid/dev/Projects/my_app/public_html">
		DirectoryIndex index.html index.php
		Require all granted
		AllowOverride All
		Options Includes FollowSymLinks
	</Directory>
	<FilesMatch .php$>
		SetHandler proxy:fcgi://localhost:9000
	</FilesMatch>
</VirtualHost>

حالا باید برای جلوگیری از مشکلات مرتبط با دسترسی، در فایل /usr/local/etc/php/7.1/php-fpm.d/www.conf جاهایی که “user = _www” و “group = _www” هستن رو به جای _www نام کاربری حساب macOS خودتون رو وارد کنید. مثلا مال من vahid پس میشه user = vahid

کارمون تموم شد و حالا برای اجرای Apache و PHP-FPM از brew services استفاده میکنیم:

sudo brew services restart httpd && brew services restart php71

نکته ی جالب اینه که در مقایسه با حالت معمولی که از mod_php استفاده میشه و فقط کافیه Apache رو اجرا کنید و احتیاجی به اجرای جداگانه PHP نیست. در این روش باید هر دو رو جداگانه اجرا کنیم. اگه PHP اجرا نشده باشه Apache به شما ارور 503 میده. برای مشاهده تموم سرویس های brew کافیه brew services list رو اجرا کنید.

اگه همه مراحل درست انجام شده باشن میتونید با فراخوانی phpinfo داخل قسمت Server API ببینید که PHP تحت FPM اجرا شده نه Apache:

 

در ضمن اگه هر کدوم از سرویس های brew جواب نداد میتونید برای بررسی مشکل به صورت دستی Apache و PHP-FPM رو روشن و خاموش کنید:

Apache

sudo apachectl start

sudo apachectl stop

sudo apachectl -k restart

PHP-FPM

php-fpm -y $(brew –prefix)/etc/php/7.1/php-fpm.conf -t

فلگ t برای تست کردن استفاده میشه و وقتی تست موفقیت آمیز بود،‌ برای اجرا فلگ t رو حذف کنید. جهت تنظیم محل لاگ ها میتونید فایل php-fpm.conf رو نگاه کنید.



 برچسب ها: ، ، ، ، ، ، ، ،

 دیدگاه ها:
سوال یا دیدگاه؟

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