Служба приложений Azure для Linux со стеком .Net Core. Невозможно использовать NodeJS

Я размещаю приложение .NET Core в MS Azure (в плане обслуживания Linux) и хочу запустить некоторый код NodeJS в приложении .NET Core. Я сделал это некоторое время назад в плане обслуживания Windows, там это работало. Теперь я пытаюсь использовать план Linux, и он не работает.

Сначала я пытался использовать «Jering.Javascript.NodeJS», а затем также «INodeServices» от Microsoft (который устарел). Но «узел» не был найден. Я также пытался запустить непосредственно процесс (код ниже), но тоже не работал. "узел" не найден.

            var proc = new System.Diagnostics.Process
            {
                StartInfo = new System.Diagnostics.ProcessStartInfo
                {
                    FileName = "node",
                    Arguments = " -v",
                    RedirectStandardOutput = true
                }
            };
            result += "RUN: " + proc.StartInfo.FileName;
            proc.Start();
            var reader = proc.StandardOutput;

NodeJS установлен на сервере, а также команда там работает, но кажется, что приложение .NET Core размещено как докер и не имеет доступа извне для запуска NodeJS. Изображение

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
457
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Нашла полезную информацию здесь.

Проблема в том, что Node отсутствует в контейнере, поэтому он необходимо иметь скрипт для установки и запускать его перед запуском само приложение.

Воспроизвести:

Вот мой сценарий:

//using System.Diagnostics;
ProcessStartInfo startinfo = new ProcessStartInfo();
startinfo.FileName = "bash";
//startinfo.FileName = "/etc/opt/nodejs/14.15.0/bin/node"; //it's no use even node package located here.
Process process = new Process();
process.StartInfo = startinfo;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
//install and start nodejs
process.StandardInput.WriteLine("apt-get install curl");
process.StandardInput.WriteLine("curl -sL https://deb.nodesource.com/setup_12.x | bash");
process.StandardInput.WriteLine("apt-get install -y nodejs");
//Run "node -v"
process.StandardInput.WriteLine("node -v");
string line = string.Empty;
        
while (!process.StandardOutput.EndOfStream)
{
     line = process.StandardOutput.ReadLine();
     _logger.LogInformation(line);
}
process.WaitForExit();
return string.Empty;

Он работает в моем приложении .net Core на базе Linux.

Вы запускаете этот скрипт прямо в приложении? Чтобы при каждом запуске скрипт выполнялся, или в лазурном портале есть настройка?

Michael Eckhart-Wöllkart 13.01.2021 08:49

Никаких дополнительных настроек на портале, я просто запускаю скрипт прямо в своем приложении. @Майкл Экхарт-Вёллькарт

Doris Lv 13.01.2021 08:51

Спасибо за быстрый ответ. Но это означает, что время запуска приложения сильно увеличивается, верно?

Michael Eckhart-Wöllkart 13.01.2021 08:58

Да, это приведет к увеличению времени запуска... Но ненамного. @MichaelEckhart-Wöllkart

Doris Lv 13.01.2021 09:31

Спасибо, может быть, я нашел лучшее решение, если хотите, вы можете взглянуть на мой ответ.

Michael Eckhart-Wöllkart 13.01.2021 14:50
Ответ принят как подходящий

Я думаю, что нашел лучшее решение;) В службе приложений вы можете подключить хранилище. В моем случае я смонтировал хранилище, содержащее библиотеку nodeJS. Скриншот портала Azure

Теперь я могу выполнить следующий код:

string result = "";
var proc = new System.Diagnostics.Process
{
    StartInfo = new System.Diagnostics.ProcessStartInfo
    {
        FileName = "/externallibs/node/bin/node",
        Arguments = " -v",
        RedirectStandardOutput = true
    }
};
result += "RUN: " + proc.StartInfo.FileName;
proc.Start();
var reader = proc.StandardOutput;
return result +  reader.ReadToEnd();

Это прекрасно! Спасибо, что поделились, Майкл.

Doris Lv 14.01.2021 02:33

Добро пожаловать ;) Если вы добавите еще что-то подобное, вы также можете использовать только «узел» и не обязательно использовать весь путь. "Environment.SetEnvironmentVariable("PATH", Environment.GetEnvironmentVariable("PATH") + @":/externallibs/node/bin");"

Michael Eckhart-Wöllkart 14.01.2021 06:32

Вы можете создать на портале Azure переменную среды с именем POST_BUILD_COMMAND с командой, чтобы исправить путь к среде.

Планы обслуживания Linux работают на Oryx, что задокументировано здесь

POST_BUILD_COMMAND=PATH=/usr/bin/node:$PATH

Проблема была не в отсутствующей переменной окружения. Весь узел js недоступен в службах приложений Linux. Но это можно исправить с помощью моего вопроса ниже или с помощью докера и установки nodejs прямо в образе.

Michael Eckhart-Wöllkart 11.05.2022 08:58

Взгляните на документы AppService . Вы можете использовать клиент Azure в службе приложений для получения списка всех доступных сред выполнения с помощью команды «az webapp list-runtimes --linux» или az webapp list-runtimes --os windows

Jone Polvora 20.05.2022 00:53

в службе приложений Linux доступны десятки сред выполнения, включая node. Взгляните на следующий список: «DOTNETCORE», «NODE», «PYTHON», «PHP», «RUBY», «JAVA», «JBOSS», «TOMCAT».

Jone Polvora 20.05.2022 00:55

Другие вопросы по теме