Статья утратила свою актуальность и предлагается только для ознакомительных целей.
Веб-разработка начинается с настройки локального веб-сервера. Есть множество различных комбинаций устанавливаемых пакетов и сборок, которые удобны по-своему. В этой статье я расскажу об установке связки 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/.
Решения возможных проблем
Если вы получаете сообщение, что браузер не может подключиться к серверу, первым делом проверьте, запущен ли сервер.
$ 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, VMWare, Vagrant, Docker и других утилит. Об использовании докера читайте в статье «Как поднять сайт в Docker».
Материалы
- Статья-источник https://getgrav.org/blog/macos-sierra-apache-multiple-php-versions
- Homebrew http://brew.sh