Вчера я впервые выполнил развертывание на собственном сервере с Symfony 4. Читая официальная документация о развертывание, я цитирую:
Most Symfony applications read their configuration from environment variables. While developing locally, you'll usually store these in a .env file. But on production, instead of creating this file, you should set real environment variables.
Теперь, когда я прочитал на нескольких сайтах, что это правильный способ работы в продакшене, у меня есть несколько сомнений по этому поводу:
APP_ENV в Symfony), изменение его значения повлияло бы на все мои проекты! Есть ли в этом смысл?Если бы кто-нибудь мог пролить свет на эту тему, я был бы очень признателен.
Извините за мой английский
Конечно! Спасибо!
Также можно разместить файл .env в производственной системе. Убедитесь, что в окружении нет APP_ENV и т. д., И он будет выбран как локально. Просто никогда не помещайте этот файл в GIT.






Этот вопрос не очень подходит для 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"
Этот файл можно защитить с помощью разрешений, чтобы гарантировать, что только сам веб-сервер может их прочитать. И у меня может быть несколько файлов, если у меня несколько приложений или виртуальных хостов.
What is the meaning of environment variables in production? Why not just have the variables in a file like Wordpress, Django, and others?
Первое, что нужно понять, это сколько разных сред может запускать ваш код. У вас могут быть производственные, промежуточные, тестовые и локальные среды. Действительно ли имеет смысл иметь совершенно разные файлы конфигурации для каждого, которые не могут быть синхронизированы с вашим репозиторием VCS из-за конфликтов?
У вас все еще есть файлы конфигурации в Symfony и других фреймворках. Однако некоторые настройки зависят от среды, а другие - нет. Те, которые зависят от среды, могут быть установлены из переменных среды. Таким образом, вы можете синхронизировать файлы конфигурации, но при этом сохранять настройки, специфичные для среды.
Остальные ваши опасения можно объяснить тем фактом, что переменные среды не обязательно должны быть глобальными. Веб-серверы могут определять переменные среды в различных контекстах, например, используя SetEnv на определенном виртуальном хосте, как предлагает miken32.
What is the meaning of environment variables in production? Why not just have the variables in a file like Wordpress, Django, and others?
переменные среды - это значения, которые изменяются (и изменяются только) при перемещении приложения с одного сервера на другой.
это значения, уникальные для этого сервера или этого кластера, например, имя хоста сервера или имя хоста / IP-адрес, который он использует для подключения к базе данных.
вы группируете эти значения, которые меняются вместе, чтобы при развертывании в разных средах / разных группах серверов, таких как среда тестирования, промежуточная среда / производственная среда, ваше приложение автоматически настраивается
Why would I like have the credentials of my project's database in a global OS variable???
как уже было сказано, есть и другие способы установить его. как на вашем веб-сервере или только в виртуальном блоке вашего веб-сервера
Being globals and accessible by all in the OS, if I would have more than one project with the same env var (for instance, APP_ENV in Symfony), changing its value would affect all my projects! Does It make any sense?
Да, потому что обычно, если сервер помечен как «среда тестирования» или «среда UAT», все, что вы там развертываете, должно вести себя одинаково (особенно, если это производственный сервер).
Просто организация развертываний и подобных серверов значительно упрощает управление по сравнению со смешанными целями для каждого сервера.
Несколько хороших ответов ниже. Это может быть неочевидно, но использование переменных env позволит изменять переменные без перестройки кеша Symfony. Полезная возможность в некоторых случаях. Вы всегда можете пойти по старой школе и просто использовать файл parameters.yaml и перестроить кеш, если что-то изменится.