Реорганизация файлов 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 дней гарантии