Вчера был вечер решений без единой строчки кода. Сегодня — наоборот: руки в терминале, контейнеры, порты, «а почему оно не отвечает». По плану День 2 — это локальное окружение: поднять Docker-стек под Битрикс (nginx + php + mysql), положить триал «Бизнеса» и убедиться, что веб-сервер отвечает, а база доступна. Звучит просто. На практике — ровно та точка, где обычно теряют первый вечер на «у меня не стартует».
Процесс
Я заранее, ещё вчерашним решением (ADR-003), отказался собирать docker-compose руками. Взял официальную сборку bitrix-tools/env-docker — она уже знает, как Битриксу жить в контейнерах: nginx, php, mysql, плюс redis и push-сервер на будущее. Смысл челленджа не в том, чтобы героически написать свой стек, а в том, чтобы дойти до портала. Так что сегодня — клонирую окружение, причёсываю секреты и поднимаю.

Первым делом — секреты. В env-docker конфиг разнесён по нескольким файлам: .env (таймзона), .env_sql (пароли БД), .env_redis, .env_push. Везде стоят заглушки вида CHANGE_*_HERE, и это именно те грабли, на которые наступают: оставил шаблон — потом ловишь, почему mysql не пускает. Прошёлся, заменил все плейсхолдеры на реальные пароли, зафиксировал в docs/infra.md, какой хост у базы внутри docker-сети (mysql) и где живут файлы сайта в контейнере (/opt/www/).
Дальше — порты. Зафиксировал заранее: HTTP на 8588, HTTPS на 8589, чтобы не конфликтовать с уже занятыми 80/443 на машине. Обернул рутину в Makefile, чтобы не держать в голове длинные docker compose:
make upподнять,make downостановить,make logsсмотреть логи,make sh— зайти в php-контейнер под пользователемbitrix.
Мелочь, но экономит время с учётом того малого количества времени, которое могу тратить на проект.

И момент истины — make up. Контейнеры поднялись, открываю http://127.0.0.1:8588/ — сервер отвечает. Захожу в php-контейнер, проверяю, что база на месте и пускает с новым паролем. Пустой сайт пока, но он живой: это и есть Definition of Done текущего дня — «окружение стартует одной командой и отдаёт пустой сайт». Триал-дистрибутив «Бизнеса» закинул в корень, чтобы на Дне 3, пройти мастер установки.
Где можно залипнуть
Самое частое на этом шаге — порты и секреты. Если 8588/8589 уже кем-то заняты, up вроде проходит, а сайт не открывается — лечится либо освобождением порта, либо правкой маппинга в конфигурации docker-compose. Второе — те самые CHANGE_*_HERE: пропустил один файл, и контейнер mysql стартует, но коннект не идёт. Третье — права и пути: код сайта по умолчанию лежит в Docker-томе, а не в репозитории, и это нормально (версионируем только свой код в backend/local/, ADR-006) — но в первый раз это сбивает с толку.

Про инструменты и нейро-агентов
Чем именно выручили нейро-агенты на «инфраструктурном» вечере: разобрать многословный README env-docker и вытащить, какие именно .env-файлы и переменные надо тронуть; накидать Makefile-обёртки под нужные команды; объяснить, что значит конкретная ошибка в логах контейнера. Использовал модель Composer 2.5 в Cursor.
Итог
Локальное окружение поднимается одной командой, сервер на 8588 отвечает, база доступна, секреты заменены, команды обёрнуты в Makefile. Пустой, но живой стенд — фундамент, на который завтра встанет сам Битрикс.