Я не самый крутой разраб битрикса, поэтому те сложности, с которыми я столкнулся, отняли у меня почти целый день на "танцы с бубном". Пишу эту статью для таких же, как и я. Всё, что тут перечислено, можно найти в интернете. Но удобно, когда все в одном месте. Это та статья, которую я хотел бы прочитать перед началом работы. :)
Ок, скачал последнюю сборку VM битрикса, версия видна на картинке. Все, вроде, норм.
Очень удобно сразу "прибить" к ней фиксированный IP. Это делается просто: залогинился в консоли, и они тебе сразу предлагают: 2. Configure localhost settings Нажимаем 2 и видим 3. Configure network interface manually Дальше все понятно.
---
Начал разворачивать бэкап сайта. Бац! Первый сюрприз. Бэкап еще не развернулся, а я уже читаю сообщение:
Сайт работал в кодировке UTF-8. Конфигурация сервера не соответствует требованиям, установите mbstring.func_overload=2 и mbstring.internal_encoding=UTF-8.
И кнопочка "попробовать снова". Понятно, что если я сейчас браузер закрою, то можно заново машину конфигурить. Не, гурам не надо, они в консоли кнопками наклацают и все будет пучком. А я так не умею. Мне окошки с кнопочками подавай.
Ок, лезу в интернет и быстро нахожу временное решение: надо добраться до файла
/home/bitrix/www/bitrix/php_interface/dbconn.php
и закомментить строчку
//define("BX_UTF", true);
Это виртуальная машина, к ней можно достучаться по SFTP. Качаем бесплатный WinSCP, заходим, комментим, нажимаем кнопочку "попробовать снова" и о, чудо!, бэкап развернулся. Но радоваться рано, ошибка осталась.
Во-первых: ошибка "Не далось обнаружить код вызова компонента"
Во-вторых:
то прочитаем вот такое радостное известие.
Ошибка! Сайт работает в UTF кодировке, настройки mbstring: mbstring.func_overload=0 mbstring.internal_encoding= требуется: mbstring.func_overload=2 mbstring.internal_encoding=utf-8
Роемся в интернете, и на разных форумах узнаём, что на версиях PHP до 7 можно было переопределить кодировку в файле
/home/bitrix/www/.htaccess
добавив туда такие строчки:
<IfModule mod_php5.c>
php_flag allow_call_time_pass_reference 1
php_flag session.use_trans_sid off
php_value display_errors off
php_value mbstring.func_overload 2
php_value mbstring.internal_encoding utf-8
</IfModule>
Но в последних версиях это не работает. Смотрим версию нашего PHP, открываем браузером страницу:
http://10.0.0.3/bitrix/admin/phpinfo.php
и видим, что у нас версия 7+. Ок, роем интернет и находим советы, что можно изменить кодировку в настройках PHP радикально, т.е. это будет влиять на все сайты, запущенные на этой ВМ. Но я не буду кучу сайтов на этой машине пилить, если надо будет еще один сайт, я для него отдельную ВМ могу сделать, не утянет, места на харде много.
Ок, начинаю искать php.ini и обнаруживаю, что WinSCP не показывает скрытые файлы. Это исправляется тут
Ок, файлы видно, идем сюда /etc/php.ini
WinSCP умеет редактировать, открываем и ищем секцию [mbstring] ближе к концу. Находим там закоментированные строчки ;mbstring.internal_encoding = и ;mbstring.func_overload = 0
и красиво под ними дописываем то, что нам надо:
mbstring.internal_encoding = utf-8 и mbstring.func_overload = 2
Перезагружаем ВМ и проверяем:
ошибка пропала.
Если знаете более простой способ - напишите, плиз, в комментариях.
-----------
И тут выясняется, что к базе mysql доступ снаружи закрыт. Ну, т.е., ВМ позиционируется как среда для разработки, но на всякий случай всё там закрыто, чтобы неопытный разраб не добрался.
Нужно будет набрать в консоли следующие команды:
mysql - запустить mysql консоль
use mysql - выбрать базу
select user, host from user; - получаем список пользователей. Если у пользователя в поле host стоит %, то ему можно подключаться удаленно.
update user set host='%' where user = 'bitrix0'; - разрешаем ему
flush privileges; - применяем настройки
ура, к базе подключились, но выясняется, что не видна моя база sitemanager. Набираем
select user, host, db from mysql.db; и видим строчку
bitrix0 | localhost | sitemanager
update mysql.db set host='%' where user='bitrix0'; - тоже разрешаем
flush privileges; - применяем настройки
quit - выходим из консоли mysql
Всё. Откладываем бубен в сторону и завтра обязательно начнем работать над проектом. А сегодня - срочно пить чай.
---------
Кстати, пока были в консоли, если в файле Файлы и папки - bitrix - php_interface - dbconn.php пароль примерно такой
$DBPassword = "gth$6&J&J45y_h5tg_t7u8m%4_%T^$%b";
а вы хотите более человеческий, то можно было набрать строчку
update user set password=PASSWORD('123456') where user='bitrix0';
и в файлике dbconn.php тоже его прописать. А еще этот же пароль записан в файле Файлы и папки - bitrix - .settings.php Не забываем про него тоже.