Не думаю, что вам следует обслуживать приложение Ember от Tomcat. По крайней мере, в прошлом, когда я оценивал, Tomcat намного медленнее в SSL, чем Apache / Nginx, не так быстро со статическим содержимым, требует повторного развертывания файла WAR, если вы меняете статическое содержимое, и не имеет параметров конфигурации более распространенного используемые HTTP-серверы.
Лучший подход - обратный прокси-сервер к вашему серверу приложений (я предполагаю, что вы используете приложение Java, так как вы используете Tomcat). Подайте приложение Ember с обратного прокси. Если вы используете SSL, вы бы справились со всем с обратного прокси, а не с tomcat. Вот так я обслуживаю свое приложение Ember и приложение Spring Boot (API, который запускает мое приложение ember) из одного и того же экземпляра EC2.
Я покажу вам, как я это делаю на Redhat, но вам придется переводить для Ubuntu (как у вас есть apt-get, где я использую yum и т. Д.).
Установите apache на свою виртуальную машину
yum install httpd -y
Настройка Apache в качестве обратного прокси в /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
ProxyRequests Off
ProxyPass /api http://localhost:8080/api
ProxyPassReverse /api http://localhost:8080/api
</VirtualHost>
FallbackResource /index.html
Это имеет две очень важные части. Во-первых, вы запускаете свою подачу кота на http://localhost:8080/
(не на 80!) И имеете сервлет под api
или какой-то другой подпуть. Вам нужно такое различие, чтобы ваши угольные URL не конфликтовали с вашими api. Например, если вы хотите, чтобы ваше приложение Ember работало под /
, а у вас конечная точка API под /users
и маршрут Ember /users
, как вы можете определить, какие из них следует обслуживать? Я утверждаю, что ваш API должен работать под /api/users
, чтобы избежать столкновений.
Во-вторых, FallbackResource /index.html
позволяет непревзойденным каталогам возвращать ваш index.html
файл. Смотрите, когда ваш браузер отправляет запрос: yourapp.com/someRoute
на ваш сервер, вам нужен ваш http-сервер, чтобы просто вернуть файл index.html
. Затем Ember позаботится о маршрутизации на стороне клиента. Это означает, что независимо от того, по какому маршруту вы находитесь в Ember, когда браузер запрашивает этот URL, вы всегда должны возвращать index.html
. Я даже не знаю, как бы вы настроили такое правило в tomcat (вам придется исследовать правила / директивы перезаписи, если вы не хотите использовать обратный прокси-сервер).
- Наконец, в пределах
http.conf
найдите корень документа: например. DocumentRoot "/var/www/html"
. Это путь к вашему серверу EC2, откуда поступают ваши статические файлы. Здесь находится содержимое вашей папки dist
. Для меня типичное развертывание означает ember build
, scp на сервер, sudo rm -rf /var/www/html/
и sudo cp -r dist/. /var/www/html
, чтобы заменить старое приложение ember новым. Это работает для меня, потому что содержимое моего приложения ember - единственные статические файлы, которые мне нужны для обслуживания. Если у вас есть другие потребности, вы не можете просто удалить и заменить старый корень документа, как я.
Убедитесь, что httpd / apache запущен! service httpd start
на редхате. Вам не нужно перезагружать сервер при замене файлов.