Ответ 1
В компании, в которой я работаю, мы выбрали другой маршрут.
Вместо того, чтобы бороться с Symfony, чтобы принять конфигурацию во время выполнения (что-то, что должно быть, например, Spring Data Consul, например), мы решили сделать конфигурацию Symphony от Consul по аналогии по-разному в реализации, чем Фрэнк.
Мы установили шаблон Consul и Consul. Мы создаем входную пару K/V, содержащую весь файл parameters.yml. Пример:
Ключ: eblock/config/parameters.yml
parameters:
router.request_context.host: dev.eblock.ca
router.request_context.scheme: http
router.request_context.base_url: /
Затем в месте /opt/consul-template/config/eblock.cfg
был добавлен файл конфигурации шаблона консула:
template {
source = "/opt/consul-template/templates/eblock-parameters.yml.ctmpl"
destination = "/var/www/eblock/app/config/parameters.yml"
command = "/opt/eblock/scripts/parameters_updated.sh"
}
Содержимое файла ctmpl:
{{key "eblock/config/parameters.yml"}}
Наконец, наш parameters_updated.sh
script делает:
#!/bin/bash
readonly PROGNAME=$(basename "$0")
readonly LOCKFILE_DIR=/tmp
readonly LOCK_FD=201
lock() {
local prefix=$1
local fd=${2:-$LOCK_FD}
local lock_file=$LOCKFILE_DIR/$prefix.lock
# create lock file
eval "exec $fd>$lock_file"
# acquire the lock
flock -n $fd \
&& return 0 \
|| return 1
}
lock $PROGNAME || exit 0
export HOME=/root
logger "Starting composer install" && \
/usr/local/bin/composer install -d=/var/www/eblock/ --no-interaction && \
logger "Running composer dump-autoload" && \
/usr/local/bin/composer dump-autoload -d=/var/www/eblock/--optimize && \
logger "Running app/console c:c/c:w" && \
/usr/bin/php /var/www/eblock/app/console c:c -e=prod --no-warmup && \
/usr/bin/php /var/www/eblock/app/console c:w -e=prod && \
logger "Running doctrine commands" && \
/usr/bin/php /var/www/eblock/app/console doctrine:database:create --env=prod --if-not-exists && \
/usr/bin/php /var/www/eblock/app/console doctrine:migrations:migrate -n --env=prod && \
logger "Restarting php-fpm" && \
/bin/systemctl restart php-fpm &
Зная, что как службы consul, так и consul-template будут готовы, как только ваше значение изменится в указанном ключе для шаблона consul, он выгрузит файл в сконфигурированный пункт назначения и запустит команду для обновленных параметров.
Это работает как шарм. =)