Сделал, как описано в , по фен-шую, вынеся композер за пределы DOCUMENT_ROOT. В этом случае для подключения битриксового bitrix/composer-bx.json используется который работает только с Composer 1.x. Еще, как оказалось, композеру нужен unzip которого по умолчанию на BitrixVM нет. Итак, памятка по установке композера на BitrixVM
yum install unzip cd /tmp wget https://getcomposer.org/download/1.10.13/composer.phar chmod +x composer.phar mv composer.phar /usr/local/bin/composer |
Первым делом поставил
composer require symfony/dotenv |
который позволяет использовать для хранения настроек .env файлы. Как написано в документации - компонент Dotenv анализирует файлы .env, чтобы сделать переменные окружения, хранящиеся в них, доступными через getenv(), $_ENV или $_SERVER. Такой способ, на мой взгляд, гораздо удобнее привычных .settings.php и dbconn.php, позволяет хранить все пароли и настройки в одном месте. За счет этого битриксовые файлы настроек можно будет добавить в систему контроля версий как на продакшене так и на всех дев-серверах.
Далее возник вопрос подключения автозагрузки и Dotenv для использования их в конфигурации 1С-Битрикс. На большинстве страниц первым подключается файл dbconn.php а затем .settings.php. Но в обработчике bitrix/urlrewrite.php почему то обратный порядок подключения конфигов. Поэтому код подключения добавил в оба файла настроек. Теперь dbconn.php начинается так
<?if(!is_array($_ENV) || !count($_ENV)) {
require_once __DIR__ . '/. ./. ./. ./vendor/autoload.php';
$env = new \Symfony\Component\Dotenv\Dotenv();
$env->load(__DIR__ . '/. ./. ./. ./.env');
}
define("BX_USE_MYSQLI", true);
define("DBPersistent", false);
$DBType = "mysql";
$DBHost = $_ENV['APP_DB_HOST'];
$DBLogin = $_ENV['APP_DB_LOGIN'];
$DBPassword = $_ENV['APP_DB_PASS'];
$DBName = $_ENV['APP_DB_NAME'];
$DBDebug = (bool) $_ENV['APP_DEBUG'];
$DBDebugToFile = false;
define("MYSQL_TABLE_TYPE", "INNODB"); |
Файл .settings.php
<?php
if(!is_array($_ENV) || !count($_ENV)) {
require_once __DIR__ . '/. ./. ./vendor/autoload.php';
$env = new \Symfony\Component\Dotenv\Dotenv();
$env->load(__DIR__ . '/. ./. ./.env');
}
return array (
--------------------------------------------------------------------------------
'exception_handling' =>
array (
'value' =>
array (
'debug' => ((bool) $_ENV['APP_DEBUG']),
--------------------------------------------------------------------------------
'connections' =>
array (
'value' =>
array (
'default' =>
array (
'className' => '\\Bitrix\\Main\\DB\\MysqliConnection',
'host' => $_ENV['APP_DB_HOST'],
'database' => $_ENV['APP_DB_NAME'],
'login' => $_ENV['APP_DB_LOGIN'],
'password' => $_ENV['APP_DB_PASS'],
'options' => 2,
),
),
'readonly' => true,
),
--------------------------------------------------------------------------------
'composer' =>
array (
'value' =>
array (
'config_path' => $_ENV['APP_COMPOSER'],
),
), |
И пример файла настроек .env
APP_ENV="dev" APP_DEBUG=1 APP_DEBUG_LEVEL=DEBUG APP_LOG_FOLDER="/log/" APP_COMPOSER="/home/bitrix/composer.json" APP_URL="http://dev.mydomain.com" APP_PRODUCTION_URL="https://mydomain.com" APP_DB_HOST=localhost APP_DB_PORT=3306APP_DB_NAME=bitrix APP_DB_LOGIN=bitrix APP_DB_PASS=********* |