[Перевод] Установка php5.5+php-fpm+mysql+nginx на Mac OS X Mavericks
Каждый веб-разработчик, выбравший 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) в моём примере:
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 0×8d8ebe505a1ae01 0t0 TCP 127.0.0.1:9000 (LISTEN) php-fpm 69660 frdmn 0u IPv4 0×8d8ebe505a1ae01 0t0 TCP 127.0.0.1:9000 (LISTEN) php-fpm 69661 frdmn 0u IPv4 0×8d8ebe505a1ae01 0t0 TCP 127.0.0.1:9000 (LISTEN) php-fpm 69662 frdmn 0u IPv4 0×8d8ebe505a1ae01 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.
Рекомендую отключить работу Apache во избежание конфликта с Nginx из-за работы на 80-ом порте: