Для веб-разработки я использую связку NGINX, php-fpm и mysql, настройку которой на MacOS X я расскажу в этой статье.

Подготовка

XCode Command Line Tools

Для сборки и установки большинства Unix утилит нам понадобится компилятор gcc, который входит в состав XCode Command Line Tools. Чтобы установить XCode Command Line Tools нужно выполнить в теримнале команду:

xcode-select --install

После нажатия Enter появится диалоговое окно, в котором нужно нажать кнопку "Установить" и дождаться окончания скачивания и установки.

Homebrew

Для установки портированных unix-приложений будем использовать менеджер пакетов Homebrew. Для установки нужно выполнить команду:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Если Homebrew уже был установлен, то нужно обновить его и установленные с его помощью пакеты:

brew update && brew upgrade

DNSMASQ

Чтобы не для каждого нового проекта не прописывать домен в /etc/hosts я использую dnsmasq. Установить его можно через Homebrew:

brew install dnsmasq

Для запуска демона dnsmasq при старте системы нужно выполнить следующие команды:

sudo cp $(brew list dnsmasq | grep /homebrew.mxcl.dnsmasq.plist$) /Library/LaunchDaemons/
sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist

Кофигурационный файл /usr/local/etc/dnsmasq.conf содержит множество комментариев о различных настройках. При желании можно почитать и может быть что-то использовать, но нам нужно будет только прописать в начале файла строку:

address=/test/127.0.0.1

И перезапустить сервис dnsmasq:

sudo brew services restart dnsmasq

Для того, чтобы все запросы .test доменов отправлялись на dnsmasq нунжно создать директорию /etc/resolver и в ней разместить файл test со следующим содержанием:

nameserver 127.0.0.1

Проверяем:

# ping test.test
PING test.test (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.032 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.101 ms

Установка и настройка PHP-FPM

Установим php-fpm:

brew install php56

Для запуска php-fpm при старте системы:

mkdir -p ~/Library/LaunchAgents
cp /usr/local/opt/php\@5.6/homebrew.mxcl.php\@5.6.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php\@5.6.plist

Для удобства разработки сервис php-fpm будем запускать от имени локального пользователя:

cat /usr/local/etc/php/5.6/php-fpm.conf |
sed 's/user = _www/user = '$(whoami)'/' |
sed 's/group = _www/group = staff/' > /usr/local/etc/php/5.6/php-fpm.conf

Перезапускаем сервис:

brew services restart php56

Установка MySQL

Также как и php-fpm, установка MySQL производится через Homebrew:

brew install mysql

Для автозапуска при старте системы:

ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents

Запускаем сервисе mysql:

brew services start mysql

Первоначальную настройку произведем командой:

mysql_secure_installation

На все вопросы отвечаем Yes, но если не нужна проверка сложности паролей, то на первый вопрос отвечаем No.

Установка и настройка NGINX

Установка осуществляется с помощью Homebrew:

brew install nginx

По умолчанию nginx слушает порт 8080, так как для этого не требуются права администратора. Для автозапуска и возможности использовать 80-й порт:

sudo cp -v /usr/local/opt/nginx/*.plist /Library/LaunchDaemons/
sudo chown root:wheel /Library/LaunchDaemons/homebrew.mxcl.nginx.plist

Создадим папки для хранения конфигураций nginx:

mkdir -p /usr/local/etc/nginx/servers
mkdir -p /usr/local/etc/nginx/conf.d

Также как и для php-fpm пропишем пользователя для запуска nginx:

cat /usr/local/etc/nginx/nginx.conf.default | 
sed 's/#user[[:space:]]*nobody/user '$(whoami)' staff/' \
> /usr/local/etc/nginx/nginx.conf

Для разделения конфигураций серверов нужно припасть в конце блока http файла nginx.conf строку:

include servers/*.test;

Создадим файл /usr/local/etc/nginx/conf.d/php-fpm.conf с содержанием:

location ~ \.php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

Теперь пропишем настройки сервера, используемого по умолчанию, в файл /usr/local/etc/nginx/servers/default.test (в строчке root /Users/rtr/Developer/$domain нужно rtr заменить на вывод команды whoami, т.е. имя текущего пользователя):

server {
    listen 80 default_server;
    server_name ~^(www\.)?(?<domain>.+).test$;
    root /Users/rtr/Developer/$domain;
    index index.php;

    include conf.d/php-fpm.conf;
}

Путь в директиве root нужно указывать до директории Developer в домашней директории пользователя.

Перезапускаем nginx:

sudo brew services restart nginx

Проверяем:

mkdir -p /Users/$(whoami)/Developer/test
tee /Users/$(whoami)/Developer/test/index.php <<EOF
<?php
	phpinfo();
?>
EOF

В браузере переходим по адресу http://test.test и видим вывод функции phpinfo().

Источники