Битрикс на каждый запрос трогает тысячи файлов. Docker Desktop на Mac кладёт эти обращения в виртуальную ФС — и страница каталога превращается в медитацию. Я попробовал, поругался и собрал стек так, как на сервере: нативно.
nginx · PHP-FPM 8.3 · MySQL 8 · Redis — через MacPorts. Без контейнеров, без ожидания.
Разница ощущается сразу: холодный старт окружения — секунды, хит Битрикса — как на проде, а не «подождите, Docker синхронизирует».
Каркас
Одна схема на все проекты:
- сайты лежат в
~/Sites/имя.test - каждый домен — свой vhost в
~/Sites/configs/nginx/conf.d/ *.testпрописаны в/etc/hosts— DNS не нужен- PHP-FPM один на всех (
127.0.0.1:9000), MySQL и Redis — общие
Управлять этим руками надоело быстро. Сначала появился server.sh, потом — нативная панель Server Control.

Один скрипт вместо десятка команд
~/Sites/server.sh поднимает и гасит сервисы через port load / port unload, рисует статусы портов и гоняет живые тесты PHP↔MySQL / PHP↔Redis.
SERVICES="nginx php83-fpm mysql8-server redis"
start_servers() {
for service in $SERVICES; do
sudo port load "$service" 2>/dev/null
done
sleep 2
check_status # процессы + порты 80 / 9000 / 3306 / 6379
}
# ./server.sh start | stop | restart | status | test
Команда test не врёт зелёной галочкой: она реально стучится в сокеты. Если MySQL «вроде запущен», а коннекта нет — увидишь сразу.
nginx под Битрикс
Для обычного PHP-сайта хватает try_files … /index.php. Для Битрикса — фолбэк на urlrewrite.php, запрет служебных кешей и запас по телу запроса (выгрузки из 1С бывают толстыми).
server {
listen 80;
server_name bai.test;
root /Users/erik/Sites/bai.test;
client_max_body_size 100M;
location ~* ^/(bitrix/cache|bitrix/managed_cache|bitrix/stack_cache|upload/1c_catalog|upload/resize_cache)/ {
deny all;
}
location / {
try_files $uri $uri/ /bitrix/urlrewrite.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 300s;
}
}
Новый проект = скопировал конфиг, поменял server_name / root, добавил строку в hosts, создал базу. Через Server Control это вообще кнопка «Создать сайт».
Почему Redis рядом
На каталоге с десятками тысяч SKU MySQL без кеша быстро становится узким местом даже локально. Redis как кеш-бэкенд Битрикса снимает лишние запросы — и отладка «почему тормозит витрина» становится честнее: ты видишь код, а не страдания диска.
Итог
- нативная скорость файловой системы — критично для Битрикса
- десяток сайтов на одном PHP-FPM, без зоопарка контейнеров
- старт/стоп/тест — скрипт или GUI, как удобнее в момент
- те же nginx/PHP/MySQL/Redis, что и на боевых серверах — меньше сюрпризов при выкладке
Docker я не хоронил: для чужих стеков и CI он ок. Для ежедневной Битрикс-разработки на Mac мой выбор — этот стек. Быстро, предсказуемо и без лишней магии.