Установка и настройка Apache, PHP и MySQL на Mac OS X с помощью MacPorts, установка модулей PHP
Ранее я уже писал про настройку рабочего окружения на Mac OS X, также упоминал про систему управления пакетами MacPorts. Изначально я хотел использовать встроенные средства Mac OS X и установку необходимого ПО для разработку из бинарников, но в этом подходе обнаружились свои недостатки:
- сложное обновление компонентов
- сложная установка необходимых модулей для PHP
- сложная установка дополнительных библиотек
Не менее сложно установить дополнительные модули и для сборки MAMP.
В процессе работы оказалось удобнее воспользоваться MacPorts.
Если в системе ранее установлены Apache и MySQL, необходимо остановить все запущенные процессы с Apache и MySQL, отключить автозапуск MySQL и удалить файл /etc/my.cnf
. В остальном все должно пройти гладко.
Предварительно необходимо установить Xcode (идет в комплекте с инсталяционным диском Mac OS X) и MacPorts (можно скачать с официального сайта). Установка пакетов через MacPorts потребует времени, поэтому необходимо запастись терпением и стабильным интернетом.
1. Устанавливаем Apache.
Переходим в командную строку и вводим команду:
$ sudo port install apache2
Установка проходит в автоматическом режиме и займет некоторое время.
После установки запускаем Apache:
$ sudo port load apache2
Проверяем работоспособность Apache, для этого переходим по адресу http://localhost/
и видим сообщение "It works!".
Команды Apache:
$ sudo /opt/local/apache2/bin/apachectl -k restart - перезапуск Apache
$ sudo port load apache2 - запуск Apache
$ sudo port unload apache2 - остановка Apache
Конфигурацией Apache займемся позже.
2. Установка MySQL.
$ sudo port install mysql5-server
По завершении устанавливаем БД:
$ sudo -u mysql mysql_install_db5
$ sudo chown -R mysql:mysql /opt/local/var/db/mysql5/
$ sudo chown -R mysql:mysql /opt/local/var/run/mysql5/
$ sudo chown -R mysql:mysql /opt/local/var/log/mysql5/
Запускаем сервер MySQL:
$ sudo port load mysql5-server
Задаем пароль пользователя root:
$ mysqladmin5 -u root -p password ваш_пароль
Будет предложено ввести пароль, скорее всего у вас он не задан, поэтому просто нажимаем Return (Enter).
Входим на сервер:
$ mysql5 -u root -p
Видим приглашение MySQL, теперь можно работать с БД.
Выходим:
mysql> exit;
3. Устанавливаем PHP.
$ sudo port install php5 +apache2
$ sudo port install php5-mysql
4. Конфигурация Apache.
Регистрируем модуль PHP:
$ cd /opt/local/apache2/modules
$ sudo /opt/local/apache2/bin/apxs -a -e -n "php5" libphp5.so
Подключить модуль PHP можно и вручную. Ищем в файле конфигурации строки, в которых подключаются дополнительные модули и добавляем строку:
LoadModule php5_module modules/libphp5.so
Открываем файл конфигурации Apache:
$ sudo nano /opt/local/apache2/conf/httpd.conf
Ищем строку с DirectoryIndex
и добавляем index.php
:
<IfModule dir_module> DirectoryIndex index.php index.html </IfModule>
Подключаем пользовательские хосты, для этого в конце файла (где расположены директивы Include) добавляем строки:
# Include user configurations
Include /private/etc/apache2/users/*.conf
Все пользовательские хосты будут находится здесь:
/private/etc/apache2/users/имя_пользователя.conf
Настройкой виртуальных хостов займемся позже.
В конце файла конфигурации httpd.conf
добавляем строки (для конфигурации AddType
):
# Include PHP configurations
Include conf/extra/mod_php.conf
Сохраняем файл конфигурации httpd.conf
и выходим из режима редактирования.
5. Конфигурация PHP.
Установим конфигурационный файл PHP:
$ cd /opt/local/etc/php5
$ sudo cp php.ini-development php.ini
Открываем файл конфигурации php.ini
:
$ sudo nano /opt/local/etc/php5/php.ini
Зададим часовой пояс, для этого ищем в файле строку date.timezone
и добавляем свой часовой пояс, также необходимо раскомментировать строку (убрать точку с запятой ";"):
date.timezone = Europe/Moscow
Установим MySQL соккет, для этого ищем последовательно строки pdo_mysql.default_socket
, mysql.default_socket
, mysqli.default_socket
и для каждой указываем соккет по умолчанию:
pdo_mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock
mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock
mysqli.default_socket = /opt/local/var/run/mysql5/mysqld.sock
Сохраняем файл конфигурации php.ini
и выходим из режима редактирования.
6. Настройка виртуальных хостов.
Настройка виртуальных хостов достаточно простая, но объяснить в двух строчках не получится.
Открываем файл с пользовательскими настройками виртуальных хостов:
$ sudo nano /private/etc/apache2/users/имя_пользователя.conf
Добавляем базовую конфигурацию, не забываем поменять имя_пользователя на текущее имя пользователя в системе.
NameVirtualHost *:80 <VirtualHost *:80> ServerName "localhost" DocumentRoot "/Users/имя_пользователя/Sites" <Directory "/Users/имя_пользователя/Sites"> Allow From All AllowOverride All </Directory> </VirtualHost> <VirtualHost *:80> ServerAdmin webmaster@example DocumentRoot "/Users/имя_пользователя/Sites/example" ServerName example <Directory "/Users/имя_пользователя/Sites/example"> AllowOverride All Allow from all </Directory> </VirtualHost>
Сохраняем изменения и выходим из режима редактирования.
http://localhost/
- запускает срипты из папки /Users/имя_пользователя/Sites/
http://example/
- запускает срипты из папки /Users/имя_пользователя/Sites/example/
Открываем файл с исключениями:
$ sudo nano /etc/hosts
Добавим http://example/
в исключения, для этого необходимо в файле добавить следующую строку:
127.0.0.1 example
Сохраняем изменения и выходим из режима редактирования. По аналогии можно создавать неограниченное кол-во виртуальных хостов.
Создадим директорию example в папке Сайты:
$ mkdir ~/Sites/example
Создадим тестовый скрипт для http://example/
, который проверит соединение с MySQL:
$ touch ~/Sites/example/index.php
Откроем файл index.php
:
$ nano ~/Sites/example/index.php
Добавим следующии строки:
<?php
$db = mysql_connect('localhost', 'root', 'ваш_пароль');
if (!$db) {
die('Could not connect to MySQL: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($db);
?>
Сохраняем и выходим.
Создадим тестовый скрипт для http://localhost/
:
$ touch ~/Sites/index.php
Откроем файл index.php
:
$ nano ~/Sites/index.php
Добавим следующую строку:
<?php phpinfo(); ?>
Сохраняем и выходим.
Перезапускаем Apache:
$ sudo /opt/local/apache2/bin/apachectl -k restart
Проверяем рабоспособность сервера, для этого переходим по ссылкам http://localhost/
и http://example/
. Если все настроено корректно, то первый покажет информацию о PHP, второй сообщение "Connected successfully".
Для работы с БД рекомендую использовать Sequel Pro, поэтому установку phpMyAdmin не рассматриваю.
7. Установка дополнительных модулей PHP (опционально, в зависимости от требуемой конфигурации).
Поиск портов выполняется командой:
$ port search имя_порта
Установка mcrypt:
$ sudo port install php5-mcrypt
Установка библиотеки ImageMagick и модуля PHP imagick:
$ sudo port install ImageMagick
$ sudo port install php5-imagick
Установка библиотеки GD:
$ sudo port install php5-gd
Установка модуля APC:
$ sudo port install php5-apc
Установка модуля SOAP:
$ sudo port install php5-soap
Установка Xdebug:
$ sudo port install php5-xdebug
Перезапускаем Apache:
$ sudo /opt/local/apache2/bin/apachectl -k restart
Рабочее окружение готово к работе, все установленные компоненты хранятся в папке /opt/local/
.
Makc
25 марта 2011 в 14:00 #mySQL ставится какой?
64 бит?
И если потом установлю с сайта mySQL, это не помешает? одинаковые версии? какой будет работать?
makegood
25 марта 2011 в 14:14 #Все тестировалось на 64-битной системе, если поставить MySQL из коробки, то должно все нормально работать, потребуется прописать правильные соккеты в PHP или создать символьные ссылки.
Работать будет тот сервер, который запущен, остановка сервера MySQL, установленного из MacPorts, осуществляется командой:
sudo port unload mysql5-server
Makc
25 марта 2011 в 15:03 #И у меня еще проблема!http://example/
когда я вбиваю в сафари:
то у меня скачивается файл с кодом, а не пишет «Connected successfully», ПОЧЕМУ?
makegood
25 марта 2011 в 15:11 #Попробуй, переместить скрипт из папки example в папку, на которую ссылается localhost, если заработает, то проблема в настройке виртуальных хостов.
Makc
25 марта 2011 в 16:17 #если я прохожу так:http://example/ – то пишет: ‘Warning: mysql_connect() [function.mysql-connect]: [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock) in /Users/iSkyNets/Sites/example/index.php on line 2
Warning: mysql_connect() [function.mysql-connect]: No such file or directory in /Users/iSkyNets/Sites/example/index.php on line 2
Could not connect to MySQL: No such file or directory’
а если я к этому файлу пробираюсь так: «http://localhost/example/» или «http://localhost/example/index.php»
то пишет — ‘Connected successfully’ !!! )))
1)в чём проблема?
2) если база данных не наэтом компе, то что мне писать вместо localhost? — IP адрес?
makegood
25 марта 2011 в 20:10 #Останови сервер MySQL и поставь через MacPorts, предварительно удали файл /etc/my.cnf. Если по прежнему работать не будет — проблема в виртуальных хостах. На второй вопрос точно ответить не смогу, т.к. все зависит от конфигурации и, скорее всего, потребуется настроить SSH.
Makc
26 марта 2011 в 01:00 #я и ставил с портов…. но почему-то перестал работать (((
но при переустановке, всё заработало :)
почему у меня слетело соединение с локальной ДБ?
CrossX
28 марта 2011 в 18:00 #Огромное спасибо автору за статью! Доходчиво и понятно.
Выполнял поэтапно и все работает!
З.Ы. И за наводочку на Sequel Pro — отдельное спасибо!
Makc
29 марта 2011 в 11:52 #отписываюсь!
у меня снова возникла эта проблема, не могу подключиться к mysql.
запустить не получается… незнаю в чём проблема, но решается перезагрузкой мака.
Dolby
29 марта 2011 в 14:33 #Хорошее описание — спасибо!
makegood
29 марта 2011 в 15:00 #Макс, если установка MySQL выполняется из портов и сделано все правильно, то работать будет, если ранее устанавливался сервер MySQL из бинарника, то необходимо удалить файл /etc/my.cnf и остановить сервер. Все остальное делается по инструкции и должно работать.
Мне кажется, что после перезагрузки у тебя запускается сервер из коробки.
Makc
30 марта 2011 в 15:27 #я удалял /etc/my.cnf
перед установкой из портов.
Mikhail
16 мая 2011 в 20:28 #Делал все по инструкции. Трижды.
Результат:
clause (see docs)
May 16 20:26:23 MacBook-Pro-Mikhail-Seliverstov com.apple.launchd[1] (org.apache.httpd[6378]): Exited with exit code: 1
May 16 20:26:23 MacBook-Pro-Mikhail-Seliverstov com.apple.launchd[1] (org.apache.httpd): Throttling respawn: Will start in 10 seconds
May 16 20:26:33 MacBook-Pro-Mikhail-Seliverstov org.apache.httpd[6379]: Syntax error on line 33 of /private/etc/apache2/extra/httpd-vhosts.conf:
May 16 20:26:33 MacBook-Pro-Mikhail-Seliverstov org.apache.httpd[6379]: CustomLog takes two or three arguments, a file name, a custom log format string or format name, and an optional «env=» clause (see docs)
Что не так?
makegood
16 мая 2011 в 21:45 #Ошибка в виртуальных хостах, файл у вас указан, строка тоже.
Makc
24 июня 2011 в 12:20 #вопрос: где хранятся таблицы БД MySQL?
Я хочу стереть старые таблицы не через интерфейс…
+ как мне синхронизировать 2 и более БД?
андрей
2 ноября 2011 в 13:34 #Отличный гайд! Все работает ))
kc
8 февраля 2012 в 03:13 #sudo vim /opt/local/etc/mysql5/my.cnf
[mysql_safe] socket = /opt/local/var/run/mysql5/mysqld.sock
source:http://2tbsp.com/content/install_and_configure_mysql_5_macports
Алексей
27 февраля 2012 в 19:55 #Почему-то не работает PDO
PDO
PDO support enabled
PDO drivers no value — это из phpinfo
А это при попытке обращения:
Fatal error: Uncaught exception ‘PDOException’ with message ‘could not find driver’
makegood
27 февраля 2012 в 20:15 #Алексей, возможно, не выполнили команду
sudo port install php5-mysql
, либо ошибка в php.ini. С вашей проблемой не сталкивался.Алексей
27 февраля 2012 в 20:21 #Простите, пропустил sudo port install php5-mysql — все заработало. Удалите, пожалуйста оба.
Владимир
1 апреля 2012 в 21:16 #Вечер добрый, а кто нибудь с LDAP дело имел?
Владимир
23 декабря 2012 в 09:49 #Хорошая статья, делал все по порядку, все получилось … но только в конце самом нужно перегазрузить компьютер, потому что без перезагрузки компа, но перезагрузки апачи, в браузере в мне предлогалось скачать файлы php. Перезагрузил комп, все заработало. Спасибо.
Юрий
14 февраля 2013 в 17:38 #Спасибо большое, самый нормальный How-to в сети.
Юрий
1 апреля 2013 в 10:21 #Спасибо за подробный гайд :) Все работает, как надо!
serj
25 мая 2013 в 03:57 #почему то не срабатывает вирт. серверhttp://example/example/ http://example/ у меня скрипт что запускает phpinfo т.е. example = localhost
то есть чтобы выполнить скрипт присоединения к базе мне нужно переходить по адресу
а на
Кирилл
8 июля 2013 в 14:29 #Добрый день! Замечательный гайд, все получилось) Но.
$ sudo apachectl -k restart
httpd: Syntax error on line 119 of /private/etc/apache2/httpd.conf: Cannot load /opt/local/apache2/modules/libphp5.so into server: dlopen(/opt/local/apache2/modules/libphp5.so, 10): Library not loaded: /opt/local/lib/libaprutil-1.0.dylib\n Referenced from: /opt/local/apache2/modules/libphp5.so\n Reason: Incompatible library version: libphp5.so requires version 6.0.0 or later, but libaprutil-1.0.dylib provides version 4.0.0
получил такую вот бяку. Как поправить? Не подскажете?
Заранее спасибо!
K
8 февраля 2014 в 02:01 #То же самое подробнееhttps://trac.macports.org/wiki/howto/MAMP
Виктор
20 марта 2014 в 19:01 #Здравствуйте! Спасибо за очень подробное описание!
Столкнулся с проблемой. При открытии файлов .php браузером по ссылке localhost/…php просто открывает код. Помогите пожалуйста с решением.
Станислав
8 апреля 2014 в 01:06 #Ребят, подскажите, мучаюсь уже второй день:
не работаетhttp://localhost ; сначала мурыжил встроенный сервер, сейчас по инструкции поставил через макпортс, эффект тот же
еще до этого стоял xamp и mamp может они как то повлияли?
hosts чистил, брендмауер отключен
где копать?
Станислав
8 апреля 2014 в 01:34 #Все, решил проблему удалив apache встроенный в систему))
Frozen
8 мая 2014 в 15:32 #За статью спасибо, а как изменгить версию PHP не подскажите?
Chupacabra
7 апреля 2016 в 22:05 #При установке PHP в качестве модуля настройки из php.ini читаются один раз при запуске Web-сервера. Поэтому при внесении изменений в php.ini необходимо перегрузить Apache для того, чтобы внесенные изменения вступили в силу.