В чем отличие настроек приложения от настроек окружения на примере Laravel

При разработке веб-приложения рано или поздно встает вопрос деплоя и поддержки. О том, как нам в этом помогут настройки приложения и окружения, поговорим на примере популярного php-фреймворка Laravel. Даже если вы ни разу им не пользовались, суть вы должны уловить.

}

Автор материала

. Веб-разработчик, создатель проекта Лектория, эксперт MODX Revolution, директор веб-студии OpenColour. Youtube-канал OpenModx.

4 минуты на прочтение
Теги по теме:

Когда вы создаете новое приложение (даже если это обычный веб-сайт), рано или поздно встает вопрос деплоя, или простым языком переноса на боевой сервер, на котором, скорее всего отличается некоторый набор параметров. Например:

  • Настройки подключения к базе данных
  • Доменное имя

Очевидно, что в программном коде ваших подмодулей и составляющих, где вы обращаетесь к этим значениям, удобно использоваеть некоторую переменную, вместо того, чтобы явно указывать значение. То есть, вместо:

$connection = new DbConnection('vasya', 'superStrongPassword');

Написать что-то вроде такого:

$connection = new DbConnection($config->user, $config->password);

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

А сама переменная $config где-то в момент запуска приложения будет наполняться значениями, которые хранятся в конфигурационном файле.

Как хранить настройки приложения

Любой уважающий себя разработчик, хранит код в git-репозитории, в том числе и файл(-ы) конфигурации. Но хранит не совсем ту конфигурацию, которая используются на локальном или боевом сервере, а всего лишь пример конфигурации (так называемую sample-конфигурацию), наполненной либо значениям по-умолчанию, либо какими-то тестовыми значениями, которые необходимо заменить на свои.

Выглядеть этот файл конфигурации может так:

<?php

return [
	'domain' => 'example.com',
	'username' => 'example',
	'password' => 'pleaseСhangeMe',
	'dbtype' => 'mysql',
	'dbserver' => 'localhost',
	//... и так далее
];

Хранится такой файл наряду с другими конфигурационными файлами различных подмодулей в каталоге config (так, например, устроено в Laravel и некоторых других фреймворках).

Суммарное количество настроек во всех файлах конфигурации может достигать несколько сотен. Деплой такого проекта может значительно затянуться из-за просмотра большого числа настроек и их редактирования.

Чаще всего при деплое нужно поменять не все настройки, а только лишь некоторый ограниченный набор. Для этого на помощь приходят файлы окружения.

Файлы окружения — это такие же файлы настроек, но с некоторыми особенностями

Настройки окружения (.env)

По сути, файлы настроек окружения — это такие же файлы настроек, но:

  1. во-первых, файл окружения, как правило не хранят в git-репозитории (а хранят как пример example-файл)
  2. во-вторых, в этот файл выносят ограниченный набор настроек, с которыми вы чаще всего будете работать
  3. в-третьих, в этом файле чаще всего содержатся именно те настройки, которые нужно поменять при переносе на другой сервер — это могут быть флаги отключения отладочного режима, ключи доступа к API, настройки почты и так далее — все то, что на локальном сервере имеет другие значения

При этом в самом файле конфигурации (не окружения) мы можем обратиться к настройке окружения и задать при этом значение по-умолчанию на тот случай, если запрашиваемой настройки нет в файле окружения:

<?php

return [
	'domain' => env('APP_DOMAIN', 'example.com'),
	'username' => env('DB_USERNAME'),
	'password' => env('DB_PASSWORD'),
	'dbtype' => env('DB_TYPE', 'mysql'),
	'dbserver' => env('DB_SERVER', 'localhost'),
];

При этом файл настроек окружения (в Laravel) лежит в корневом каталоге проекта, называется .env и выглядит примерно так:

APP_DOMAIN=mywebsite.com
DB_USERNAME=vasya
DB_PASSWORD=myStrongPassword
DB_SERVER=localhost

Резюме

Файлы настроек окружения содержат относительно узкий набор часто меняемых настроек и настроек, которые зависят от рабочей станции (или, если правильнее — от окружения), а файлы настроек содержат весь набор варьируемых параметров, от которых зависит работа приложения или его подмодулей, среди которых есть те параметры:

  • которые чаще всего работают "из коробки"
  • которые нужно изменить всего один раз и они будут иметь одинаковые значения вне зависимости от окружения (сервера)
  • которые транслируются из настроек окружения.

Удачи в веб-разработке. Задавай вопросы в комментариях, подписывайся на Youtube-канал Lectoria и обязательно подписывайся на наши соцсети: InstagramVKFacebook.

Комментарии

    Вы должны авторизоваться, чтобы оставлять комментарии.

    Мы используем куки на нашем сайте. Продолжая просмотр, вы соглашаетесь с условиями пользовательского соглашения
    Пожалуйста, подождите. Процесс оформления заказа может занимать до 30 секунд.