У меня есть Docker-контейнер, на котором запущены nginx и php-fpm с использованием supervisord.
Я пытаюсь использовать .ebextensions / *. Config для настройки переменных среды.
Хотя переменные установлены в контейнере (например, # echo $VAR
печатает ожидаемое значение), я не могу найти простой способ сделать их доступными для PHP. ИМХО, я мог только написать скрипт bash, чтобы читать и копировать переменные в www.conf
или для конфигурации хоста nginx как fcgi_param. Но тогда этот скрипт должен знать, какие переменные копировать ….
Мне интересно, если кто-нибудь нашел более простой способ сделать это.
Есть два способа сделать это с любой надежностью. Для всего веб-содержимого установите переменные среды в файле .htaccess. Вы можете сделать это для вашей информации о соединении с базой данных, например:
# environment variables
SetEnv DBL "mysql:dbname=mydatabase;host=localhost;port=3306"SetEnv DB_USER "root"SetEnv DB_PASS "fruitygoodness"
Поместите файл .htaccess в корневой каталог вашего контейнера. Когда вам нужны переменные среды, вы можете получить их с помощью PHP getenv()
.
define('DBL', getenv('DBL'));
define('USER', getenv('DB_USER'));
define('PASS', getenv('DB_PASS'));
Для PHP-CLI внутри контейнера вы должны указать переменные среды в Docker run
команда, указав опцию -e
до каждой переменной. Вот пример:
sudo docker run --name mysite -e "DBL=mysql:dbname=mydatabase;host=localhost;port=3306" -e "DB_USER=root" -e "DB_PASS=fruitgoodness" -p 80:80 -p 443:443 -P -d repo/mysite
Это делает переменные среды доступными для контейнера. но не на веб-сервер, работающий в контейнере.
Я написал скрипт bash, который будет копировать переменные env, начиная со списка префиксов, в файл fcon’s www.conf и запекать его в скрипт start.sh моего изображения.
Это по-прежнему не помещает переменные в $ _ENV :(, но добавляет их в $ _SERVER и доступно через getenv()
,
Сценарий здесь: adrian7 / php-transfer-vars.sh