Как развернуть приложение NodeJs в веб-приложении Azure - PullRequest
0 голосов
/ 18 января 2019

Мне дали задание развернуть приложение nodejs в лазурном веб-приложении, однако я не могу заставить его работать.

Я следовал инструкциям из этой ссылки , и все кажетсядовольно просто.

Единственное отличие состоит в том, что мой стартовый скрипт package.json выглядит так, как показано ниже.

"scripts": {
   "start": "node ./node_modules/@samplescope/samplefolder/sample_service.js"
  },

В примере исходного кода по ссылке инструкции он содержит файл web.config.который указывает на server.js, поэтому я изменил эту часть в расположение моего файла запуска, который "./ node_modules/@samplescope/samplefolder/sample_service.js"

из этого

    <rule name="DynamicContent">
         <match url="/*" />
         <action type="Rewrite" url="server.js"/>
    </rule>

что-то вроде этого

    <rule name="DynamicContent">
         <match url="/*" />
         <action type="Rewrite" url="./node_modules/@samplescope/samplefolder/sample_service.js"/>
    </rule>

Я также пытался удалить созданный мной web.config, потому что по этой ссылке kudu попытается сгенерировать одинпотому что вы основываетесь на свой package.json, но он все равно не работает.

Я знаю, что делаю что-то не так, может кто-то укажет мне правильное направление.

Кроме того, как это работает?npm install "вызывается в веб-приложении azure?

Да, он работает локально, когда вызывается "npm start"

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Я смог решить эту проблему и теперь смог успешно развернуть мое приложение nodejs в веб-приложении Azure.

Пара ключевых моментов, которые помогли мне решить проблему, поскольку Iam знал о развертывании kudu, поэтому я не настолько знаком с ней.

  1. Вы можете получить файлы журнала kudu через https://{site}.scm.azurewebsites.net/> Вкладка «Инструменты»> Диагностический дамп

  2. В разделе «Общий процесс» на сайте ниже вы увидите, как работает процесс куду. Эта ссылка также помогла мне понять куду. https://blog.lifeishao.com/2017/03/24/custom-nodejs-deployment-on-azure-web-app/

  3. После синхронизации приложения, очистки и копирования файлов в целевую папку, kudu попытается сгенерировать файл web.config. В нашем случае .js находится в одном из модулей частного узла, поэтому он должен быть там до того, как kudu сгенерирует web.config.

  4. Также рекомендуется создать свой собственный файл deploy.cmd, чтобы вы могли контролировать этапы развертывания. Вы также можете обратиться к этой ссылке для получения дополнительной информации. https://github.com/projectkudu/kudu/wiki/Custom-Deployment-Script#custom-deployment-script-generator

  5. Если вы развертываете приложение с частными модулями, вы можете обратиться к этой ссылке для вашего руководства. https://www.jeff.wilcox.name/2017/02/azure-private-npm/ Кроме того, явно указывайте реестр при установке npm, даже если у вас уже есть .npmrc в вашей локальной папке.

  6. И, наконец, если вы развертываете с использованием развертывания приложения-службы Azure в Azure Devops, не позволяйте ему генерировать web.config для вас, а вместо этого пусть kudu генерирует его.

0 голосов
/ 19 января 2019

«Установка npm» вызывается веб-приложением Azure, когда оно обнаруживает файл package.json в push-запросе. Устанавливает пакеты, перечисленные в «Зависимостях».

Однако, это не идеально. Один из моих проектов нуждался в SQLite, но он не был установлен. Я справился с этим, установив все пакеты локально, а затем отправив всю папку «node_modules» в Azure, используя локальный Git

Я не буду рекомендовать помещать "sample_service.js" в "node_modules", потому что эта папка создается и изменяется npm на основе зависимостей, перечисленных в "package.json". Попробуйте поместить "sample_services.js" вне, но в ту же папку, что и "node_modules".

Если «sample_services.js» является внутренним сервером Javascript, вам необходимо переименовать его в «server.js» или «app.js» из-за ограничений по именованию при развертывании. Укажите его как «главный» в вашем «package.json», чтобы Azure запускал его как эквивалент «node server.js» в Windows Powershell, чтобы запустить ваш бэкэнд, и включить следующий код в ваш «server.js»:

const port = process.env.PORT || 3000; 

Полученный файл "package.json" должен выглядеть примерно так:

{
  "name": "myProject",
  "version": "1.0.0",
  "engines": {
    "node": "8.10.0",
    "npm": "5.6.0"
  },
  "description": "Project X",
  "main": "server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node server.js"
  },
  "author": "me",
  "license": "ISC",
  "dependencies": {
    "express": "4.16.3",
    "sqlite3": "4.0.2"
  }
}

Azure автоматически выбирает, какую версию Node.js и npm использовать. Если у вас есть проблемы с совместимостью, укажите версию Node.js и npm, как я сделал

Кроме того, если вы использовали Express для маршрутизации, как я делал в предыдущем проекте, этот код в "server.js" запускается для загрузки страницы HTML загрузки по умолчанию:

app.get('/', function(req,res){
    console.log('default html loading');
    res.render('./public/index.html');
});

Опять же, из-за тех же ограничений именования, я назвал свою основную страницу HTML как index.html

Если вы хотите попробовать полный пример или сравнить код, я нашел это руководство полезным: https://www.codeproject.com/Articles/1133660/Deploy-Node-js-in-Microsoft-Azure

Ура!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...