Как настроить Liferay с помощью Consul

В нашем приложении мы используем Liferay 6.2 Portal. Мы хотим обновить свойства в portal-ext.properties значениями, взятыми из Consul. Например, мы хотим установить свойство virtual.hosts.valid.hosts со значениями из Consul. Один из вариантов, которого мы хотим избежать, — это использование Consul-template и обновление файла с помощью скриптов bash.

Есть ли программный способ обновления свойств в Liferay? (от крючка, например)


person Dmitry    schedule 21.11.2016    source источник


Ответы (3)


Вы можете использовать conf.d. По сути, это функциональный менеджер конфигурации, который может получить конфигурацию из etcd или consul и записать ее в локальные файлы. Я использовал его для настройки кластера Kubernetes из экземпляров Liferay. У меня нет отдельного примера, но есть вот код (из облачной конфигурации CoseOS), который создает файлы конфигурации conf.d.

person Milen Dyankov    schedule 21.11.2016
comment
Я бы предпочел избежать каких-либо изменений в файловой системе. Если нет возможности изменить свойства Liferay программно, мы можем изменить их с помощью bash-скриптов, но этого мы хотим избежать. - person Dmitry; 21.11.2016
comment
Сделать это программно возможно, но сложно. Вам придется заменить/расширить Liferay для загрузки свойств напрямую из консула (ищите ConfigurationFactory и ConfigurationFactoryImpl) - person Milen Dyankov; 21.11.2016
comment
Вы имеете в виду, что мне нужно будет предоставить свою собственную реализацию ConfigurationFactoryImpl и заменить класс Liferay в пути к классам? - person Dmitry; 22.11.2016
comment
Также обратите внимание, что вам придется реализовать механизм уведомления для запуска перезапуска при изменении свойств. Это может показаться простым, но как только вы попробуете, вы быстро столкнетесь с некоторыми крайними случаями. То же самое относится и к сценариям оболочки, поэтому я решил использовать conf.d - person Milen Dyankov; 22.11.2016
comment
Есть несколько способов приблизиться к этому, но почти наверняка вы в конечном итоге перезапишете/замените классы. Liferay предоставляет EXT для этой цели, поэтому вам не нужно перекомпилировать весь портал из исходного кода. Тем не менее, я не пытался сделать это сам, поэтому я не даю гарантий, что это сработает. Просто основываясь на своих знаниях, я думаю, что это должно быть выполнимо, но довольно сложно. - person Milen Dyankov; 22.11.2016

Некоторые свойства могут динамически обновляться через хук. Вы можете найти их в dtd для liferay-hook.xml. просто создайте крючок и найдите URL-адрес dtd (в настоящее время я сижу на своем телефоне, у меня нет хорошего доступа к таким ресурсам, как этот URL-адрес)

person Olaf Kock    schedule 21.11.2016
comment
Спасибо, но в DTD указано, что он позволяет изменять только определенный набор свойств, а нужного мне нет в списке. Кроме того, мне нужно отправить запрос REST во внешнюю службу (из кода Java), чтобы получить желаемое значение. - person Dmitry; 21.11.2016
comment
Для всех свойств, не перечисленных в dtd, вам потребуется перезапустить сервер приложений или выполнить обновление самостоятельно. Возможно, но просто не реализовано. Я сомневаюсь, что у нединамических свойств нет API для их изменения. - person Olaf Kock; 21.11.2016
comment
У меня нет проблем с перезапуском. Я просто хочу избежать каких-либо изменений в файловой системе для настройки Liferay, поэтому мне нужен способ изменить значения некоторых свойств во время запуска Liferay. - person Dmitry; 21.11.2016
comment
Некоторые - ключевое слово здесь. Для некоторых свойств это будет легко, для некоторых — нет. Следуйте идее Милен, однако я не знаю, какую коммерческую ценность вы предполагаете, когда не записываете в файловую систему. На самом деле, я бы не беспокоился. Вы можете настроить через отдельный консул-эксклюзивный файл свойств - думаю, это намного проще, чем ваш план. - person Olaf Kock; 22.11.2016

Поскольку простого программного способа программной настройки свойств Liferay не существует, мы решили модифицировать сценарии запуска sh для чтения данных из Consul и обновить конфигурацию в нашем пользовательском файле portal-ext.properties.

person Dmitry    schedule 28.11.2016