Хостинг

Битрикс виртуальная машина на линукс. KVM + CentOS9 Stream

Битрикс виртуальная машина на линукс. KVM + CentOS9 Stream

Детальное пошаговое руководство по установке KVM на Linux, скачиванию образа CentOS 9 Stream и созданию виртуальной машины Битрикс.

 Руководство разделено на три основных этапа:


- Установка и настройка KVM

- Скачивание образа CentOS 9 Stream

- Создание и установка виртуальной машины CentOS 9


 Мы будем использовать `virt-manager` — удобный графический интерфейс для управления KVM.

Этап 1: Установка и настройка KVM

Шаг 1.1: Проверка поддержки виртуализации

 Сначала убедитесь, что ваш процессор поддерживает аппаратную виртуализацию.


 Откройте терминал и выполните команду:

bash Скопировать

Закрыть блок

egrep -c '(vmx|svm)' /proc/cpuinfo
- Если результат `1` или больше — ваш процессор поддерживает виртуализацию. `vmx` для Intel, `svm` для AMD.

- Если результат `0` — виртуализация не поддерживается или отключена в BIOS/UEFI. Перезагрузите компьютер, зайдите в настройки BIOS/UEFI и найдите опцию с названием `Virtualization Technology (VT-x)`, `AMD-V`, `SVM` и включите её (`Enable`).

Шаг 1.2: Установка необходимых пакетов

 Теперь установим сам KVM, демон управления `libvirt` и графический менеджер `virt-manager`.


 Для дистрибутивов на базе RHEL (CentOS, Fedora, AlmaLinux, Rocky Linux):

bash Скопировать

Закрыть блок

sudo dnf install qemu-kvm libvirt-daemon-system libvirt-clients virt-manager bridge-utils
 Для дистрибутивов на базе Debian (Ubuntu, Zorin OS, Mint):

bash Скопировать

Закрыть блок

sudo apt update
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager

Шаг 1.3: Запуск службы и добавление пользователя в группу

 Служба `libvirtd` должна быть запущена и добавлена в автозагрузку.

bash Скопировать

Закрыть блок

sudo systemctl start libvirtd
sudo systemctl enable libvirtd
 Чтобы управлять виртуальными машинами без постоянного ввода пароля `sudo`, добавьте своего пользователя в группу `libvirt`.

bash Скопировать

Закрыть блок

sudo usermod -aG libvirt $(whoami)
- `-aG` — добавить пользователя в группу.

- `$(whoami)` — автоматически подставит имя вашего текущего пользователя.


 ВАЖНО: Чтобы изменения прав вступили в силу, вам нужно полностью выйти из системы и зайти снова или просто перезагрузить компьютер.

Этап 2: Скачивание образа CentOS 9 Stream Minimal

 Для серверных задач лучше всего подходит минимальный образ (`boot.iso`), который скачивает необходимые пакеты во время установки.

Шаг 2.1: Создание директории для ISO-образов

 Хорошей практикой является хранение ISO-образов в специальной директории, доступной для KVM.

bash Скопировать

Закрыть блок

sudo mkdir -p /var/lib/libvirt/boot/

Шаг 2.2: Скачивание образа

 Перейдите на официальную страницу загрузки CentOS Stream 9: [https://www.centos.org/centos-stream/](https://www.centos.org/centos-stream/)


 Найдите ссылку на архитектуру `x86_64` и скачайте `boot.iso`.


 Или воспользуйтесь терминалом, чтобы скачать образ прямо в созданную папку:

bash Скопировать

Закрыть блок

# Получаем URL последней версии boot.iso
ISO_URL=$(curl -s https://www.centos.org/download/ | grep -o 'https://.*x86_64-boot.iso' | head -n 1)

# Скачиваем файл с помощью wget или curl
# Используем wget:
sudo wget -O /var/lib/libvirt/boot/centos-stream-9-boot.iso "$ISO_URL"

# Или используем curl (если wget не установлен):
# sudo curl -L -o /var/lib/libvirt/boot/centos-stream-9-boot.iso "$ISO_URL"
 Теперь у вас есть установочный образ в `/var/lib/libvirt/boot/`.

Этап 3: Создание и установка виртуальной машины CentOS 9

 Мы будем использовать графическое приложение `virt-manager`.

Шаг 3.1: Запуск Virt-Manager

 Откройте меню приложений и найдите `Virtual Machine Manager` или выполните в терминале:

bash Скопировать

Закрыть блок

virt-manager

Шаг 3.2: Мастер создания новой ВМ

-

	 В окне `virt-manager` нажмите на иконку "Создать новую виртуальную машину" (монитор с плюсиком в левом верхнем углу).





-

	 Шаг 1 из 4: Выбор метода установки.





	<li>Выберите "Локальный установочный носитель (ISO-образ или CD-ROM)".

	- Нажмите "Вперед".
-
	 Шаг 2 из 4: Выбор ISO-образа.





	<li>Нажмите кнопку "Обзор...".

	- В открывшемся окне справа нажмите "Обзор локально".

	- Перейдите в директорию `/var/lib/libvirt/boot/` и выберите ваш файл `centos-stream-9-boot.iso`.

	- Система должна автоматически определить ОС как "CentOS Stream 9". Если нет, снимите галочку "Автоматически определять" и выберите её вручную из списка.

	- Нажмите "Вперед".
-
	 Шаг 3 из 4: Настройка ОЗУ и ЦП.





	<li>Память (RAM): Укажите минимум `2048` МБ (2 ГБ) для комфортной работы установщика и системы.

	- ЦП (CPUs): Укажите `2` ядра.

	- Нажмите "Вперед".
-
	 Шаг 4 из 4: Настройка диска.





	<li>Выберите "Создать образ диска для виртуальной машины".

	- Укажите размер. Для минимальной установки достаточно `20` ГБ.

	- Нажмите "Вперед".
-
	 Последний шаг: Имя и финализация.





	<li>Имя: Введите имя для вашей ВМ, например, `centos9-minimal`.

	- ВАЖНО: Поставьте галочку "Настроить конфигурацию перед установкой". Это позволит нам проверить настройки сети.

	- Нажмите "Готово".

Шаг 3.3: Проверка конфигурации и запуск установки

 Откроется окно с детальной конфигурацией ВМ.


- Слева выберите раздел "Сетевая карта". По умолчанию будет выбран тип сети "NAT". Это самый простой вариант, который даст ВМ доступ в интернет через ваш компьютер. Для начала этого достаточно.

- Убедитесь, что все остальные параметры вас устраивают.

- В левом верхнем углу нажмите кнопку "Начать установку".

Шаг 3.4: Процесс установки CentOS 9

 Откроется окно консоли ВМ, и начнется загрузка установщика CentOS (Anaconda).


- Выбор языка: Выберите `Русский` или `English` и нажмите "Продолжить".

- Центр установки (Installation Summary): Здесь нужно настроить несколько ключевых моментов, отмеченных значком предупреждения.


	<li>Цель установки (Installation Destination):


		<li>Нажмите на этот пункт.

		- Вы увидите ваш виртуальный диск (например, `20 GiB, vda`). Просто выделите его галочкой.

		- Нажмите "Готово" в левом верхнем углу.
- Пароль root (Root Password):
		<li>Нажмите, чтобы задать пароль для суперпользователя `root`.

		- Введите надежный пароль дважды.

		- Можете поставить галочку "Разрешить вход для root по SSH с паролем" для удобства в лабораторной среде (в продакшене не рекомендуется).

		- Нажмите "Готово".
- Сеть и имя узла (Network & Host Name):
		<li>Нажмите на этот пункт.

		- В правом верхнем углу переключите ползунок Ethernet в положение ON.

		- Машина должна автоматически получить IP-адрес от сети NAT (например, `192.168.122.x`). Это означает, что сеть работает.

		- Нажмите "Готово".
- После того как все пункты настроены (предупреждения исчезли), нажмите кнопку "Начать установку".
- Дождитесь завершения процесса.

- Когда установка будет завершена, нажмите "Перезагрузить систему".

Завершение

 После перезагрузки виртуальная машина запустится и покажет вам консоль с приглашением для входа:
CentOS Stream 9
Kernel ...
...
localhost login:
- Войдите в систему, используя логин `root` и пароль, который вы задали.

- Проверьте сетевое соединение: `ping 8.8.8.8`

- Обновите систему: `dnf update -y`


 Поздравляем! Вы успешно установили KVM и развернули на нём свою первую виртуальную машину с CentOS 9 Stream.

Вставляем то что битркис дал, и … Ничего :)

 Ошибка `-bash: wget: команда не найдена` означает именно то, что написано: в вашей операционной системе не установлена программа `wget`, которая используется для скачивания файлов по сети.


 Это стандартная ситуация для некоторых минимальных установок серверных ОС (например, CentOS/RHEL/AlmaLinux/Rocky Linux), где по умолчанию ставят только самый необходимый набор программ, чтобы система была более безопасной и "легкой".

Решение 1: Установить wget (Рекомендуется)

 Самый правильный способ — установить недостающую утилиту. Судя по URL (`.../dnf/...`), у вас, скорее всего, дистрибутив, использующий менеджер пакетов `dnf` (например, CentOS Stream 8/9, AlmaLinux, Rocky Linux, Fedora).


 Поскольку вы уже работаете под пользователем `root`, вам не нужен `sudo`. Выполните команду:

bash Скопировать

Закрыть блок

dnf install wget
 Система попросит подтвердить установку, нажмите `y` и Enter.


 После завершения установки вы сможете успешно выполнить вашу исходную команду:

bash Скопировать

Закрыть блок

wget https://repo.bitrix24.tech/dnf/bitrix-env-9.sh
 Если у вас более старая система (например, CentOS 7), используйте `yum`:

bash Скопировать

Закрыть блок

yum install wget

Решение 2: Использовать альтернативу — curl (Быстрый способ)

 В большинстве современных систем, даже если нет `wget`, почти всегда есть другая популярная утилита — `curl`. Она выполняет те же функции, но с немного другим синтаксисом.


 Чтобы скачать файл с помощью `curl` и сохранить его с оригинальным именем (`bitrix-env-9.sh`), используйте флаг `-O` (большая буква O):

bash Скопировать

Закрыть блок

curl -O https://repo.bitrix24.tech/dnf/bitrix-env-9.sh
 Или, если вы хотите сохранить файл под другим именем, используйте флаг `-o` (маленькая буква o) и укажите имя файла:

bash Скопировать

Закрыть блок

curl -o setup.sh https://repo.bitrix24.tech/dnf/bitrix-env-9.sh
 Этот способ хорош тем, что не требует установки дополнительного ПО.

Итог

- Простое решение сейчас: Используйте команду с `curl -O`.

- Правильное решение на будущее: Установите `wget` командой `dnf install wget`, так как многие инструкции в интернете используют именно эту утилиту.


You can find password settings in config file: /root/.my.cnf.
Anonymous users removed from MySQL service
Remote root access to MySQL service disabled
All 'test' DB privileges revoked.
MySQL privileges restarted.
MySQL security configuration has been completed.
Firewall has been configured.
Please wait until all tasks is finished.
Bitrix Environment bitrix-env has been installed successfully.
Good luck)

Полное руководство: Установка и настройка веб-окружения Битрикс на CentOS 9 для локальной разработки

Задача: Развернуть на виртуальной машине с CentOS 9 профессиональную среду для разработки сайтов на «1С-Битрикс». Цель — получить удобное, быстрое и максимально приближенное к боевому серверу окружение, используя локальный домен (например, kenel.local) и доверенный SSL-сертификат.

 Эта инструкция подробно описывает весь процесс, включая решение типичных проблем, с которыми можно столкнуться на каждом этапе.

Оглавление

	- [Шаг 1: Удобный доступ к серверу по SSH](#step1)

	- [Шаг 2: Установка окружения «1С-Битрикс» (Bitrix Environment)](#step2)

	- [Шаг 3: Решение проблемы с SELinux](#step3)

	- [Шаг 4: Настройка локального домена](#step4)

	- [Шаг 5: Создание доверенного SSL-сертификата с помощью mkcert](#step5)

	- [Шаг 6: Финальная настройка сайта в Bitrix Environment](#step6)

	- [Заключение](#conclusion)

Шаг 1: Удобный доступ к серверу по SSH

Проблема: Работать напрямую в консоли виртуальной машины (VirtualBox, VMware) неудобно. Главный минус — невозможность легко копировать и вставлять команды из инструкций.

Решение: Использовать подключение по SSH. Это стандарт индустрии для управления серверами. Вы работаете в привычном терминале на своем основном компьютере, а все команды выполняются на виртуальной машине. Копирование и вставка работают идеально.

Как подключиться по SSH:

-

Узнайте IP-адрес виртуальной машины. Выполните в консоли CentOS одну из команд:

ip a
	 Или более короткий вариант:
hostname -I
	 Ищите IP-адрес в вашей локальной сети (обычно вида `192.168.x.x` или `10.0.x.x`).





-

Важно: Для того чтобы ваша ВМ была доступна из локальной сети, в ее настройках (в VirtualBox/VMware) тип сетевого подключения должен быть «Сетевой мост» (Bridged Adapter), а не «NAT».

-

Подключитесь с вашего основного компьютера. Откройте терминал и используйте команду, подставив имя пользователя и IP-адрес ВМ:

ssh adminus@192.168.1.15  # Замените на ваше имя пользователя и IP

Шаг 2: Установка окружения «1С-Битрикс» (Bitrix Environment)

 Теперь, когда у нас есть удобный доступ, можно приступать к установке. Мы будем использовать официальный скрипт от Битрикса, который все сделает за нас.


-

Скачайте установочный скрипт. Выполните на сервере (уже через SSH):

wget https://repo.bitrix.info/yum/bitrix-env.sh
-

Сделайте скрипт исполняемым:

chmod +x bitrix-env.sh
-

Запустите скрипт с правами суперпользователя:

sudo ./bitrix-env.sh

Шаг 3: Решение проблемы с SELinux

Проблема: Сразу после запуска скрипт установки прерывается с сообщением: You have to disable SElinux before installing Bitrix Environment.

Реше��ие: SELinux — это система безопасности, которая по умолчанию включена в CentOS и мешает работе Битрикс-окружения. Ее нужно отключить.

Как отключить SELinux:

-

Откройте конфигурационный файл в текстовом редакторе, например, nano:

sudo nano /etc/selinux/config
-

Найдите строку SELINUX=enforcing и измените ее на:

SELINUX=disabled
-

	 Сохраните файл (`Ctrl+X`, затем `Y`, затем `Enter`).





-

Обязательно перезагрузите сервер, чтобы изменения вступили в силу:

sudo reboot
-

	 После перезагрузки снова подключитесь по SSH и **повторно запустите скрипт установки**:
sudo ./bitrix-env.sh
 После этого установка должна пройти до конца и завершиться сообщением об успехе.

Шаг 4: Настройка локального домена

Проблема: Заходить на сайт по IP-адресу неудобно, особенно если сайтов будет несколько.

Решение: Привязать к IP-адресу виртуальной машины локальный домен (например, kenel.local). Это делается путем редактирования файла hosts на вашем основном рабочем компьютере (не на ВМ).

Как настроить локальный домен:

-

Откройте файл hosts с правами администратора.

	<li>**Linux (Zorin OS, Ubuntu, Mint):**
sudo nano /etc/hosts
	- **Windows:** Запустите Блокнот от имени администратора и откройте файл `C:\Windows\System32\drivers\etc\hosts`.

	- **macOS:**
sudo nano /etc/hosts
-

Добавьте в конец файла новую строку, указав IP вашей ВМ и выбранный домен:

192.168.1.15  kenel.local www.kenel.local # Замените IP на ваш
	 Можно добавить сразу несколько доменов для будущих проектов:
192.168.1.15  site1.kenel.local www.site1.kenel.local
192.168.1.15  site2.kenel.local www.site2.kenel.local
-

	 Сохраните файл. Теперь при вводе в браузере адреса `http://kenel.local` ваш компьютер будет обращаться напрямую к вашей виртуальной машине.

Шаг 5: Создание доверенного SSL-сертификата с помощью mkcert

Проблема: Сайты без HTTPS помечаются браузерами как “незащищенные”. Обычный сертификат Let’s Encrypt для локального домена получить нельзя. Самоподписанные сертификаты вызывают ошибки в браузере.

Решение: Использовать утилиту mkcert. Она создает локальный центр сертификации (CA) на вашем компьютере и генерирует для него сертификаты, которым все браузеры на вашей машине будут доверять. Вы получите заветный “зеленый замочек”.

Процесс настройки mkcert (все действия выполняются на основном компьютере):

-

Установите mkcert на Zorin OS.

# Устанавливаем зависимость для интеграции с Firefox
sudo apt update
sudo apt install libnss3-tools -y

# Скачиваем и устанавливаем mkcert
wget "https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64" -O mkcert
chmod +x mkcert
sudo mv mkcert /usr/local/bin/
-

Создайте локальный центр сертификации (CA). Эта команда выполняется один раз:

mkcert -install
-

Сгенерируйте сертификат для вашего домена.

# Создадим папку для сертификатов для порядка
mkdir -p ~/certs
cd ~/certs

# Генерируем сертификат
mkcert kenel.local www.kenel.local
	 В папке `~/certs` появятся два файла: `kenel.local.pem` (сертификат) и `kenel.local-key.pem` (ключ).





-

Скопируйте сертификаты на виртуальную машину с помощью scp:

# Выполнять из папки ~/certs на вашем Zorin OS
scp kenel.local.pem kenel.local-key.pem adminus@192.168.1.15:~/
	 Файлы будут скопированы в домашнюю директорию `/home/adminus` на сервере.

Шаг 6: Финальная настройка сайта в Bitrix Environment

 Все готово для запуска сайта. Теперь нужно "сообщить" веб-серверу на ВМ, чтобы он использовал наш домен и SSL-сертификат.


-

	 Откройте в браузере `http://kenel.local`. Вы увидите панель управления Bitrix Environment.





-

	 Используйте мастер создания сайта. Когда он спросит про домен, укажите `kenel.local`.





-

	 В настройках сайта найдите опцию **"Настроить HTTPS"**.





-

	 Включите ее и укажите пути к файлам сертификата и ключа, которые мы скопировали на сервер:





	<li>**Путь к файлу SSL-сертификата:** `/home/adminus/kenel.local.pem`

	- **Путь к файлу ключа SSL-сертификата:** `/home/adminus/kenel.local-key.pem`
-
	 Сохраните настройки. Bitrix Environment автоматически перезапустит веб-сервер.






 После этого ваш сайт должен быть доступен по адресу **`https://kenel.local`** с валидным сертификатом и зеленым замком в адресной строке браузера.

Заключение

Поздравляем! Вы прошли полный цикл настройки профессионального локального окружения для разработки на «1С-Битрикс». В результате вы имеете:

	- Стабильный сервер на базе CentOS 9.

	- Оптимизированное и настроенное окружение Bitrix Environment.

	- Удобный доступ к серверу по SSH.

	- Полноценный локальный домен для вашего проекта.

	- Доверенный SSL-сертификат, делающий среду разработки максимально похожей на боевой сервер.




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

Комплексная диагностика и решение проблем на сервере Bitrix

 В этой статье мы рассмотрим пошаговый процесс диагностики и устранения ряда типичных проблем на веб-сервере под управлением Bitrix Environment на CentOS 9. Мы столкнулись с недоступностью служб, ошибками 504 Gateway Timeout и множественными сбоями в штатной проверке системы Битрикс.

Этап 1: Первичная диагностика доступности служб

 Первоначальная задача заключалась в проверке доступности ключевых портов.

Проблема: Необходимо было проверить статус портов: 22 (SSH), 80/443 (веб-сервер), 8890/8891 (NTLM) и 8893/8894 (сервер сообщений).

Решение:

	-

Проверка слушающих портов: С помощью команды ss -tulpn мы определили, какие службы реально запущены. Выяснилось, что порты 8890 и 8891 для NTLM-авторизации не прослушивались.

	-

Проверка брандмауэра: Команда firewall-cmd --list-all показала, что брандмауэр настроен корректно и не блокирует необходимые порты.

Вывод: Проблема была не в сетевых ограничениях, а в том, что службы для NTLM не были запущены. Попытки активировать их через стандартные конфигурации Nginx не увенчались успехом и потребовали бы ручного вмешательства администратора.

Этап 2: Устранение ошибок 504 Gateway Timeout

 Сайт периодически выдавал ошибки 504, что указывало на проблемы взаимодействия между прокси-сервером Nginx и бэкендом Apache.

Проблема: Nginx не дожидался ответа от Apache, что приводило к ошибкам 504 Gateway Timeout.

Решение:

	-

		 Анализ логов Nginx (`/var/log/nginx/error.log`):




		 В логах были обнаружены ошибки `upstream timed out`, что подтвердило проблемы на стороне Apache.





	-

		 Анализ логов Apache (`/var/log/httpd/error_log`):




		 Здесь мы нашли две основные причины:





		<li>`server reached MaxRequestWorkers setting`: Apache был перегружен, ему не хватало рабочих процессов для обработки всех запросов.

		- `fsockopen(): SSL: Handshake timed out`: PHP-скрипты пытались установить долгие и безуспешные соединения с сервером обновлений `www.1c-bitrix.ru`, занимая рабочих Apache.
-
		 Блокировка внешних запросов:




		 Чтобы мгновенно освободить рабочих Apache, мы перенаправили домен сервера обновлений на локальный адрес. Это заставило долгие запросы прерываться мгновенно, а не висеть в ожидании.



	 echo '127.0.0.1 www.1c-bitrix.ru' >> /etc/hosts</pre>

	-

		 Перезапуск Apache:




		 Для применения изменений и очистки "зависших" процессов мы перезапустили Apache.



	 systemctl restart httpd</pre>

Результат: Ошибки 504 были успешно устранены.

Этап 3: Исправление ошибок из отчета проверки системы Битрикс

 После решения проблемы с 504, мы приступили к анализу отчета штатной проверки Битрикса, который содержал множество ошибок.

3.1. Ошибка работы с сокетами

Проблема: check_socket: Fail. Connection to mk.local:80 Fail. Socket error [113]: No route to host. Сервер не мог подключиться к самому себе по локальному имени, что вызывало каскад ошибок в других тестах.

Решение: Мы добавили IP-адрес сервера (192.168.122.87) и его локальное имя в файл /etc/hosts, чтобы система могла корректно разрешать этот адрес. echo ‘192.168.122.87 mk.local’ >> /etc/hosts

3.2. Ошибка структуры базы данных

Проблема: check_mysql_table_structure: Fail. Тип колонки ID в таблице b_iblock_element_property не соответствовал требуемому (был int вместо bigint).

Решение: Был выполнен SQL-запрос для изменения типа данных в колонке. Так как пароль в dbconn.php оказался неверным, пользователю были предоставлены инструкции для безопасного входа в MySQL и ручного выполнения команды.

	 Команда для выполнения в консоли MySQL:



 ALTER TABLE `b_iblock_element_property` CHANGE `ID` `ID` bigint NOT NULL auto_increment;</pre>

	 Пользователь успешно выполнил команду, и проблема была решена.

3.3. Ошибка доступа к серверу обновлений

Проблема: check_update: Fail. Ошибочный ответ сервера обновлений (HTTP/1.1 404 Not Found).

Решение: Мы объяснили, что эта ошибка является ожидаемым следствием блокировки www.1c-bitrix.ru в файле /etc/hosts. Для проведения реальной диагностики исходной проблемы (тайм-аут SSL) мы временно удалили эту блокировку. sed -i ‘/www.1c-bitrix.ru/d’ /etc/hosts

	 Это позволило бы при повторной проверке увидеть настоящую ошибку соединения и продолжить диагностику.

Заключение

 Системный подход к диагностике позволил выявить и устранить целый комплекс взаимосвязанных проблем. Ключевыми шагами стали анализ логов для выявления корневых причин, а также последовательное исправление ошибок, начиная с самых критичных. Данный кейс демонстрирует, как одна проблема (медленные внешние запросы) может приводить к другой (перегрузка сервера и ошибки 504), и как важно проводить диагностику на всех уровнях системы: от сетевой доступности до конфигурации приложений и базы данных.
Удобная разработка: правим файлы в VS Code и сразу видим результат в CentOS
============================================================================

Редактируем сайт в VS Code на хосте, а изменения мгновенно отображаются на работающем сайте внутри CentOS-виртуалки. Это достигается через Shared Folder (проброс каталога).

• Файлы физически хранятся на хосте: /home/adminus/git/mk
• Виртуальная машина получает к ним прямой доступ: /home/bitrix/www

ВАЖНО: выберите вашу систему виртуализации (VirtualBox, QEMU/KVM, VMware) и следуйте соответствующей инструкции ниже.

------------------------------------------------------------------------------
Подготовительный шаг (для любой системы)
------------------------------------------------------------------------------
Резервная копия: перед монтированием сохраните текущее содержимое /home/bitrix/www:

sudo mv /home/bitrix/www /home/bitrix/www_backup
sudo mkdir /home/bitrix/www
sudo chown bitrix:bitrix /home/bitrix/www

------------------------------------------------------------------------------
VirtualBox
------------------------------------------------------------------------------
1. Установка Guest Additions
   sudo dnf install -y kernel-devel kernel-headers dkms gcc make perl
   # Далее в меню VirtualBox: Устройства → Подключить образ Guest Additions
   sudo mkdir -p /mnt/cdrom
   sudo mount /dev/cdrom /mnt/cdrom
   cd /mnt/cdrom
   sudo ./VBoxLinuxAdditions.run
   sudo reboot

2. Настройка общей папки (ВМ выключена)
   • Параметры → Общие папки → «+»
   • Путь на хосте: /home/adminus/git/mk
   • Имя папки: mk_share (без автоподключения)

3. Ручное монтирование
   sudo mount -t vboxsf -o uid=bitrix,gid=bitrix mk_share /home/bitrix/www/

4. Автоматическое монтирование
   Добавьте строку в /etc/fstab:
   mk_share /home/bitrix/www vboxsf defaults,uid=bitrix,gid=bitrix 0 0

------------------------------------------------------------------------------
QEMU/KVM (virt-manager) — virtiofs
------------------------------------------------------------------------------
1. Настройка virtiofs (ВМ выключена)
   • virt-manager → Добавить оборудование → Файловая система
   • Драйвер: virtiofs
   • Исходный путь: /home/adminus/git/mk
   • Tag: mk_host

2. Монтирование
   sudo mount -t virtiofs -o uid=bitrix,gid=bitrix mk_host /home/bitrix/www/

3. Авто-монтирование
   Добавьте в /etc/fstab:
   mk_host /home/bitrix/www virtiofs defaults,uid=bitrix,gid=bitrix 0 0

------------------------------------------------------------------------------
VMware
------------------------------------------------------------------------------
1. VMware Tools (если ещё не установлены)
   sudo dnf install -y open-vm-tools

2. Настройка shared folder
   • VM → Settings → Options → Shared Folders → Always Enabled → Add /home/adminus/git/mk

3. Монтирование
   sudo vmhgfs-fuse .host:/ /home/bitrix/www -o allow_other,uid=bitrix,gid=bitrix

4. Авто-монтирование
   Добавьте в /etc/fstab:
   .host:/ /home/bitrix/www fuse.vmhgfs-fuse allow_other,uid=bitrix,gid=bitrix 0 0

------------------------------------------------------------------------------
Готово!
------------------------------------------------------------------------------
Теперь любое изменение файлов в /home/adminus/git/mk на хосте мгновенно появляется в /home/bitrix/www внутри виртуальной машины.

Инструкция по настройке virtiofs для QEMU/KVM

 Отлично, для QEMU/KVM мы будем использовать современный и производительный способ — `virtiofs`. Это позволит напрямую "пробросить" файловую систему хоста в гостевую ОС с минимальными потерями производительности.


 Действовать будем в 3 этапа: сначала подготовим гостевую систему, затем настроим виртуальную машину на хосте, и в конце примонтируем папку внутри CentOS.

Шаг 0: Резервная копия (внутри виртуальной машины)

Это самый важный шаг. Монтирование скроет текущие файлы в /home/bitrix/www. Сделаем их резервную копию.

 Выполните в терминале **виртуальной машины CentOS**:
# Переименовываем текущую папку с сайтом, чтобы сохранить её
sudo mv /home/bitrix/www /home/bitrix/www_backup

# Создаём пустую папку, которая станет точкой монтирования
sudo mkdir /home/bitrix/www

# Сразу выставляем правильного владельца для этой папки
sudo chown bitrix:bitrix /home/bitrix/www

Шаг 1: Настройка на хост-машине (где запущен QEMU/KVM)

 Вам нужно добавить `virtiofs` устройство в конфигурацию вашей виртуальной машины. **Для этого её необходимо выключить.**


 Есть два способа: через графический интерфейс `virt-manager` или через командную строку `virsh`.

Способ 1: Графический интерфейс virt-manager

- Откройте `virt-manager`, выберите вашу виртуальную машину (она должна быть выключена).

- Нажмите кнопку "Открыть", чтобы перейти к её настройкам.

- Внизу слева нажмите кнопку **"Добавить оборудование"**.

- В открывшемся окне выберите **"Файловая система"**.

- Настройте параметры следующим образом:


	<li>**Драйвер:** выберите `virtiofs`.

	- **Исходный путь:** укажите путь на **вашей хост-машине**: `/home/adminus/git/mk`.

	- **Конечный путь:** это не путь, а **метка (tag)**, которая будет видна в гостевой системе. Введите простое имя, например, `mk-share`.
- Нажмите "Готово".

Способ 2: Командная строка virsh

- Откройте терминал на хост-машине.

- Выполните команду для редактирования конфигурации, заменив `<имя_вм>` на имя вашей машины:
virsh edit <имя_вм>
- Откроется XML-конфигурация. Внутри секции `<devices>...</devices>` добавьте следующий блок:
<filesystem type='mount' accessmode='passthrough'>
  <driver type='virtiofs'/>

  <target dir='mk-share'/>
</filesystem>
- Сохраните и закройте редактор.


 Теперь можно **запускать виртуальную машину**.

Шаг 2: Монтирование внутри гостевой машины (CentOS 9)

- После загрузки CentOS откройте терминал.

- Выполните команду монтирования:
sudo mount -t virtiofs -o uid=bitrix,gid=bitrix mk-share /home/bitrix/www/
	<li>`-t virtiofs` — указываем тип файловой системы.

	- `-o uid=bitrix,gid=bitrix` — **критически важный параметр!** Он гарантирует, что все файлы из проброшенной папки будут принадлежать пользователю `bitrix`, от имени которого работает веб-сервер. Без этого сайт работать не будет.

	- `mk-share` — та самая метка (конечный путь), которую мы задали на Шаге 1.

	- `/home/bitrix/www/` — куда мы монтируем эту папку.
- Проверьте результат: ``` ls -l /home/bitrix/www ``` Вы должны увидеть содержимое вашей папки `/home/adminus/git/mk` с хост-машины.

Шаг 3: Автоматическое монтирование при загрузке

 Чтобы не выполнять команду `mount` каждый раз после перезагрузки, добавим запись в системный файл `/etc/fstab`.


- Откройте файл в текстовом редакторе:
sudo nano /etc/fstab
- Добавьте в самый конец файла новую строку:
mk-share   /home/bitrix/www   virtiofs   defaults,uid=bitrix,gid=bitrix   0   0
- Сохраните файл (в `nano` это `Ctrl+O`, `Enter`, затем `Ctrl+X`).

Готово! После следующей перезагрузки виртуальной машины папка будет примонтирована автоматически. Теперь вы можете редактировать файлы в /home/adminus/git/mk на своей основной машине, а изменения будут мгновенно отражаться на сайте внутри виртуальной машины.

ОШИБКА е удалось добавить устройство: unsupported configuration: ‘virtiofs’ requires shared memory Traceback (most recent call last): File “/usr/share/virt-manager/virtManager/addhardware.py”, line 1256, in _finish_cb failure = self._add_device(dev)

 Эта ошибка означает, что для использования virtiofs необходимо настроить разделяемую память (shared memory) для виртуальной машины. Вот как это исправить:

Решение через virt-manager (графический интерфейс)

Шаг 1: Включите разделяемую память

- В virt-manager откройте настройки виртуальной машины (VM должна быть выключена)

- Перейдите в раздел "Память" (Memory)

- Найдите опцию "Включить разделяемую память" (Enable shared memory) и поставьте галочку

- Примените изменения

Шаг 2: Добавьте virtiofs устройство

 Теперь повторите попытку добавления файловой системы:


- Нажмите "Добавить оборудование"

- Выберите "Файловая система"

- Настройте:


	<li>Драйвер: virtiofs

	- Исходный путь: `/home/adminus/git/mk`

	- Конечный путь: `mk-share` (это метка/тег)

Решение через командную строку

 Если графический интерфейс не работает, можно отредактировать XML напрямую:

bash Скопировать

Закрыть блок

# Откройте конфигурацию VM для редактирования
virsh edit название_вашей_vm
 Добавьте в секцию `<domain>` следующие строки:

xml Скопировать

Закрыть блок

<memoryBacking>

  <access mode='shared'/>
</memoryBacking>
 И добавьте файловую систему перед закрывающим тегом `</devices>`:

xml Скопировать

Закрыть блок

<filesystem type='mount' accessmode='passthrough'>
  <driver type='virtiofs'/>

  <target dir='mk-share'/>
</filesystem>

Проверка поддержки virtiofs

 Убедитесь, что ваша система поддерживает virtiofs:

bash Скопировать

Закрыть блок

# Проверьте версию QEMU (должна быть 5.0+)
qemu-system-x86_64 --version

# Проверьте, что virtiofsd доступен
which virtiofsd

В гостевой системе (Ubuntu VM)

 После успешного добавления устройства, в Ubuntu VM выполните:

bash Скопировать

Закрыть блок

# Создайте точку монтирования
sudo mkdir -p /mnt/mk-share

# Смонтируйте файловую систему
sudo mount -t virtiofs mk-share /mnt/mk-share

# Для автоматического монтирования добавьте в /etc/fstab
echo "mk-share /mnt/mk-share virtiofs defaults 0 0" | sudo tee -a /etc/fstab
 После этих изменений virtiofs должен работать корректно.

Руководство: Настройка VirtioFS с правами пользователя в CentOS/RHEL 9

Это руководство подробно описывает процесс решения проблемы монтирования общей папки **VirtioFS** на гостевой машине с ядром Linux 5.14 (стандартно для RHEL 9-based систем), когда требуется указать конкретного пользователя и группу для файлов.

1. Исходная проблема

    При попытке смонтировать общую папку `mk-share` для пользователя `bitrix` возникает ошибка:
$ sudo mount -t virtiofs -o uid=bitrix,gid=bitrix mk-share /home/bitrix/www/
mount: /home/bitrix/www: wrong fs type, bad option, bad superblock on mk-share...
    Эта ошибка указывает на то, что либо тип файловой системы указан неверно, либо ядро не понимает переданные опции (`uid`, `gid`).

2. Диагностика

Шаг 2.1: Проверка модуля ядра

    Первым делом убедились, что модуль `virtiofs` загружен в системе.
$ lsmod | grep virtiofs
virtiofs               40960  0
fuse                  212992  2 virtiofs
    Модуль на месте. Проблема не в его отсутствии.

Шаг 2.2: Анализ логов ядра

    Ключевую информацию удалось найти в системных логах ядра.
$ dmesg | tail -n 20
...
[  140.918660] virtiofs: Unknown parameter 'uid'
    **Это было главное открытие:** ядро гостевой системы прямо сообщает, что не знает параметра `uid`. Это подтвердило, что проблема не в настройках хоста, а в возможностях ядра гостя.

3. Поиск первопричины

Шаг 3.1: Проверка гипотезы

    Чтобы доказать, что сама технология VirtioFS работает, мы попробовали смонтировать папку без "неизвестных" параметров.
$ sudo mount -t virtiofs mk-share /home/bitrix/www/
    Команда выполнилась успешно. Это окончательно доказало, что проблема именно в опциях `uid` и `gid`.

Шаг 3.2: Определение версии ядра

    Проверка версии ядра объяснила, почему опции не поддерживаются.
$ uname -r
5.14.0-598.el9.x86_64
    Поддержка опций `uid` и `gid` для VirtioFS была добавлена в ядро Linux, начиная с **версии 5.16**. Наше ядро 5.14 слишком старое для этой функциональности.

4. Поиск и реализация решения

    Поскольку обновить ядро из стандартных репозиториев не удалось (`dnf update` не нашел новых версий), был выбран обходной путь с использованием утилиты **`bindfs`**.


    `bindfs` — это FUSE-утилита, которая позволяет "перемонтировать" одну директорию в другую с изменением прав доступа "на лету".

Шаг 4.1: Установка bindfs

# Устанавливаем репозиторий EPEL (если его нет)
$ sudo dnf install -y epel-release

# Устанавливаем саму утилиту
$ sudo dnf install -y bindfs

Шаг 4.2: Двухэтапное монтирование

    Идея состоит в том, чтобы сначала смонтировать VirtioFS с правами по умолчанию во временную папку, а затем использовать `bindfs` для "зеркалирования" этой папки в целевую директорию с нужными правами.
# 1. Создаем временную точку монтирования
$ sudo mkdir -p /mnt/virtiofs-share

# 2. Монтируем virtiofs в нее (без опций uid/gid)
$ sudo mount -t virtiofs mk-share /mnt/virtiofs-share

# 3. Используем bindfs для перемонтирования с нужными правами
$ sudo bindfs --force-user=bitrix --force-group=bitrix /mnt/virtiofs-share /home/bitrix/www
    На этом этапе мы столкнулись с ошибкой `fuse: mountpoint is not empty`, которая была решена очисткой целевой директории `/home/bitrix/www`.

5. Автоматизация через /etc/fstab

Чтобы монтирование работало после перезагрузки, его нужно прописать в `/etc/fstab`. Здесь мы столкнулись с последней проблемой — ошибками синтаксиса.

Проблема: Ошибки парсинга в fstab

    Первоначальные попытки добавить записи привели к ошибкам `parse error at line...`. Причина оказалась в неправильном форматировании: каждая запись в `fstab` должна быть **одной непрерывной строкой**, а не разбита на несколько.

Решение: Корректные записи для fstab

    Ниже приведен финальный, рабочий вариант для `/etc/fstab`.
#
# /etc/fstab
# ... (существующие записи) ...
#
mk-share        /mnt/virtiofs-share     virtiofs        defaults,nofail 0 0
/mnt/virtiofs-share     /home/bitrix/www        fuse.bindfs     force-user=bitrix,force-group=bitrix,nofail,_netdev    0 0
    **Ключевые моменты в этой конфигурации:**




        - **Одна строка на запись:** Все параметры для каждой точки монтирования находятся на одной строке.

        - **`nofail`:** Опция, которая не останавливает загрузку системы, если монтирование не удалось.

        - **`_netdev`:** (Для `bindfs`) Очень важная опция. Она указывает системе, что эту файловую систему нужно монтировать только после того, как будут готовы "сетевые" (в нашем случае — зависимые) ресурсы. Это гарантирует, что `/mnt/virtiofs-share` будет смонтирован *перед* тем, как `bindfs` попытается его использовать.



    После исправления `/etc/fstab` и выполнения команд `sudo systemctl daemon-reload` и `sudo mount -a`, система пришла в полностью рабочее и автоматизированное состояние.

Заключение

Проблема была успешно решена путем обхода ограничений старой версии ядра с помощью `bindfs` и корректной настройки файла `/etc/fstab` для автоматизации процесса. Теперь общая папка VirtioFS доступна в гостевой системе с правами нужного пользователя и готова к работе.