Поднимаем веб‑сервер на macOS

15 min read
Статья утратила свою актуальность и предлагается только для ознакомительных целей.

Веб-разработка начинается с настройки локального веб-сервера. Есть множество различных комбинаций устанавливаемых пакетов и сборок, которые удобны по-своему. В этой статье я расскажу об установке связки Apache + PHP + MySQL + Redis + Memcached на macOS.

Установка Homebrew

Управлением пакетов, которые не идут в комплекте с macOS, занимается утилита Homebrew.

На официальном сайте вы найдете команду для запуска установки.

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

Следуйте указаниям и введите пароль администратора, когда потребуется. В результате выполнения команды будет установлен Homebrew и XCode Command Line Tools.

Чтобы убедиться, что установка прошла успешно, выполните команду “brew --version”.

$ brew --version Homebrew 1.1.4 Homebrew/homebrew-core (git revision 4a1f; last commit 2016-12-15)

Подключаем репозитории с необходимыми пакетами.

$ brew tap homebrew/php $ brew tap homebrew/apache

И выполняем обновление всех репозиториев, подключенных к brew.

$ brew update

Всё готово к установке пакетов.

Установка Apache

С помощью Homebrew установим Apache со всеми необходимыми скриптами.

Перед установкой следует отключить и убрать из автозагрузки встроенный Apache-сервер.

$ sudo apachectl stop $ sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null $ brew install httpd24 --with-privileged-ports --with-http2

Операция займет время. Ожидайте появления строки, которая подтвердит успех установки.

/usr/local/Cellar/httpd24/2.4.23_2: 212 files, 4.4M, built in 1 minute 45 seconds

Обратите внимание на этот путь “/usr/local/Cellar/httpd24/2.4.23_2”. Он сейчас понадобится для настройки автозапуска Apache.

Задаем права и включаем автозагрузку свежеустановленного сервера.

$ sudo cp -v /usr/local/Cellar/httpd24/2.4.23_2/homebrew.mxcl.httpd24.plist /Library/LaunchDaemons $ sudo chown -v root:wheel /Library/LaunchDaemons/homebrew.mxcl.httpd24.plist $ sudo chmod -v 644 /Library/LaunchDaemons/homebrew.mxcl.httpd24.plist $ sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.httpd24.plist

Перейдите по адресу http://localhost/.

Apache успешно установлен

Решения возможных проблем

Если вы получаете сообщение, что браузер не может подключиться к серверу, первым делом проверьте, запущен ли сервер.

$ ps -aef | grep httpd

Вы должны увидеть несколько httpd процессов, если Apache запущен.

Попробуйте перезагрузить сервер следующей командой.

$ sudo apachectl -k restart

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

$ tail -f /usr/local/var/log/apache2/error_log

Если проблема не пропала, убедитесь, что в файле /usr/local/etc/apache2/2.4/httpd.conf имеется следующая строчка.

Listen: 80

Apache контролируется с помощью apachectl. Следующие команды могут быть полезны.

$ sudo apachectl start $ sudo apachectl stop $ sudo apachectl -k restart

Настрока Apache

У вас есть установленный веб-сервер. Пора настроить его.

Первым делом мы изменим директорию для хранения сайтов. Откройте для редактирования конфигурационный файл Apache.

$ open -e /usr/local/etc/apache2/2.4/httpd.conf

Найдите строку, где задается параметр DocumentRoot.

DocumentRoot "/usr/local/var/www/htdocs"

И измените её на следующую, где your_user — имя вашего аккаунта.

DocumentRoot /Users/your_user/Sites

Также надо изменить тег , чтобы его параметр совпадал с DocumentRoot.

Обратите внимание, что кавычки отсутствуют. Стандартный редактор автоматически может заменить их на другие символы, что может стать причиной ошибки.

Если вы планируете в локальных проектах использовать файл дополнительной конфигурации сервера .htaccess, то обратите внимание на настройки AllowOverride и mod_rewrite.

В блоке найдите опцию AllowOverride, которая отвечает за возможность использования .htaccess, и измените её на следующую.

# AllowOverride controls what directives may be placed in .htaccess files. # It can be "All", "None", or any combination of the keywords: # AllowOverride FileInfo AuthConfig Limit # AllowOverride All

Для возможности преобразования URL потребуется модуль mod_rewrite, который по-умолчанию закомментирован. Найдите строку и уберите символ комментирования #.

#LoadModule rewrite_module libexec/mod_rewrite.so
LoadModule rewrite_module libexec/mod_rewrite.so

Пользователи и группы

Мы направили обращения Apache к сайтам в директорию Sites, которую поместили в домашнем каталоге. Обычно Apache работает от имени системного пользователя daemon группы daemon, из-за этого могут возникнуть некоторые проблемы с доступом. Необходимо задать, пользователя и группу, от чьего имени Apache будет работать.

В конфигурационном файле Apache найдите User и Group и измените на следующее. your_user — имя вашего аккаунта.

User your_user Group staff

Директория для локальных сайтов

Создайте папку для сайтов в домашнем каталоге.

$ mkdir ~/Sites

Следующая команда создаст в папке Sites файл index.html и поместит в нем код первой веб-страницы.

$ echo "My User Web Root" > ~/Sites/index.html

Чтобы изменения в файле настроек вступили в силу, необходимо перезагрузить сервер.

$ sudo apachectl -k restart

Снова откройте в браузере страницу по адресу http://localhost/.

Установка PHP

На этом шаге мы установим PHP 5.6 и PHP 7.0, а также настроим скрипт переключения между версиями PHP.

Выполните установку необходимых версий PHP с помощью следующих команд.

$ brew install php70 --with-apache $ brew unlink php70 $ brew install php56 --with-apache

Если потребуется, вы можете настроить каждую версию языка в соответствующих php.ini.

/usr/local/etc/php/5.6/php.ini /usr/local/etc/php/7.0/php.ini

Знакомим Apache и PHP

Вы успешно установили нужные версии PHP, но теперь нужно сказать Apache использовать их.

Снова откройте файл /usr/local/etc/apache2/2.4/httpd.conf и найдите строку

#LoadModule php5_module

Вместо нее добавьте следующие строки для подключения ваших версий PHP.

LoadModule php5_module /usr/local/opt/php56/libexec/apache2/libphp5.so #LoadModule php7_module /usr/local/opt/php70/libexec/apache2/libphp7.so

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

Найдите ниже настройку указания на корневой файл директории.

DirectoryIndex index.html

И замените её следующими настройками.

DirectoryIndex index.php index.html SetHandler application/x-httpd-php

Сохраните файл настроек и снова перезагрузите сервер.

$ sudo apachectl restart

Проверяем установку PHP

Создайте в директории с сайтами файл index.php с содержанием “

$ echo " ~/Sites/index.php

Откройте в браузере страницу по адресу http://localhost/. Вы увидите информацию о настройках PHP.

Переключение версий PHP

Установим небольшой sphp скрипт в стандартную для brew директорию /usr/local/bin.

$ curl -L https://gist.github.com/w00fz/142b6b19750ea6979137b963df959d11/raw > /usr/local/bin/sphp $ chmod +x /usr/local/bin/sphp

Homebrew при установке должен был добавить свои директории /usr/local/bin и /usr/local/sbin в переменную $PATH. Убедимся в этом.

$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

Если вышеуказанные директории отсутствуют в результат выполнения команды у вас, то выполните следующую команду, которая исправит это.

$ export PATH=/usr/local/bin:/usr/local/sbin:$PATH

Остановите и запустите Apache. Не перезагружайте.

$ sudo apachectl -k stop $ sudo apachectl start

Снова откройте файл настроек Apache /usr/local/etc/apache2/2.4/httpd.conf и замените блок с подключениями этих модулей:

LoadModule php5_module /usr/local/opt/php56/libexec/apache2/libphp5.so #LoadModule php7_module /usr/local/opt/php70/libexec/apache2/libphp7.so

На следующий код.

# Brew PHP LoadModule for `sphp` switcher LoadModule php5_module /usr/local/lib/libphp5.so #LoadModule php7_module /usr/local/lib/libphp7.so

Сохраните файл настроек и закройте его.

Проверим возможность переключения версий PHP.

Выполните команду sphp с двумя цифрами нужной версии.

$ sphp 70 PHP version 70 found Unlinking old binaries... Linking new binaries... Linking /usr/local/Cellar/php70/7.0.14_7... 17 symlinks created Linking new modphp addon... Fixing LoadModule... Updating version file... Restarting homebrew Apache... Restarting non-root homebrew Apache... Done. PHP 7.0.14 (cli) (built: Dec 14 2016 01:24:46) ( NTS ) Copyright (c) 1997-2016 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

Откройте страницу http://localhost/ и убедитесь, что теперь активен PHP версии 7.0.

Установка MySQL

Для установки MySQL введите следующую команду.

$ brew install mysql

Завершение установки подтвердит следующее сообщение.

We've installed your MySQL database without a root password. To secure it run: mysql_secure_installation To connect run: mysql -uroot To have launchd start mysql now and restart at login: brew services start mysql Or, if you don't want/need a background service you can just run: mysql.server start ==> Summary /usr/local/Cellar/mysql/5.7.16: 13,511 files, 439M

Выполните указанные действия, если необходимо установить mysql на автозапуск.

$ brew services start mysql

Установка Redis, Memcached

С помощью Homebrew установка дополнительного ПО максимально проста.

Установим Redis.

$ brew install redis ==> Downloading https://homebrew.bintray.com/bottles/redis-3.2.6.sierra.bottle.tar.gz ######################################################################## 100.0% ==> Pouring redis-3.2.6.sierra.bottle.tar.gz ==> Caveats To have launchd start redis now and restart at login: brew services start redis Or, if you don't want/need a background service you can just run: redis-server /usr/local/etc/redis.conf ==> Summary /usr/local/Cellar/redis/3.2.6: 11 files, 1.7M

Настроим автозагрузку и запустим Redis.

$ brew services start redis

Установим Memcached.

$ brew install memcached ==> Downloading https://homebrew.bintray.com/bottles/memcached-1.4.33.sierra.bottle.tar.gz ######################################################################## 100.0% ==> Pouring memcached-1.4.33.sierra.bottle.tar.gz ==> Caveats To have launchd start memcached now and restart at login: brew services start memcached Or, if you don't want/need a background service you can just run: /usr/local/opt/memcached/bin/memcached ==> Summary /usr/local/Cellar/memcached/1.4.33: 11 files, 184.5K

Настроим автозагрузку и запустим Memcached.

$ brew services start memcached

Теперь необходимо установить PHP расширений для работы со свежеустановленнымы сервисами для каждой версии вам нужно загрузить расширения, которые требуются.

$ sphp 70 $ brew install php70-redis $ brew install --HEAD homebrew/php/php70-memcached

Перезагрузите Apache и снова откройте http://localhost/.

$ sudo apachectl restart

В пункте “ дополнительные .ini файлы” вы увидите ini файлы установленных расширений.

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

Смените версию PHP перед началом установки расширений для нее.

$ sphp 56 $ brew install php56-redis php56-memcache php56-memcached

Снова перезагрузите Apache и откройте http://localhost/, чтобы убедиться в успехе.

$ sudo apachectl restart

Создание локального сайта

Для работы над несколькими проектами сразу удобно создать отдельную папку и доменное имя для каждого.

Например, ваш проект называется сodex. Первым делом создайте директорию.

$ mkdir ~/Sites/codex

Локальный сайт codex.local будет находиться на вашем компьютере. Поэтому нужно прописать в файле /etc/hosts адрес сервера и доменное имя.

$ sudo open -e /etc/hosts

Добавьте в конец файла следующую строку.

127.0.0.1 codex.local

Теперь надо настроить сам Apache сервер. Для этого откройте для редактирования файл настроек хостов.

$ open -e /usr/local/etc/apache2/2.4/extra/httpd-vhosts.conf

Добавьте следующий код, описывающий новый хост, в файл настроек. Название проекта codex уже вписано в нужные строки. Замените your_user на логин вашего пользователя.

# корневая директория проекта codex DocumentRoot /Users/your_user/Sites/codex # доменное имя ServerName codex.local # настройка прав доступа к директории проекта AllowOverride All Order allow,deny Allow from all

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

Откройте для редактирования файл /usr/local/etc/apache2/2.4/httpd.conf. Необходимо раскомментировать строку с подключением файла настроек виртуальных хостов. 

# Virtual hosts Include /usr/local/etc/apache2/2.4/extra/httpd-vhosts.conf

После этих действий нужно перезагрузить сервер.

$ sudo apachectl restart

Теперь сайт, находящийся в директории ~/Sites/codex, будет доступен по адресу http://codex.local/.

Заключение

После выполнения описанных в статье шагов у вас должен получиться готовый к работе веб-сервер.

В этой статье представлен наиболее простой способ разворачивания рабочего окружения непосредственно на операционной системе. Существуют и другие способы решения описанных задач: например, с использованием Open Server (для Windows) или виртуализации с помощью VirtualBox, VMWareVagrant, Docker и других утилит. Об использовании докера читайте в статье «Как поднять сайт в Docker».

Материалы