Появилась задачка, установить стек MAMP (macOS, Apache, MYSQL, PHP) на рабочий ноутбук с процессором Apple Silicon M1. В принципе, под macOs уже е сть готовое приложение MAMP-PRO, но на текущий момент оно работает через эмулятор Rosetta из-за чего теряет около 20% производительности и в целом подтупливает. Да и стоит почти 7000 рублей.
Решил установить именно адаптированные, ARM, версии софта в ручную из homebrew. Установка будет поддерживать виртуальные хосты, можно запускать любое количество сайтов.
Заметка создана на базе разроненных статей с англоязычных ресурсов и дополнена некоторыми "улучшалками" для удобного использования.
Внимание! В установке не учитываю моменты безопасности. Подразумевается использование, исключительно для локальной разработки проектов - без доступа из интернета. Заметка обновлена в 2024 году, для установки php 8 и mariadb
Устанавливаем homebrew и необходимые пакеты.
Для начала установим сам homebrew и необходимые пакеты, для сборки остальных приложений. Установка займет достаточно продолжительное, запасаемся кофейком, открываем терминал и выполняем следующие команды:
Переходим в домашнюю директорию и запускаем установку homebrew
cd ~
mkdir homebrew && curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
sudo mv homebrew /opt/homebrew
Переходим в директорию установки и запускаем обновление
cd /opt/homebrew/bin
./brew update
Экспортируем каталог homebrew/bin в PATH своего пользователя. Создаем файл .zshrc в директории пользователя.
nano ~/.zshrc
Вписываем в него и сохраняем:
export PATH="/opt/homebrew/bin:$PATH"
В целом! инструменты командной строки для разработчиков, должны были установиться при обновлении ./brew update, но у меня, почему-то этого не произошло. Поэтому, на всякий, запускаем принудительную установку:
xcode-select --install
С помощью brew качаем и собираем python:
brew install --build-from-source python@3.9
Устанавливаем Apache MYSQL и PHP 8.3
Собственно, теперь запускаем установку всех нужных пакетов, автоматом скачаются и скомпилируются оптимизированные, для M1 пакеты. Займет много времени:
brew install -s mariadb php@8.3 httpd
На этом все, вебсервер уже готов и работоспособен.
Делаем удобно- конфигурации в домашней папке
Что бы всем этим добром было пользоваться удобно и просто, сделаем некоторые настройки и тюнинг.
Создаем папки для будущих сайтов и символьные ссылки на конфигурации, что бы были под рукой, в домашней папке пользователя:
mkdir ~/MAMP
mkdir ~/MAMP/www
mkdir ~/MAMP/httpd/vhosts
mkdir /opt/homebrew/etc/httpd/vhosts/
ln -s /opt/homebrew/etc/httpd ~/MAMP/httpd
ln -s /opt/homebrew/etc/php/8.3 ~/MAMP/php
Поднастроем Apache, что бы он работал с этими директориями и включим mod_rewrite
В файле /Users/ВАШ_ПОЛЬЗОВАТЕЛЬ/MAMP/httpd/httpd.conf вносим корректировки. Можете открыть в текстовом редакторе, типа Sublime или прямо в терминале, через nano. Как по мне, удобнее в текстовом редакторе:
Находим и раскоменнтируем строку:
LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
Меняем прослушиваемый порт с 8080 на 80:
Listen 80
Меняем DocumentRoot на папку своего пользователя:
DocumentRoot "/Users/ВАШ_ПОЛЬЗОВАТЕЛЬ/MAMP/www"
Directory "/Users/ВАШ_ПОЛЬЗОВАТЕЛЬ/MAMP/www"
В самый низ этого файла добавляем:
LoadModule php_module /opt/homebrew/opt/php@8.3/lib/httpd/modules/libphp.so
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
Include /opt/homebrew/etc/httpd/vhosts/*.conf
Скрипт добавления нового сайта:
Что бы автоматизировать добавление нового сайта в виртуальные хосты, прилагаю небольшой скрипт. Он сам создаст нужные директории, добавит виртуальный хост и запись в файл hosts. В процессе будет запрашивать пароль пользователя.
Создаем файл addsite.sh
nano ~/MAMP/addsite.sh
Добавляем в него следующее (комментарии внутри):
#!/bin/zsh
echo -e "Введите название проекта (Например example.local.site)";
read NAME_OF_PROJECT
# Создаем директории
mkdir ~/MAMP/www/$NAME_OF_PROJECT
mkdir ~/MAMP/www/$NAME_OF_PROJECT/public_html
mkdir ~/MAMP/www/$NAME_OF_PROJECT/logs
# Добавляем виртуальный хост
add_to_apache_conf="
<VirtualHost *:80>
DocumentRoot "/Users/ВАШ_ПОЛЬЗОВАТЕЛЬ/MAMP/www/${NAME_OF_PROJECT}/public_html"
ServerName ${NAME_OF_PROJECT}
ErrorLog "/Users/ВАШ_ПОЛЬЗОВАТЕЛЬ/MAMP/www/${NAME_OF_PROJECT}/logs/error.log"
CustomLog "/Users/ВАШ_ПОЛЬЗОВАТЕЛЬ/MAMP/www/${NAME_OF_PROJECT}/logs/custom.log" common
</VirtualHost>
<Directory /Users/ВАШ_ПОЛЬЗОВАТЕЛЬ/MAMP/www/${NAME_OF_PROJECT}/public_html>
Options FollowSymLinks Includes
AllowOverride All
Order allow,deny
Allow from all
</Directory>"
echo "$add_to_apache_conf" >> ~/MAMP/httpd/vhosts/${NAME_OF_PROJECT}.conf
# Добавляем петлю
echo "127.0.0.1 ${NAME_OF_PROJECT}" | sudo tee -a /etc/hosts
# Меняем права
sudo chmod -R 777 /Users/ВАШ_ПОЛЬЗОВАТЕЛЬ/MAMP/www/$NAME_OF_PROJECT
# Рестартуем сервисы (не обязательно все, достаточно httpd и apachectl)
brew services restart httpd
sudo apachectl restart
brew services restart mariadb
brew services restart php@8.3
Делаем этот файл исполняемым:
chmod +x ~/MAMP/addsite.sh
В принципе все, теперь при запуске этого файл, будет создаваться папка с сайтом в /Users/ВАШ_ПОЛЬЗОВАТЕЛЬ/MAMP/www/ И он сразу будет открываться в браузере.
Что бы перезапускать сервисы в ручном режиме, можете использовать команды (или создать еще один .sh файл, что бы выполнять команды одним разом)
brew services restart mariadb
brew services restart php@8.3
brew services restart httpd
sudo apachectl restart
Оптимизируем под 1С-Битрикс
Тут все банально. Что бы все заработало с 1С-Битрикс, нужно внести правки в конфигурации php и mysql
Открываем файл php.ini в директории /opt/homebrew/etc/php/8.3/php.ini, находим и меняем в нем параметры:
short_open_tag = On
max_input_vars = 100000
memory_limit = 512M
upload_max_filesize = 4M
opcache.max_accelerated_files=100000
opcache.revalidate_freq=0
# Таймозону под свой часовой пояс
date.timezone = Europe/Moscow
Настройка базы данных mariaDB в macOS
Заходим в SQL консоль как пользователь root:
sudo mysql -u root
По очереди выполняем команды:
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('ПАРОЛЬ_ДЛЯ_ROOT');
FLUSH PRIVILEGES;
exit
Указанный пароль, в дальнейшем, используем для создания и подключения к базе данных.
Открываем файл my.ini в директории /opt/homebrew/etc/my.cnf , и вписываем в него параметры (их там не будет вообще):
sql_mode = ''
innodb_flush_log_at_trx_commit = 2
innodb_strict_mode = OFF
sync_binlog = 0
innodb_flush_method = O_DIRECT
transaction-isolation = READ-COMMITTED