Телеграм: @camouf_ru Почта: mihail@bazarow.ru

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

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

Появилась задачка, установить стек 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, хотя права установились, пока не пойму в чем проблема

Записная книжка разработчика

Примерно с 2013-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Фиксированная корзина с обновлением, без перезагрузки страницы. Просмотров: 17499 Иногда нужно сделать так, чтобы корзина в интернет магазине, созданном на Битрикс, была по... Подключение SSL на Битрикс виртуальная машина Просмотров: 11929 С первого января 2017 года, наличие безопасного соединения HTTPS становится практически об... Заполнить картинки разделов каталога из картинок товаров Просмотров: 338 Задача: в каталоге, разделы и подразделы выводятся в виде плитки над товарами, с картинкам... Memcached на сайте под управлением битрикс, при использовании Веб Окр... Просмотров: 6940 Если вам важна скорость отдачи сайта, а у вашего сервера медленный диск для использования ... Прятать или показывать описание раздела каталога Просмотров: 598 В новых компонентах и шаблонах catalog.section есть не документированный и не выводимый па... Менять большую картинку, при клике на маленькую, в детальной карточке Просмотров: 1764 Мини скриптик, может кому пригодится для каталога товаров или новостей при использовании д... Отфильтровать новости в Битрикс за заданный период Просмотров: 15590 Иногда, нужно отфильтровать элементы (новости например) по дате в Битрикс, с помощью компо... Постраничная навигация в списке разделов Битрикс- catalog.section.lis... Просмотров: 8719 Если в магазине очень много разделов и хочется вывести их с постраничной навигацией: можно... Смена вида карточек товаров в catalog.section с иммитацией AJAX Просмотров: 818 Смену вида карточек товаров, в разделе каталога, можно реализовать с помощью сессии, запис... Ajax форма обратной связи, реализация в битрикс Просмотров: 7580 Иногда, на сайте требуется создать форму обратной связи, которая будет писать все данные в... Очистка корзины в 1С-Битрикс одним нажатием Просмотров: 27754 В стандартной корзине Битрикс не хватает кнопки для полной очистки корзины одним нажатием... Создание мобильного приложения на cordova, для любого сайта. Просмотров: 14192 Если стоит задача разработки мобильного приложения для сайта, можете воспользоваться данно... Ссылка и название раздела в списке новостей Битрикс Просмотров: 10517 Если нужно вывести название раздела инфоблока в котором находится конкретный элемент/новос... Изменить размер картинок на лету в битрикс Просмотров: 46794 Встала задачка: на собственном сайте, уменьшить размер превьюшек картинок у анонсов раздел... Определить местоположение пользователя и показать на карте Просмотров: 3270 Задача определить местоположение текущего пользователя и показать его на карте, с меткой. ... Снять ограничение на количество символов в комментарии к заказу магаз... Просмотров: 11554 Как многим известно, в интернет-магазине на Битрикс имеется ограничение на количество симв... Получить множественное пользовательское поле раздела. Значения множес... Просмотров: 357 Задача: У разделов инфоблока есть множественное поле типа список. Зная ID раздела, нужно п... Умный фильтр на главной странице Битрикс Просмотров: 20882 Редкая но востребованная задачка- это вывести компонент "умный фильтр" на главную страницу... Установка веб-сервера LAMP на ubuntu 20.04 LTS, оптимизированный под ... Просмотров: 11425 В последнее время, плотно пересел c macOS на ubuntu, и решил настроить себе полноценное ра... Вывод даты создания элемента в правильном формате в Битрикс Просмотров: 21668 Если нужно вывести дату создания новости, статьи или товара в каталоге, в принципе любого ...