Установка вебсервера на Apple M1 (нативный ARM стек), оптимизированный для 1С-Битрикс.

Просмотров: 9590

Появилась задачка, установить стек MAMP (macOS, Apache, MYSQL, PHP) на рабочий ноутбук с процессором Apple Silicon M1. В принципе, под macOs уже е сть готовое приложение MAMP-PRO, но на текущий момент оно работает через эмулятор Rosetta из-за чего теряет около 20% производительности и в целом подтупливает. Да и стоит почти 7000 рублей.

Решил установить именно адаптированные, ARM, версии софта в ручную из homebrew. Установка будет поддерживать виртуальные хосты, можно запускать любое количество сайтов.

Заметка создана на базе разроненных статей с англоязычных ресурсов и дополнена некоторыми "улучшалками" для удобного использования.

Внимание! В установке не учитываю моменты безопасности. Подразумевается использование, исключительно для локальной разработки проектов - без доступа из интернета.

Устанавливаем 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 7.4

Собственно, теперь запускаем установку всех нужных пакетов, автоматом скачаются и скомпилируются оптимизированные, для M1 пакеты. Займет много времени:

brew install -s mysql php@7.4 httpd

На этом все, в целом вебсервер уже готов и работоспособен.

Делаем удобно- конфигурации в домашней папке

Что бы всем этим добром было пользоваться удобно и просто, сделаем некоторые настройки и тюнинг.

Создаем папки для будущих сайтов и символьные ссылки на конфигурации, что бы были под рукой, в домашней папке пользователя:

mkdir ~/MAMP
mkdir ~/MAMP/www
mkdir ~/MAMP/httpd/vhosts
ln -s /opt/homebrew/etc/httpd ~/MAMP/httpd
ln -s /opt/homebrew/etc/php/7.4 ~/MAMP/php

Поднастроем Apache, что бы он работал с этими директориями и включим mod_rewrite

В файле /Users/ВАШ_ПОЛЬЗОВАТЕЛЬ/MAMP/httpd/httpd.conf вносим корректировки. Можете открыть в текстовом редакторе, типа Sublime или прямо в терминале, через nano. Как по мне, удобнее в текстовом редакторе:

Находим и раскоменнтируем строку:

LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so

Меняем DocumentRoot на папку своего пользователя:

DocumentRoot "/Users/ВАШ_ПОЛЬЗОВАТЕЛЬ/MAMP/www"
Directory "/Users/ВАШ_ПОЛЬЗОВАТЕЛЬ/MAMP/www"

В самый низ этого файла добавляем:

LoadModule php7_module /opt/homebrew/opt/php@7.4/lib/httpd/modules/libphp7.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 *:8080>
 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

# Рестартуем сервисы (не обязательно все, достаточно apachectl)
brew services restart mysql
brew services restart php@7.4
brew services restart httpd
sudo apachectl restart 

Делаем этот файл исполняемым:

chmod +x ~/MAMP/addsite.sh

В принципе все, теперь при запуске этого файл, будет создаваться папка с сайтом в /Users/ВАШ_ПОЛЬЗОВАТЕЛЬ/MAMP/www/ И он сразу будет открываться в браузере, с портом 8080.

Что бы перезапускать сервисы в ручном режиме, можете использовать команды (или создать еще один .sh файл, что бы выполнять команды одним разом)

brew services restart mysql
brew services restart php@7.4
brew services restart httpd

Оптимизируем под 1С-Битрикс

Тут все банально. Что бы все заработало с 1С-Битрикс, нужно внести правки в конфигурации php и mysql

Открываем файл php.ini в директории /opt/homebrew/etc/php/7.4/php.ini, находим и меняем в нем параметры:

short_open_tag = On
max_input_vars = 100000
memory_limit = 256M
upload_max_filesize = 4M
opcache.max_accelerated_files=100000
opcache.revalidate_freq=0

# Таймозону под свой часовой пояс
date.timezone = Europe/Moscow

Открываем файл my.ini в директории /opt/homebrew/etc/my.cnf , и вписываем в него параметры (их там не будет вообще):

innodb_flush_log_at_trx_commit = 2
innodb_strict_mode = OFF
sync_binlog = 0
innodb_flush_method = O_DIRECT
transaction-isolation = READ-COMMITTED
user123 02.11.2021
Какую скорость производительности в итоге показывает битрикс?
Михаил Базаров 03.11.2021
Цитата
user123 написал:
Какую скорость производительности в итоге показывает битрикс?
В зависимости от редакции и установленных модулей (плюс, общей нагрузки на устройство)
Проверил на редакции "Малый Бизнес", сам ноутбук ни чем не нагружен = выдало 48 баллов.
Guest 19.03.2022
После добавления нового  сайта  через скрипт создал в папке файл index.php с выводом пхп инфо и выдает 403 You don't have permission to access this resource, хотя права установились, пока не пойму в чем проблема