habrahabr

Установка php5.5+php-fpm+mysql+nginx на Mac OS X Mavericks

  • пятница, 11 апреля 2014 г. в 03:11:11
http://habrahabr.ru/post/217245/

Каждый веб-разработчик, выбравший Mac, после первичной настройки системы ищет рабочий инструментарий. И если c IDE и редакторами всё понятно, то что-либо подобное по удобству win-довым OpenServer или Denwer за бесплатно найти трудно. Есть отличное решение MAMP PRO, но оно стоит две тысячи деревянных. Да и работа через Apache некоторых может смутить.

Занимаясь решением этого вопроса, набрёл на интереснейший материал, который рассказывает о том, как при помощи консольного пакет-менеджера Homebrew настроить рабочее пространство буквально за 5-10 минут. Публикую его перевод, потому что кому-нибудь подобная инструкция по настройке веб-окружения на Mac обязательно пригодится.



«Только что получил новый MacBook Pro и решил настроить его с чистого листа, потому что я использую тот же бэкап Time Machine примерно уже четверы года. Хороший шанс избавиться от стэка веб-сервера/LAMP (Linux Apache MySQL PHP) и заменить его Nginx и PHP-FPM как реализацию FastCGI. Ниже вы можете прочесть, как настроить Nginx, PHP-FPM, MySQL и PhpMyAdmin на OS X 10.9 / Mavericks.

Xcode



Прежде всего, установите последнюю версию Xcode через Mac App Store:
Скачать Xcode.app (через Mac App Store)

Как только закончится загрузка, откройте Xcode в папке /Applications и согласитесь с лицензией.

Откройте окно Терминала и установите Xcode через следующую команду:

xcode-select --install


Подтвердите установку при помощи кнопки Install.

Вернитесь обратно в Xcode, нажмите ⌘ + , для доступа к настройкам и перейдите на вкладку Locations. Установите Command Line Tools на последнюю доступную версию, Xcode 5.0.2 (5A3005) в моём примере:

Xcode.app → Preferences → Location | Command Line Tools

Homebrew



Теперь необходимо установить Homebrew, который является менеджером пакетов для OS X. Вы возможно уже слышали про apt-get или aptitude на дистрибутивах Linux для установки пакетов и зависимостей для конкретный приложений. brew работает также, только на компьютерах под управлением Mac OS X. Он также удостоверится, что вы получите последние обновления для установленных приложений, так что вам не нужно будет беспокоиться из-за просроченных версиях или брешах в системе безопасности, эксплойтах и так далее.

Прежде всего, нам понадобиться Xquarz:

curl http://xquartz-dl.macosforge.org/SL/XQuartz-2.7.5.dmg -o /tmp/XQuartz.dmg
open /tmp/XQuartz.dmg


Теперь нам необходимо загрузить и установить Homebrew при помощи следующей команды:
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"


Поверим на любые конфликты и проблемы:
brew doctor


Обновим репозитории и приложения при помощи Homebrew:
brew update
brew upgrade


PHP-FPM



Потому как Homebrew не имеет репозитория по-умолчанию для PHP-FPM, нам необходимо его добавить:
brew tap homebrew/dupes
brew tap josegonzalez/homebrew-php


Установим PHP-FPM при помощи следующих аргументов:
brew install --without-apache --with-fpm --with-mysql php55


Homebrew загрузит исходный код PHP-FPM и скомпилирует его аз вас. Дайте ему немного времени, это может занять несколько минут.

Настройка PHP в командной строке



Если вы хотите использовать PHP в командной строке, вам необходимо обновить переменную окружения $PATH в файле ~/.bash_profile:
echo 'export PATH="$(brew --prefix josegonzalez/php/php55)/bin:$PATH"' >> ~/.bash_profile


Настройка автозапуска



mkdir -p ~/Library/LaunchAgents
cp /usr/local/Cellar/php55/5.5.9/homebrew-php.josegonzalez.php55.plist ~/Library/LaunchAgents/


И старт PHP-FPM:

launchctl load -w ~/Library/LaunchAgents/homebrew-php.josegonzalez.php55.plist 


Удостоверьтесь, что PHP-FPM слушает порт 9000:

lsof -Pni4 | grep LISTEN | grep php


Вывод должен выглядеть примерно следующим образом:

php-fpm   69659  frdmn    6u  IPv4 0x8d8ebe505a1ae01      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm   69660  frdmn    0u  IPv4 0x8d8ebe505a1ae01      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm   69661  frdmn    0u  IPv4 0x8d8ebe505a1ae01      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm   69662  frdmn    0u  IPv4 0x8d8ebe505a1ae01      0t0  TCP 127.0.0.1:9000 (LISTEN)    


MySQL



Следующий шаг для установки MySQL:

brew install mysql


Настройка автозапуска



cp /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents


И запустите сервер баз данных:

launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist


Обезопасьте установку



Для безопасности нашего MySQL-сервера мы вызовем идущий в компоекте бинарник secure_mysql_installation для смены root-пароля, удаления анонимного пользователя и отключения возможности дистанционного логина под root-ом:
mysql_secure_installation




> Enter current password for root (enter for none):


Пожалуйста, укажите текущий пароль, если он уже установлен.

> Change the root password? [Y/n]


Нажите enter, указав пароль для root-пользователя. По желанию сохраните его в менеджерах паролей LastPass или 1Password.

> Remove anonymous users? [Y/n]


Да, в них нет необходимости.

> Disallow root login remotely? [Y/n]


Да, нет необходимости в авторизации под root с любого другого IP кроме 127.0.0.1.

> Remove test database and access to it? [Y/n]


Да. Нам не нужны тестовые таблицы.

> Reload privilege tables now? [Y/n]


Перезагрузка таблицы привилегий даст нам возможность удостовериться, что изменения вступили в силу.

Проверка соединения



mysql -uroot -p


Введите указанный ранее root-пароль и увидите консоль MySQL:

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>


Закончите сессию при помщи команды \q:

mysql> \q
Bye


phpMyAdmin



Установите autoconf который необходим для phpMyAdmin:

brew install autoconf


Установите переменную окружения $PHP_AUTOCONF:

echo 'PHP_AUTOCONF="'$(which autoconf)'"' >> ~/.bash_profile


Приступим к установке phpMyAdmin:

brew install phpmyadmin


Nginx



Установите Nginx при помощи команды:

brew install nginx


Настройка автозапуска



Так как мы используем 80 порт, необходимо запускать Nginx под пользователем root:
sudo cp /usr/local/opt/nginx/*.plist /Library/LaunchDaemons/
sudo chown root:wheel /Library/LaunchDaemons/homebrew.mxcl.nginx.plist


Протестриуйте веб-сервер



Запустите Nginx:

sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.nginx.plist


Конфигурация по-умолчанию слушает порт 8080 вместо стандартного для протокола HTTP порта 80. Пока проигнорируем это:
curl -IL http://localhost:8080


Ответ должен выглядеть следующим образом:

HTTP/1.1 403 Forbidden
Server: nginx/1.4.4
Date: Sun, 08 Dec 2013 03:33:41 GMT
Content-Type: text/html
Content-Length: 168
Connection: keep-alive


Снова остановим Nginx:

sudo launchctl unload /Library/LaunchDaemons/homebrew.mxcl.nginx.plist


Дальнейшая настройка



nginx.conf



Создайте папки, которые понадобятся нам при последующей конфигурации Nginx:

mkdir -p /usr/local/etc/nginx/logs
mkdir -p /usr/local/etc/nginx/sites-available
mkdir -p /usr/local/etc/nginx/sites-enabled
mkdir -p /usr/local/etc/nginx/conf.d
mkdir -p /usr/local/etc/nginx/ssl
sudo mkdir -p /var/www

sudo chown :staff /var/www
sudo chmod 775 /var/www


Удалите текущий файл nginx.conf (который всегда будет доступен по адресу /usr/local/etc/nginx/nginx.conf.default, если вы захотите взглянуть на его код) и загрузите созданные мною настройки при помощи curl с GitHub:
rm /usr/local/etc/nginx/nginx.conf
curl -L https://gist.github.com/frdmn/7853158/raw/nginx.conf -o /usr/local/etc/nginx/nginx.conf


Конфиуграционный файл прост и легковесен насколько это возможно: настройки worker, пути/форматы логов и несколько includes. Ничего лишнего в отличие от nginx.conf.default.

Загрузка PHP FPM



Скачайте мои настройки PHP-FPM с GitHub:
curl -L https://gist.github.com/frdmn/7853158/raw/php-fpm -o /usr/local/etc/nginx/conf.d/php-fpm


Создание виртуальных хостов



curl -L https://gist.github.com/frdmn/7853158/raw/sites-available_default -o /usr/local/etc/nginx/sites-available/default
curl -L https://gist.github.com/frdmn/7853158/raw/sites-available_default-ssl -o /usr/local/etc/nginx/sites-available/default-ssl
curl -L https://gist.github.com/frdmn/7853158/raw/sites-available_phpmyadmin -o /usr/local/etc/nginx/sites-available/phpmyadmin


Клонируйте тестовый виртуальный хост (включая рерайты для 404, 403 и phpinfo()) используя git:
git clone http://git.frd.mn/frdmn/nginx-virtual-host.git /var/www
rm -rf /var/www/.git


И удалите папку /var/www/.git, чтобы git не отслеживал последующие изменнения.

Настройка SSL



Создайте папку для наших сертификатов SSL и частных ключей:

mkdir -p /usr/local/etc/nginx/ssl


Сгенерируйте 4096bit RSA ключи и само-подписные сертификаты следюущей командой:

openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=US/ST=State/L=Town/O=Office/CN=phpmyadmin" -keyout /usr/local/etc/nginx/ssl/localhost.key -out /usr/local/etc/nginx/ssl/localhost.crt
openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=US/ST=State/L=Town/O=Office/CN=localhost" -keyout /usr/local/etc/nginx/ssl/phpmyadmin.key -out /usr/local/etc/nginx/ssl/phpmyadmin.crt


Включение виртуальных хостов



Теперь нам нужно создать симлинки в папке sites-enabled для виртуальных хостов с целью включить их:
ln -sfv /usr/local/etc/nginx/sites-available/default /usr/local/etc/nginx/sites-enabled/default
ln -sfv /usr/local/etc/nginx/sites-available/default-ssl /usr/local/etc/nginx/sites-enabled/default-ssl
ln -sfv /usr/local/etc/nginx/sites-available/phpmyadmin /usr/local/etc/nginx/sites-enabled/phpmyadmin


Снова стартуем Nginx:

sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.nginx.plist


Последние тесты



Вот оно, всё должно работать. Щелкайте на ссылках ниже с целью удостовериться в этом:



Управление сервисами



В силу того, чтоы вам рано или поздно понадобиться перезапустить тот или иной вресив, вам возможно понадобятся дополнительные алиасы:
curl -L https://gist.github.com/frdmn/7853158/raw/bash_aliases -o /tmp/.bash_aliases
cat /tmp/.bash_aliases >> ~/.bash_aliases
echo "source ~/.bash_aliases" >> ~/.bash_profile


Вы можете или открыть новое окно/сессию Терминала или же вручную перезагрузить ~/.bash_profile при помощи команды:
source ~/.bash_profile


Теперь вы можете использовать алиасы вместо печатания длинных команд launchctl, как то было выше.

Nginx



Вы можете стартовать, остановить и перезапустить Nginx при помощи команд:

nginx.start
nginx.stop
nginx.restart


Быстрый доступ к логам:

nginx.logs.access
nginx.logs.default.access
nginx.logs.phpmyadmin.access
nginx.logs.default-ssl.access
nginx.logs.error
nginx.logs.phpmyadmin.error


Проверка конфига:

[sudo] nginx -t


PHP-FPM



Старт, стоп и перезагрузка PHP-FPM:

php-fpm.start
php-fpm.stop
php-fpm.restart


Проверка конфига:

[sudo] php-fpm -t


MySQL



Старт, стоп и рестарт MySQL-сервера:

mysql.start
mysql.stop
mysql.restart


Дайте мне знать, если застряли или у вас есть какие-либо дополнения!»




От себя добавлю, что также при создании локальных доменов и настройке Nginx для работы с ними не забывайте прописывать пару «IP domain.name» в файле hosts при помощи команды sudo vi /etc/hosts.