Angular универсальное развертывание на общем сервере - PullRequest
0 голосов
/ 26 апреля 2020

Цель:

Я хочу развернуть мое приложение angular и сервер express на моем общем облачном сервере, чтобы использовать SSR вместо фактического CSR.

Обычный способ - просто запустить команду ng build --prod и скопировать / past из dist всех выходных статических файлов в виде пакета в папку public моего хост-сервера. Из-за особенностей приложения в .htacess требуется быстрая настройка, чтобы можно было обновить sh страницу, но не так сложно.

Моя структура проекта хостинга:

home
  /:clusterAliasName
    ...
    /prod
      .htacess
      /api
        .htacess
        index.php
        ...
      /www
        index.html
        favicon.ico
        ...

(Примечание: папка /api содержит часть frontapi, написанную с помощью PHP / SQL / PDO)

Таким образом, мое приложение CSR angular работает нормально.


Дело в том, что для SSR в уравнении есть понятие Универсальный веб-сервер (express server), и с этого момента я полностью потерян. На самом деле, я не понимаю, как должен работать этот прекрасный мир.

Итак, основываясь на различных руководствах, я успешно перенес свое приложение CSR Angular в приложение SSR, локально протестировав его с помощью следующего команда ng run appName:node dist/server/main.js

Нет, прежде чем развернуть его, я должен собрать приложение. Что касается предыдущего метода, я запускаю ng build --prod && ng run appName:server:production, который выводит в этом случае две папки в dist:

  1. dist/browser, включая файлы приложения статики
  2. dist/server веб-сервер express, включающий все необходимые настройки для обслуживания ресурсов c

Кроме того, у меня есть хостинг с общим сервером Cloud Web , который позволяет мне выбирать для механизм выполнения (php, узел и т. д. c ...).


Что мне теперь делать?

Я не могу логично просто скопировать / пропустить эту папку и позволить волею c случиться (чего не будет). Я имею в виду, что сервер express не должен быть точкой входа моего веб-сайта с целым числом index.html?

Как я могу запустить сервер с помощью команды узла с сервера? (когда я подключаюсь в s sh, я не могу использовать команды узла).

Как вы можете видеть, это очень размыто для меня , и любая изюминка приветствуется.

Оставайся дома, будь в безопасности.

Спасибо тебе!

1 Ответ

0 голосов
/ 27 апреля 2020

Взгляните на server.ts. Он имеет:

  • app() метод, который возвращает Express экземпляр сервера
  • run() метод - который запускает Express сервер.

Затем найдите документы для вашего хостинга с информацией о том, как он запускает сервер NodeJS. Скорее всего, ему просто нужно знать путь сценария. Ваш путь <something>/server/main.js. <something> - это путь, указанный c для вашего хостинг-провайдера.

Еще одна вещь - возможно, ваш хостинг-провайдер имеет переменную Environment с PORT. Тогда нужно знать имя этой переменной, потому что server.ts использует process.env.PORT || 4000 по умолчанию.

...