Устанавливаем веб-сервер на Mac OS

Admin Localhost, Mac OS, MySQL, PHP, VPS

Инструкция по установке локального веб-сервера на Mac OS.

Далее ниже будем настраивать веб-сервер самостоятельно, без использования сторонних программ. Благо Mac OS является UNIX системой и настройка веб-сервера почти не отличается от Linux серверов.

Для установки веб-сервера можно воспользоваться готовыми решениями. Например, MAMP PRO. Но если хочется hardcor-а или не хочется платить за готовые решения, то это статья для вас.

Ставим менеджер пакетов для Mac OS

Для начала устанавливаем менеджер пакетов Homebrew.

Ставим apache на Mac OS

Работаем через командную строку, но правки в файлах намного быстрее делать через сторонние редакторы, например, Sublime Text.

Устанавливаем apache

brew install httpd

Перенастроим дефолтный конфигурационный файл:

/usr/local/etc/httpd/httpd.conf

1. Меняем директорию для сайтов

#DocumentRoot "/usr/local/var/www"
#<Directory "/usr/local/var/www">

на

DocumentRoot "/Users/Dream/Sites/"
<Directory "/Users/Dream/Sites/">

2. Меняем порт

Listen 8080

на

Listen 80

Теперь сможем заходить на локальные сайты без указания порта

http://localhost/

3. Меняем директиву AllowOverride

Обяжем Apache использовать файлы .htaccess.

AllowOverride None

на

AllowOverride All

4. Раскомментируем строку mod_rewrite

LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so

5. Поменяем стандартного пользователя

User _www
Group _www

на нашего в системе и меняем его группу на stuff

User Dream
Group stuff

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

В этом случае в строке указываем именного этого пользователя:

Group everyone

6. Изменим ServerName

#ServerName www.example.com:8080

на

ServerName localhost

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

Ставим последнюю версию PHP на Mac OS

brew install php@7.3

Вернемся к файлу настроек апача и сообщим ему, чтобы тот использовал наш PHP. Файл:

/usr/local/etc/httpd/httpd.conf

В нем переходим к разделу загрузки модулей, видим там

LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so

Добавляем после этого

LoadModule php7_module /usr/local/opt/php/lib/httpd/modules/libphp7.so

Также заменяем в этом файле

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

на

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

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

Запустить сервис PHP

brew services run php

Перезагрузка сервиса

brew services restart php

Посмотреть все сервисы

brew services list

Настройки для PHP указанной выше версии будут здесь:

/usr/local/etc/php/7.3/php.ini

После изменения обязательно надо перегрузить все сервисы (не только PHP)

brew services restart --all

Устанавливаем PostgreSQL на Mac OS

В отдельной статье описывается установка PostgreSQL на Mac Os.

Устанавливаем MySQL на Mac OS

brew install mysql

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

brew install phpmyadmin

Или использовать сторонние программы, типа Sequel Pro

Если был установлен phpmyadmin, то допишем в файл:

/usr/local/etc/httpd/httpd.conf

Следующее:

Alias /phpmyadmin /usr/local/share/phpmyadmin
<Directory /usr/local/share/phpmyadmin/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    <IfModule mod_authz_core.c>
        Require all granted
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order allow,deny
        Allow from all
    </IfModule>
</Directory>

Если после этого сразу зайти в phpmyadmin или через любое другое приложение, будет ошибка:

mysqli_real_connect(): The server requested authentication method unknown to the client [caching_sha2_password]
mysqli_real_connect(): (HY000/2054): The server requested authentication method unknown to the client

В MySQL 8 изменили аутентификацию с mysql_native_password на caching_sha2_password, как на более безопасную. Если мы хотим входить как и раньше, то внесем изменения.

Перегрузим все сервисы:

brew services restart --all

Войдем внутрь MySQL

mysql -u root

Должны зайти на сервер:

root@localhost [(none)]>

Добавим старую авторизацию и пароль: password

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Но и этого не достаточно, будут ошибки:

mysqli_real_connect(): (HY000/2002): No such file or directory
mysqli_real_connect (): (HY000 / 2002): нет такого файла или каталога

1. Находим файл

/usr/local/etc/phpmyadmin.config.inc.php

а) Изменим там false на true

$cfg['Servers'][$i]['AllowNoPassword'] = true;

б) А вместо

$cfg['Servers'][$i]['host'] = 'localhost';

Поставим

$cfg['Servers'][$i]['host'] = '127.0.0.1';

2. В конфиг MySQL

/usr/local/etc/my.cnf

Добавим

default_authentication_plugin = mysql_native_password

Теперь всё должно работать! Осталось всё запустить.

По умолчанию адрес доступа в phpmyadmin

http://localhost/phpmyadmin/

Запуск

brew services start httpd
brew services start mysql


или также для mysql подойдет

mysql.server start

Команды для перезапуска:

apachectl -k restart

или

brew services restart httpd

Посмотреть все сервисы:

brew services list

Логи ошибок в веб-сервере на Mac OS

Если что-то пошло не так, можно посмотреть логи ошибок. Например, почему не открывается та или иная страница:

cd /usr/local/var/log/
cat httpd/error_log | tail -10

Ошибки при перезагрузке apache

Если ничего не работает, обязательно надо попробовать перезагрузить apache именно так:

apachectl -k restart

Дальше будут показаны ошибки. По этим сообщениям станет ясно в чем причина.

H00544: httpd: bad group name stuff

Значит в конфигурации httpd.conf указан неверный пользователь. Как поправить смотрите в этой статье выше.

Cannot load /usr/local/opt/php/lib/httpd/modules/ into server

Ошибки:

httpd: Syntax error on line 183 of /usr/local/etc/httpd/httpd.conf: Cannot load /usr/local/opt/php/lib/httpd/modules/libphp7.so into server: dlopen(/usr/local/opt/php/lib/httpd/modules/libphp7.so, 10): Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib\n Referenced from: /usr/local/opt/php/lib/httpd/modules/libphp7.so\n Reason: image not found

httpd: Syntax error on line 183 of /usr/local/etc/httpd/httpd.conf: Cannot load /usr/local/opt/php/lib/httpd/modules/libphp7.so into server: dlopen(/usr/local/opt/php/lib/httpd/modules/libphp7.so, 10): image not found

Причина в том, что была обновлена php версия, а модуль не был изменен. Можно исправить двумя вариантами:

а) Попробовать обновить homebrew:

brew upgrade

Обновить php или установить новую версию php:

brew upgrade php
brew install php@7.4

И еще раз перезагрузить сервисы

brew services restart --all

б) Заменить вручную.

Проверим версию php:

php -v
PHP 8.0.0 (cli) (built: Nov 30 2020 13:51:52) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.0-dev, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.0, Copyright (c), by Zend Technologies

Дальше меняем правим строки в файле /usr/local/etc/httpd/httpd.conf:

# LoadModule php7_module /usr/local/opt/php/lib/httpd/modules/libphp7.so
LoadModule php_module /usr/local/Cellar/php/8.0.0_1/lib/httpd/modules/libphp.so

httpd not running, trying to start

Делаем так:

sudo apachectl -T

Если покажет что-то вроде:

httpd (pid 147) already running

Убиваем процесс:

sudo kill 147

И снова запустим:

sudo apachectl -T

(48)Address already in use: AH00072

Ошибка появилась в Mac OS Big Sur

httpd not running, trying to start
(48)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down

Заходим в файл:

/usr/local/etc/httpd/httpd.conf

Меняем значение в Listen на такое:

Listen 127.0.0.1:8080

Перезагружаем:

sudo apachectl -k start

Ошибка при импорте базы данных

phpMyAdmin — Ошибка
Incorrect format parameter

Надо увеличить лимиты:

post_max_size = 32M
upload_max_filesize = 124M
memory_limit = 1024M

Которые устанавливаются в файл php.ini:

/usr/local/etc/php/7.3/php.ini

Версия php может быть любой другой, которая была установлена.

Снова перезагрузим все сервисы

brew services restart --all

После этого (не всегда), чтобы сразу заработало нужно выйти и заново зайти в phpMyAdmin.

Другие ошибки

Попробовать команду:

brew doctor

И воспользоваться подсказками. Например:

Warning: Homebrew's sbin was not found in your PATH but you have installed
formulae that put executables in /usr/local/sbin.
Consider setting the PATH for example like so:
  echo '
export PATH="/usr/local/sbin:$PATH"' >> ~/.zshrc

Вводим:

echo 'export PATH="/usr/local/sbin:$PATH"' >> ~/.zshrc

Локальное подключение к БД

Подключиться можно разными сторонними программами. На примере программы DataGrip:

В поле password пароль будет password.

У сайта нет цели самоокупаться, поэтому на сайте нет рекламы. Но если вам пригодилась информация, можете лайкнуть страницу, оставить комментарий или отправить мне подарок на чашечку кофе.

Комментарии к статье “Устанавливаем веб-сервер на Mac OS” (11)

      • Алексей
        16.08.2020 в 00:22

        У меня на моменте:
        «Войдем внутрь MySQL»

        mysql -u root

        И
        «Должны зайти на сервер»

        root@localhost [(none)]>

        Пишет следующее:

        mysql> root@localhost [(none)]>
            -> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
        ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'root@localhost [(none)]>
        ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_nat' at line 1

        Никаких ошибок не выдает, кроме синтаксической и файла по адресу «/usr/local/etc/phpmyadmin.config.inc.php
        » нет.

  • Дмитрий
    03.12.2020 в 04:38

    Та же проблема, мак ос биг сур.
    как правильно прописать? Я пробую заменить все ковычки на скошенную все равно синтаксическая ошибка

    • Admin
      Автор записи
      03.09.2021 в 19:55

      Зачем на локальном сервере nginx? В любом случае не подскажу, не ставил из-за ненадобности.

  • Vladimir
    10.11.2021 в 15:10

    Было бы здорово если бы Вы описали каким образом можно запустить localhost на устройствах внутри сети wi-fi. С подключением проблем нет. mac_ip:80 и все работает, но вот php не работает. Ну может и не php, но сайты на WordPress отображаются не корректно. Сайты без CMS работают как надо.

    • Admin
      Автор записи
      20.06.2022 в 22:42

      Вы не внимательно читали. В самом начале указано, ищите вверху под заголовком: «Меняем директорию для сайтов»

Добавить комментарий

Напишите свой комментарий, если вам есть что добавить/поправить/спросить по теме текущей статьи:
"Устанавливаем веб-сервер на Mac OS"