Как подключиться по SSH в Docker-окружение Битрикс для разработки
Эта статья для серверов под управлением Linux. Я выполнял настройку на Raspberry Pi OS, которая основана на Debian. На других дистрибутивах Linux команды будут такими же или очень похожими.
Задача: настроить окружение Bitrix на базе env-docker так, чтобы:
- на сервере был пользователь
bitrix; - файлы сайта располагались в
/home/bitrix/www; - контейнеры работали с этим каталогом;
- мы подключались по SSH как
bitrixи редактировали файлы сайта напрямую.
Все действия ниже предполагается выполнить до первого запуска:
docker compose up -d
Так мы избегаем конфликтов с уже созданным томом env-docker_www_data и вопросов вида:
Volume "env-docker_www_data" exists but doesn't match configuration in compose file. Recreate (data will be lost)? (y/N)
В конце есть раздел о том, как поступить, если окружение уже запускалось.
Исходные условия
Предполагаем, что:
-
репозиторий окружения
env-dockerразмещён в каталоге:/opt/env-docker -
все команды для работы с контейнерами выполняем из этого каталога:
cd /opt/env-docker -
у нас есть доступ по SSH и права суперпользователя
sudo.
Создаём пользователя bitrix на сервере
В официальных контейнерах Bitrix пользователь bitrix имеет uid и gid 979. Чтобы права на файлы совпадали внутри контейнеров и на самом сервере, создаём такого же пользователя на хосте.
Выполняем:
sudo useradd -u 979 -U -m -s /bin/bash bitrix
Команда:
- создаёт пользователя
bitrixс идентификатором 979; - создаёт группу
bitrixс идентификатором 979; - создаёт домашний каталог
/home/bitrix; - задаёт оболочку
/bin/bash.
Задаём пароль пользователю bitrix, чтобы можно было подключаться по SSH:
sudo passwd bitrix
Система запросит ввод пароля дважды.
Проверяем результат:
id bitrix
Ожидаем вывод вида:
uid=979(bitrix) gid=979(bitrix) groups=979(bitrix)
Подготавливаем каталог для сайта /home/bitrix/www
Создаём каталог, в котором будут храниться файлы сайта:
sudo mkdir -p /home/bitrix/www
sudo chown bitrix:bitrix /home/bitrix/www
Пока это пустой каталог. Далее в него можно:
- установить продукт через bitrixsetup.php;
- восстановить сайт из резервной копии через restore.php;
- либо развернуть заранее подготовленный архив сайта.
Важно, что именно /home/bitrix/www мы будем привязывать к Docker-окружению.
Привязываем том www_data к /home/bitrix/www
Следующий шаг — настроить том www_data так, чтобы он использовал каталог /home/bitrix/www на сервере, а не внутреннее хранилище Docker.
Открываем файл /opt/env-docker/docker-compose.yml и находим блок volumes:. Он может выглядеть примерно так:
volumes:
...
www_data:
driver: local
...
Нас интересует только www_data. Остальное можно свернуть через ..., а само изменение оформить так: старую конфигурацию www_data комментируем, новую добавляем ниже.
В итоге блок должен выглядеть, например, так:
volumes:
...
# www_data:
# driver: local
www_data:
driver: local
driver_opts:
type: none
o: bind
device: /home/bitrix/www
...
Здесь:
- имя тома
www_dataостаётся тем же; device: /home/bitrix/www— путь к каталогу сайта на сервере;type: noneиo: bindнастраивают привязку этого тома к существующей директории.
В сервисах (php, nginx, cron) в docker-compose.yml уже присутствуют строки вида:
- www_data:/opt/www/
Их изменять не требуется. После правки блока volumes том www_data начнёт ссылаться на /home/bitrix/www, а контейнеры продолжат видеть его как /opt/www.
Первый запуск окружения
После того как:
- создан пользователь
bitrix; - подготовлен каталог
/home/bitrix/www; - том
www_dataпривязан к этому каталогу,
можно запускать окружение:
cd /opt/env-docker
docker compose up -d
docker compose ps
Docker:
- создаст том
www_dataкак привязку к/home/bitrix/www; - поднимет контейнеры;
- предоставит им каталог
/opt/wwwвнутри контейнера, который фактически соответствует/home/bitrix/wwwна сервере.
Далее мы можем:
- зайти в контейнер
php; - выполнить
bitrixsetup.phpдля установки продукта; - либо использовать
restore.phpдля восстановления сайта из резервной копии.
Все операции будут работать с каталогом /home/bitrix/www.
Подключение по SSH под пользователем bitrix
После настройки логично использовать для работы по SSH пользователя bitrix.
Подключаемся:
ssh bitrix@IP_сервера
После входа переходим в каталог сайта:
cd /home/bitrix/www
Далее можем:
- редактировать файлы сайта;
- запускать служебные скрипты;
- использовать IDE (например, Visual Studio Code по SSH), открывая
/home/bitrix/wwwкак корень проекта.
Контейнеры продолжают использовать том www_data:/opt/www/, поэтому все изменения в файлах сразу попадают в работающий сайт.
При необходимости можно настроить вход по SSH-ключам для пользователя bitrix (создать ключ на рабочей машине и добавить его в /home/bitrix/.ssh/authorized_keys), но для базовой работы это не обязательно.
Если окружение уже запускалось раньше
Выше мы исходили из того, что docker compose up -d ещё не выполнялся. Если окружение уже запускалось, Docker создал том env-docker_www_data с прежней конфигурацией. В этом случае при изменении настроек тома в docker-compose.yml возможна ошибка:
Volume "env-docker_www_data" exists but doesn't match configuration in compose file.
Recreate (data will be lost)? (y/N)
В такой ситуации можно действовать так:
-
Создаём пользователя
bitrixи каталог/home/bitrix/www, как описано выше. -
Останавливаем окружение:
cd /opt/env-docker docker compose stop -
Определяем путь к текущему тому с сайтом:
docker volume inspect env-docker_www_dataВ выводе находим строку
Mountpoint, например:"Mountpoint": "/var/lib/docker/volumes/env-docker_www_data/_data" -
Копируем содержимое тома в
/home/bitrix/wwwс помощьюrsync:sudo rsync -a /var/lib/docker/volumes/env-docker_www_data/_data/ /home/bitrix/www/Таким образом мы переносим все файлы сайта из существующего тома в новый каталог.
Если сайт до этого работал в контейнере, права на файлы, как правило, уже принадлежат пользователю
bitrixс uid 979. На хосте пользовательbitrixимеет тот же uid, поэтому дополнительно менять владельца чаще всего не требуется. -
Удаляем старый том:
docker volume rm env-docker_www_data -
В
docker-compose.ymlправим блокvolumesпо описанному выше шаблону:volumes: ... # www_data: # driver: local www_data: driver: local driver_opts: type: none o: bind device: /home/bitrix/www ... -
Запускаем окружение снова:
cd /opt/env-docker docker compose up -d
В результате существующие данные из тома перенесены в /home/bitrix/www, а дальше схема работы становится такой же, как при настройке с нуля.
Результат
После выполнения этих шагов мы получаем:
- пользователя
bitrixна сервере с uid/gid 979; - каталог
/home/bitrix/wwwс файлами сайта; - том
www_dataвdocker-compose.yml, привязанный к/home/bitrix/wwwчерезdriver_opts; - контейнеры, которые используют
www_data:/opt/www/и фактически работают с файлами в домашней директорииbitrix; - возможность подключаться по SSH под пользователем
bitrix, работать в/home/bitrix/wwwи управлять сайтом так же удобно, как в классической VMBitrix.
Такое выравнивание пользователя и томов упрощает разработку и эксплуатацию Docker-окружения Битрикс и минимизирует проблемы с правами доступа к файлам.