Зачем мне использовать переменные среды для настройки приложения Symfony? - PullRequest
0 голосов
/ 26 сентября 2018

Вчера я впервые выполнил развертывание на собственном сервере с Symfony 4. Читая официальную документацию о развертывании , я цитирую:

Большинство приложений Symfony считывают свою конфигурацию из переменных среды.При локальной разработке вы обычно сохраняете их в файле .env.Но на производстве вместо создания этого файла вы должны установить реальные переменные среды.

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

  • Что означает переменные среды в производстве?Почему бы просто не иметь переменные в файле, такие как Wordpress, Django и другие?
  • Почему я хотел бы иметь учетные данные базы данных моего проекта в глобальной переменной ОС ???
  • Быть глобальнымии доступно всем в ОС, если у меня будет несколько проектов с одним и тем же env var (например, APP_ENV в Symfony), изменение его значения повлияет на все мои проекты!Имеет ли это какой-то смысл?

Если бы кто-нибудь мог пролить немного света на эту тему, я был бы очень признателен.

Извините за мой английский

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Что означает переменные среды в производстве?Почему бы просто не иметь переменные в таких файлах, как Wordpress, Django и другие?

Первое, что нужно понять, это то, сколько разных сред может выполнять ваш код.Вы можете иметь производство, постановку, тестирование и локальную среду.Действительно ли имеет смысл иметь совершенно разные файлы конфигурации на каждом, которые не могут быть синхронизированы с репозиторием VCS из-за конфликтов?

У вас все еще есть файлы конфигурации в Symfony и других средах.Однако некоторые параметры зависят от среды, а другие - нет.Те, которые зависят от окружающей среды, могут быть установлены из переменных среды.Таким образом, вы можете синхронизировать свои файлы конфигурации, но при этом поддерживать специфичные для среды настройки.


Остальные проблемы могут быть объяснены тем фактом, что переменные среды не обязательно должны быть глобальными.Веб-серверы могут определять переменные среды в различных контекстах, например, используя SetEnv в конкретном виртуальном хосте, как предлагает miken32.

0 голосов
/ 27 сентября 2018

Что означает переменные среды в производстве?Почему бы просто не иметь переменные в файле, такие как Wordpress, Django и другие?

  • переменные среды - это значения, которые изменяются (и изменяются только) при перемещении приложения из одногосервер к другому

  • это значения, уникальные для этого сервера или кластера, например, имя хоста сервера или имя хоста / IP, которые он использует для подключения к базе данных

вы группируете эти значения, которые изменяются вместе, так что при развертывании в разных средах / разных группах серверов, таких как среда тестирования, промежуточная среда / производственная среда, ваше приложение автоматически настраивает

Зачем мнеНапример, есть учетные данные базы данных моего проекта в глобальной переменной ОС ???как в вашем веб-сервере или только в виртуальном блоке вашего веб-сервера

Будучи глобальными и доступными для всех в ОС, если бы у меня было несколько проектов с одним и тем же env var (например, APP_ENVв Symfony), изменение его значения затронет все мои проекты!Имеет ли это какой-то смысл?

Да, потому что обычно, если сервер помечен как «среда тестирования» или «среда UAT», все, что вы там развертываете, должно вести себя одинаково (особенно, если это рабочий сервер).).

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

0 голосов
/ 26 сентября 2018

Этот вопрос не очень подходит для SO, но вкратце: переменные среды могут быть установлены для любой среды, а не только для операционной системы.Как ваш веб-сервер, например.У меня есть следующее в /etc/httpd/conf.d/variables.conf, которое включено в некоторые виртуальные хосты в моей основной конфигурации Apache:

#Config for web apps
SetEnv DB_CONNECTION      "mysql"
SetEnv DB_HOST            "192.168.242.1"
SetEnv DB_USERNAME        "dbuser"
SetEnv DB_PASSWORD        "dbpass"
SetEnv DB_DATABASE        "dbname"

Этот файл может быть защищен с разрешениями, чтобы гарантировать, что только веб-сервер может их читать.И у меня может быть несколько файлов, если у меня несколько приложений или виртуальных хостов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...