Настройка окружения PHP-разработчика в macOS

Как установить и настроить все необходимые компоненты, чтобы подготовить свой мак к полноценной разработке на PHP.

Пакетный менеджер

Скачивать и устанавливать весь требуемый софт мы будем с помощью пакетного менеджера Homebrew.
Пакетный менеджер — это инструмент, который значительно облегчает процесс установки любых программ. С Homebrew установка программы на компьютер сводится буквально к одной команде в терминале.

Но сам Homebrew тоже требуется установить, так как по умолчанию он не входит в состав операционной системы.
Понятная инструкция по его установке есть на главной странице этой программы. Выполните её и переходите к следующему шагу.

Установка PHP

Начнём с установки PHP-интерпретатора.
Все последующие команды выполняются через терминал.
Установить интерпретатор можно через одну простую команду:

brew install php@7.2

Проверим, что всё установилось корректно:

$ php --version
PHP 7.2.14 (cli) (built: Jan 12 2019 05:21:04) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

Установка веб-сервера

PHP — это язык программирования, на котором можно создавать современные сайты. Обработкой запросов пользователей и отдачей им запрошенных страниц занимаются специальные программы — веб-сервера.

PHP работает в тесной связке с веб-сервером, так как именно последний обращается к нему и, в конечном счёте запускает наши сценарии. В общем, без веб-сервера нам никак не обойтись.

Поднять веб-сервер можно с помощью плагинов для редактора или настроить веб-сервер самостоятельно. Рассмотрим оба варианта.

Использование веб-сервера из редактора

Современные редакторы могут самостоятельно запускать сервер. В VS Code это можно сделать через плагин PHP Server, а в PHP Storm через — PHP Debug Server. По ссылкам есть инструкция с настройками. Для того, чтобы сервер стартовал, нужно чтобы локально был установлен php интерпретатор.

Установка nginx

Рассмотрим как установить веб-сервер самостоятельно.

Установим последнюю версию nginx:

brew install nginx

Запускаем nginx, чтобы он работал в фоне и обслуживал наши запросы:

brew services start nginx

Проверяем, что всё установилось корректно, и nginx успешно работает на нашем компьютере:
откройте любой браузер и введите в адресной строке следующий URL:

http://localhost:8080

в ответ вы должны увидеть страницу с текстом «Welcome to nginx!»

Интеграция PHP и веб-сервера

На этом шаге мы «подружим» PHP-интерпретатор и nginx, чтобы при запросе веб-страниц с расширением.php автоматически выполнялся php-сценарий и мы видели результат его работы в браузере.

Мы сделаем простую настройку сервера так, чтобы он слушал одну папку проекта и выдавал результат через запрос на страницу http://localhost/.

Откройте конфигурационный файл nginx:

nano /usr/local/etc/nginx/nginx.conf

(*) nano — консольный текстовый редактор для Unix и Unix-подобных ОС. Вместо него файлы можно открывать в других редакторах, заменив на nano на phpstorm, code (нужно установить поддержку команды через редактор) для VS Code или другие.

Добавим в конец документа перед закрывающей скобкой от блока http следующий код:

USERNAME нужно будет в двух местах заменить на имя вашего пользователя

server {
    listen       80;
    server_name  localhost;
    client_max_body_size 20M;
    root   /Users/USERNAME/Sites/yeticave;
    location / {
        index  index.php index.html index.htm;
    }
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        # goes on same line:
        fastcgi_param  SCRIPT_FILENAME /Users/USERNAME/Sites/yeticave/$fastcgi_script_name;
        include        fastcgi_params;
    }
}

Здесь мы говорим серверу, чтобы он слушал 80 порт страницы localhost и при запросе показывал содержимое папки yeticave. После USERNAME вы можете выбрать путь до любой удобной для вас папки.

Разрешим nginx читать содержимое нашего проекта

sudo chmod -R 755 /Users/USER/Sites/yeticave

(*)Поменяйте USER на имя вашего пользователя и yeticave на папку вашего проекта

Для того, чтобы изменения применились на 80 порт, нужно перезагрузить сервер с доступом администратора командой:

sudo brew services restart nginx

Установка xdebug

Установить xdebug можно простой командой:

pecl install xdebug

Проверка работы

Базовая настройка окружения закончена. Осталось проверить, что мы всё сделали правильно.
Создадим тестовый PHP-сценарий со следующим содержимым:

<?php
phpinfo();

Сохраните его по адресу вашего проекта, например, /Users/user/Sites/yeticave в файл index.php. Вновь откройте браузер и перейдите по ссылке http://localhost/index.php. Вы должны увидеть большую страницу с подробной информацией об установленной версии PHP и всех настройках. Это будет означать, что вы всё сделали правильно, а значит готовы писать и запускать свои первые php-сценарии. Обратите внимание, что все файлы и папки проекта при этой конфигурации должны лежать в корне папки yeticave.

Установка MySQL в macOS

Актуальную версию MySQL для macOS можно загрузить с официальной страницы. Для удобства установки рекомендуется загружать DMG Archive. В этом случае процесс установки будет выполняться с помощью стандартного инсталлятора.

Окно инсталлятора
Рисунок 1. Окно инсталлятора

Нажимаем Continue пока не дойдём до шага Installation Type. На этом шаге необходимо проверить перечень компонентов для установки. Нажимаем кнопку Customize. Отмечаем все флаги как на рисунке 2.

 Выбор компонент для установки
Рисунок 2. Выбор компонент для установки

Нажимаем Install. После установки отобразится всплывающее окно с автоматически сгенерированным паролем для пользователя root. Обязательно его запомните. Пример окна с автоматически сгенерированным паролем приведён на рисунке 3. Далее нажимаете кнопку Finish. На этом установка MySQL завершена.

Автоматически сформированный пароль
Рисунок 3. Автоматически сформированный пароль

Сразу после установки служба MySQL не будет запущена. Запуск необходимо выполнить вручную. Проще всего это сделать через аплет System Preferences. Открываем и запускаем аплет для управления MySQL (рисунок 4). В появившемся окне нажимаем кнопку Start MySQL Server.

Окно System Preferences
Рисунок 4. Окно System Preferences
Аплет запуска MySQL
Рисунок 5. Аплет запуска MySQL

Чтобы протестировать соединение с MySQL и получить возможность выполнять базовые задачи, вам потребуется фирменная утилита от Oracle — MySQL Workbench. Установка утилиты выполняется стандартным для macOS способом: запускаем загруженный DMG и в окне инсталлятора перетаскиваем иконку MySQL Workbench в папку Application.

Для тестирования корректности установки MySQL запустим MySQL Workbench и попробуем установить соединение.

Главное окно MySQL Workbench
Рисунок 6. Главное окно MySQL Workbench

В главном окне MySQL Workbench, в разделе MySQL Connections кликаем по автоматически подготовленному профилю Local instance. Появится окно ввода пароля. Вводите пароль, который вы сохранили на этапе установки. Если пароль верный, то появится окно с предложением указать текущий пароль и установить новый. Выполните это действие и нажмите Ok. В случае установки соединения вы увидите окно как на рисунке.

Соединение с MySQL установлено
Рисунок 7. Соединение с MySQL установлено

Установка на Linux

Настроить рабочее окружение для разработки на PHP в Linux возможно несколькими способами. Рассмотрим один из наиболее быстрых способов: настройка связки PHP плюс nginx.

  1. Запустите приложение «Терминал». Ярлык на запуск доступен в менеджере приложений.

    Окно терминала
    Рисунок 1. Окно терминала
  2. Обновим локальный индекс пакетов APT
    sudo apt-get update
  3. Для работы с PHP нам потребуется веб-сервер. В репозиториях доступно несколько популярных веб-серверов, мы отдадим предпочтение nginx. Помимо высокой производительности его легче конфигурировать.
    sudo apt-get install nginx
  4. Следующим шагом выполним запуска nginx. Запомните эту команду. Она вам пригодится при добавлении новых виртуальных хостов.
    sudo service nginx start
  5. nginx установлен и теперь нам требуется выполнить базовое конфигурирование. Наша цель — создать новый виртуальный хост, который будет доступен по адресу yourproject.local, где вместо yourproject может быть название вашего проекта. Например: doingsdone.local, eticave.local. Обратите внимание, имена доменов не могут содержать пробелы. Определитесь с именем домена (далее «имя хоста для проекта»). Мы будем ориентироваться на проект yeticave.local, поэтому именно так будем называть конфигурационный файл. Перейдите в директорию sites-available. В этой директории, nginx хранит конфигурационные файлы всех виртуальных хостов.
    cd /etc/nginx/sites-available
    Чтобы увидеть список всех доступных виртуальных хостов, выведите содержимое каталога:
    ls -all
    Список доступных виртуальных хостов
    Рисунок 2. Список доступных виртуальных хостов
  6. Название конфигурационного файла должно совпадать с именем хоста. Поскольку мы планируем сделать конфигурационный файл для хоста yeticave.local, нам потребуется создать файл yeticave.local. Сделаем это:
    sudo touch yeticave.local
  7. Файл готов, теперь откроем его в консольном редакторе nano (установлен по умолчанию в большинстве современных дистрибутивов) и опишем минимальную конфигурацию.
    sudo nano yeticave.local
  8. Скопируйте в открытый файл yeticave.local ниже приведённый конфигурационный файл. Информацию обо всех непонятных строках вы сможете почерпнуть из официальной документации к nginx.
    server {
    
           # Наш проект будет доступен на 80 порту  
            listen 80;
    
          # Имя виртуального хоста
            server_name    yeticave.local; 
    
         # Корневая директория проекта. В этой папке будут находиться файлы проекта.
         # Обратите внимание. Файлы находятся в домашней директории пользователя
         # Administrator. Ваше имя наверняка отличается, поэтому обратите на это внимание
         # при написании пути.
            root  /home/administrator/www/yeticave.local; 
    
        # Имя индексного файла.
            index index.php;
          
    
    
           # Настройки отдачи файлов
    
           location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ {
                    access_log off;
                    expires max;
                    log_not_found off;
            }
    
    
            location / {               
                    try_files $uri $uri/ /index.php?$query_string;
            }
    
            location ~* \.php$ {
            try_files $uri = 404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
    
            # Обратите внимание на номер версии PHP. На текущей момент в репозиториях 
            # Ubuntu доступна версия 7.1. Если вы пользуетесь более старой версии ОС,
            # то не забудьте обновить номер версии на свой.
    
            fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    
        location ~ /\.ht {
                    deny all;
            }
    }
    
    Подготовка конфига
    Рисунок 3. Подготовка конфига
    Для сохранения изменений в файле нажмите комбинацию клавиш ctrl + o. Затем закройте редактор nano сочетанием клавиш ctrl + x.
  9. Протестируем созданный конфигурационный файл на наличие ошибок:
    sudo nginx -t
    Тестирование конфигурационного файла nginx
    Рисунок 4. Тестирование конфигурационного файла nginx
  10. На этом процесс создания конфигурационного файла завершён. Активируем только что созданный виртуальный хост. Для этого перейдём в директорию sites-enabled и создадим в ней символическую ссылку на наш конфигурационный файл.
    cd /etc/nginx/sites-enabled/
    sudo ln -s /etc/nginx/sites-available/yeticave.local
  11. Если на текущем шаге попытаться открыть браузер и ввести в адресной строке http://yeticave.local, то ничего, кроме ошибки «Сервер не найден», мы не увидим. Исправим проблему добавлением новой записи в hosts:
    sudo nano /etc/hosts
    В самом начале файле добавьте строку:
    127.0.0.1 yeticave.local
    Обратите внимание, мы пишем только доменное имя без указания протокола (http). Сохраняем изменения ctrl + o и закрываем редактор nano сочетанием клавиш ctrl + x .

Установка PHP

Последним компонентом в настройке рабочего окружения станет PHP.

В окне терминала введите команду для установки php-fpm из репозитория.

sudo apt install php-fpm php-cli php-common php-json php-mysql php-phpdbg php-mbstring php-imap php-dev php-curl php-xdebug

Важно: обязательно обратите внимание на устанавливаемую версию. В зависимости от дистрибутива она может отличаться. Например, в Ubuntu 16.04 устанавливается 7.0. Если номер версии отличается от той, что мы указали в конфигурационном файле yeticave.local, то необходимо её исправить.

Настройка xdebug

  1. Вводим команду редактирования файла:

    sudo nano /etc/php/7.1/mods-available/xdebug.ini
  2. Добавляем в файл конфигурацию для xdebug.
    xdebug.remote_enable=1
    xdebug.remote_handler=dbgp
    xdebug.remote_mode=req
    xdebug.remote_host=localhost
    xdebug.remote_port=9000
    xdebug.var_display_max_depth = -1
    xdebug.var_display_max_children = -1
    xdebug.var_display_max_data = -1
    xdebug.idekey = "PHPSTORM":
    

    Сохраняем изменения ctrl + o и закрываем редактор nano ctrl + x.

  3. Внесём изменения в конфигурационный файл php, чтобы он выводил все ошибки в браузер, а не только в лог-файл.
    sudo nano /etc/php/7.1/fpm/php.ini
  4. Найдём, раскомментируем (уберём знак «;» или исправим значение) и установим значения для строк:
    display_errors = On
    display_startup_errors = On
    error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
    
    Сохраняем изменения ctrl + o, закрываем редактор ctrl + x.
  5. Запускаем php-fpm. Выполняем команды:
    sudo service php7.1-fpm stop
    sudo service php7.1-fpm start
    
  6. Размещаем файлы проекта в директорию проекта. Директорию проекта вы указали в секции root, конфигурационного файла yeticave.local. Выставляем права:
    sudo chmod -R 755 /home/administrator/www/yeticave.local
    Открываем браузер и пробуем обратиться к http://yeticave.local.