Развернуть полнофункциональное приложение Yeoman с обратным прокси-сервером Apache2?

У меня есть полнофункциональное приложение Yeoman @2.0.13 с точно такой же структурой каталогов, как и в это руководство.

Все работает нормально - grunt serve:dist и т.д. работает без ошибок. Теперь я хочу начать работу и развернуть приложение на сервере Apache как example.com/xxx, используя mod_proxy. Я копирую сгенерированный grunt build каталог /dist в домашний каталог и запускаю серверное приложение:

NODE_ENV=production node server/app.js

Приложение запускается, заполняет пользователей и так далее. Все работает хорошо. Теперь я настраиваю параметры виртуального хоста для приложения узла:

<Location /html/xxx/>
  ProxyPass http://127.0.0.1:9000/
  ProxyPassReverse http://127.0.0.1:9000/
</Location>

Это работает. Странно то, что index.html из каталога dist загружается правильно

  dist
    ├── public
    │   ├── app                 
    │   ├── assets              
    │   ├── bower_components          
    │   └─ index.html <---
    |
    └── server
        ├── api                 
        ├── auth                
        ├── components          
        ├── config              
        ├── views              
        ├─ app.js              
        └─ router.js

proxyPass работает, index.html загружается, но файлы, на которые ссылается index.html (4 собранных файла public/app/ vendor.js, app.js и т.д.), нет. Я получаю 404 независимо от того, что я пробовал, независимо от того, какие настройки из любого руководства я тестировал.

введите здесь описание изображения

Действительно потратил много часов на это. Мне кажется, что обратный прокси как-то изменяет внутренние URL-адреса? Настройка работает, если я заменю dist/ скриптом узла, который просто прослушивает порт 9000 и возвращает привет, мир.

Что мне не хватает? Есть ли другой способ сделать это?


person davidkonrad    schedule 09.03.2016    source источник


Ответы (2)


Поэтому я довольно долго искал повсюду, но наконец нашел эту ссылку:
Apache и Yeoman создали приложение NodeJS на том же сервере... Виртуальные хосты?
Что привело меня на правильный путь, так что я думаю, что следует исправить это, изменив базовый тег в разделе заголовка файла index.hml на:

    <base href="/xxx/">

И они должны быть доступны, по крайней мере для меня.
Мои настройки виртуального хоста выглядят так:

    <Proxy /xxx/*>
            Order deny,allow
            Allow from all
    </Proxy>

    ProxyPass /xxx http://127.0.0.1:6969/
    ProxyPassReverse /xxx http://127.0.0.1:6969/
person Brueni92    schedule 02.04.2016
comment
+1 за идею; хотя уже играл с этим. Как заключает OP в вопросе, на который вы ссылаетесь, вместо этого он получает сломанные сценарии сервера, а также мой опыт, я считаю, что ответ заключается в редактировании Gruntfile.js, поэтому сам grunt делает пути правильными на этапе сборки, но не имеет время еще экспериментировать с этим. Если найду решение, то выложу. - person davidkonrad; 03.04.2016
comment
хорошо, я заставил его работать сейчас, используя настройки в отредактированном ответе для меня, так что произойдет, если вы установите pm2 локально и запустите свое приложение только на локальном хосте / 9000 на своем компьютере локально, если оно все еще не работает, вы можете устранить настройки прокси-сервера apache. Если это действительно работает, то я не думаю, что ворчание испорчено ... - person Brueni92; 03.04.2016

Для всех, у кого возникла эта проблема, я использовал порт 80. Это работает. В среде узла вам все равно не нужны или не используются /www или apache/nginx. Так что избавьтесь от этого и используйте

 // Server port
 port:     process.env.OPENSHIFT_NODEJS_PORT ||
           process.env.PORT ||
           80,

в файле йомена production.js. Вот и все. Все приложение может обслуживаться из каталога пользователя home/ без установки какого-либо серверного http-программного обеспечения. Просто загрузите dist в любое место на вашем сервере и используйте forever для запуска:

sudo NODE_ENV=production forever start server/app.js
person davidkonrad    schedule 20.12.2016