Yandex Metrika
sanches.free 15 просмотров

Реорганизация файлов 1С‑Битрикс: var, etc и симлинки из document root

Зачем переносить тяжёлые каталоги

На продакшене удобно отделить «живые» данные от кода ядра: медиафайлы, загрузки пользователей, кеш композита и конфигурацию с секретами. Если держать всё это рядом с /bitrix, бэкап целиком document root становится тяжелее, а восстановление — длиннее. Классический приём — вынести каталоги в соседние папки (на уровень выше веб‑корня) и вернуть в привычные пути символические ссылки: для PHP и веб‑сервера путь не меняется.

Где должен лежать скрипт

Сценарий рассчитан на типовую схему: каталог сайта наподобие htdocs/, а установка Битрикс лежит внутри него. Положите bash‑файл на один уровень выше document root, чтобы относительные пути ../var и ../etc указывали из веб‑дерева наружу. Перед первым запуском снимите дамп или сделайте снимок диска: операции необратимы без ручной отладки.

Что куда перекладываем

  • В var/ — «шумные» данные: images, upload, а также bitrix/managed_cache, bitrix/stack_cache и bitrix/cache.
  • В etc/ — чувствительные настройки: bitrix/.settings.php и bitrix/php_interface/dbconn.php.

Имена WEB_ROOT, VAR_DIR и ETC_DIR в примере ниже можно заменить на свои, если у вас не htdocs, а например www или public.

Скрипт переноса и симлинков

Логика простая: при отсутствии целевых каталогов создаём их, затем для каждой пары выполняем mv и ln -s с тем относительным путём, который смотрит из старого места на новое.

#!/usr/bin/env bash
set -euo pipefail

# Каталог веб-документов (document root сайта)
WEB_ROOT='htdocs'
VAR_DIR='var'
ETC_DIR='etc'

cd "$(dirname "$0")"

mkdir -p "$VAR_DIR" "$ETC_DIR"

mv "$WEB_ROOT/images" "$VAR_DIR/images"
ln -snf "../${VAR_DIR}/images" "$WEB_ROOT/images"

mv "$WEB_ROOT/upload" "$VAR_DIR/upload"
ln -snf "../${VAR_DIR}/upload" "$WEB_ROOT/upload"

mv "$WEB_ROOT/bitrix/managed_cache" "$VAR_DIR/managed_cache"
ln -snf "../../${VAR_DIR}/managed_cache" "$WEB_ROOT/bitrix/managed_cache"

mv "$WEB_ROOT/bitrix/stack_cache" "$VAR_DIR/stack_cache"
ln -snf "../../${VAR_DIR}/stack_cache" "$WEB_ROOT/bitrix/stack_cache"

mv "$WEB_ROOT/bitrix/cache" "$VAR_DIR/cache"
ln -snf "../../${VAR_DIR}/cache" "$WEB_ROOT/bitrix/cache"

mv "$WEB_ROOT/bitrix/.settings.php" "$ETC_DIR/.settings.php"
ln -snf "../../${ETC_DIR}/.settings.php" "$WEB_ROOT/bitrix/.settings.php"

mv "$WEB_ROOT/bitrix/php_interface/dbconn.php" "$ETC_DIR/dbconn.php"
ln -snf "../../../${ETC_DIR}/dbconn.php" "$WEB_ROOT/bitrix/php_interface/dbconn.php"

Флаги -snf для ln перезаписывают существующую ссылку аккуратно; при необходимости замените на классический -s как в исходной заметке.

На что посмотреть после

  • Права владельца на новые деревья должны совпадать с пользователем PHP‑FPM / Apache.
  • Веб‑сервер должен следовать симлинкам (для статики через nginx обычно включено по умолчанию).
  • Резервное копирование и CI подстраиваются под физическое расположение var/etc, а не только под $WEB_ROOT.

Такой расклад не заменяет вынос сессий или отдельного хранилища для очередей, но заметно упрощает обслуживание файловой части типового инстанса 1С‑Битрикс.

Не хотите копаться сами?

Починю за 1-3 дня. Без предоплаты — оплата по результату.

15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии