Я не могу поверить, что я единственный, кто сталкивался с этой проблемой, но я нигде не могу найти об этом ничего.
В настоящее время у нас есть несколько веб-ролей Azure, на которых работает наше приложение, и в целях безопасности я решил добавить учетные данные, такие как имена пользователей, пароли и ключи API, в переменные системной среды и получить их в своих сценариях PHP с помощью getenv()
,
Мы запускаем веб-роли Windows Server с установленными IIS и PHP. Я использую задачу запуска в моем ServiceDefinition.csdef
вот так:
<Startup>
<Task commandLine="setEnvironmentVariables.cmd" executionContext="elevated" />
</Startup>
Содержание cmd
file просто устанавливает переменные окружения, когда веб-роль вращается.
Все идет нормально. Однако я знаю по опыту на нашем сервере windows dev, что для того, чтобы PHP-скрипты могли видеть только что добавленные переменные окружения, вы должны запустить IISReset
, вы можете увидеть их с помощью getenv()
,
Однако вы не можете бежать IISReset
на веб-ролях Azure, в соответствии с этим документом здесь https://azure.microsoft.com/en-us/blog/iis-reset-on-windows-azure-web-role/
Так что мои скрипты не могут видеть переменные !! Я что-то упустил или есть более простой способ установить системные переменные среды при запуске веб-роли, чтобы PHP мог их видеть?
ConfigurationSettings Элемент в вашей облачной конфигурации для WebRole позволит вам определить настройки. И, кстати, измените эти настройки без перекомпиляции и повторного развертывания вашей роли.
Вторым наиболее важным элементом для вашего случая является Среда, который позволяет вам определять переменные окружения.
И вы можете инициализировать переменную среды со значением параметра конфигурации, используя RoleInstanceValue элемент, который должен быть дочерним по значению.
О том, как создать XPATH для RoleInstanceValue, вы можете обратиться к Шпаргалка XPath.
Но в конце я спрошу вас, почему вы все еще разрабатываете WebRole вместо использования веб-приложений и планов обслуживания приложений, где вы можете управлять AppSettings и ConnectionStrings непосредственно в WebApp в Azure и полностью удалять их из web.config? Единственная очевидная причина для меня — использование сторонних API / Компонентов, которые не совместимы с веб-приложениями (например, требования к запуску установщика или использование COM-компонентов).
Других решений пока нет …