Как развертывается Jetty в Azure App Service?
У меня есть веб-приложение Java, которое я запускаю в приложении Azure App Service. Чтобы развернуть его, я использую репозиторий Bitbucket с файлом .war внутри него. Когда я переношу новый .war файл в это репо, он должен автоматически развертываться службой. Однако чаще всего мне приходится либо перезагружать, повторно развертывать, либо даже загружать файл .war через FTP, чтобы развертывание было успешно завершено.
У меня есть один экземпляр Jetty, который находится в этой службе, поэтому мой файл .war
имеет имя ROOT.war
. AFAIK, при загрузке в службу (будь то через Bitbucket или FTP) этот .war файл должен быть распакован в тот же каталог, который равен /site/wwwroot/webapps
. В моем случае этого не происходит. Веб-приложение работает с файлом ROOT.war
, сидящим внутри /site/wwwroot/webapps
. И каждый раз в то время я получаю папку ROOT
в /site/wwwroot/webapps
, с двумя файлами по умолчанию index.jsp
и background.png
. Я не имею ни малейшего представления о том, что вызывает появление папки ROOT
с этими файлами по умолчанию. Единственный ключ, который у меня есть, это то, что это произошло пару раз после того, как я изменил переменную среды.
Также после появления папки ROOT
с пустыми файлами сервера единственный способ повторного развертывания приложения - это вручную удалить эту папку ROOT
через FTP или консоль, предоставленную на портале, и только после этого запрос повторного развертывания выполняется с моим веб-приложением.
Итак, если это недостаточно ясно, мой вопрос заключается в том, что здесь происходит? Я не могу ничего сделать из поведения, с которым я сталкиваюсь. Я чувствую, что я использую эту услугу Azure вслепую и не могу ничего исправить, когда что-то пойдет не так. Есть ли какие-либо ресурсы, которые могут объяснить, что происходит в фоновом режиме при развертывании веб-приложения?
Ответы
Ответ 1
Итак, Azure API Apps - это PAAS, а не служба IAAS. Вы можете получить доступ к платформе PaaS, перейдя в yoursite.scm.azurewebsites.net
, где вы можете просматривать файловую систему в CMD или Powershell, и вы можете видеть запущенные процессы. Это может показаться, что вы находитесь на одной виртуальной машине, но это не так. Данные, которые вы видите здесь, реплицируются в ваши экземпляры приложения API. Вы можете контролировать, сколько экземпляров вы используете, масштабируя свое приложение API.
Я часто видел вашу проблему при развертывании, затем ROOT был пустым (работая внутри, чтобы увидеть это исправление...).
Лучший метод, который работает каждый раз для меня, заключается в том, чтобы остановить ваше приложение API, вручную UNZIP ваш ROOT.war. Переместите файлы в /ROOT/, затем запустите приложение API.
Вы можете просто поместить ROOT.war и позволить системе распаковывать его, когда вы его включаете, но иногда это может привести к тому, что пустой каталог ROOT, а затем требует повторного перезапуска.
Все это заставляет меня перейти на Spring -Boot. Не требуется распаковка. Просто настройте свой web.config и отпустите файл jar.
https://docs.microsoft.com/en-us/azure/app-service-web/web-sites-java-custom-upload#springboot