.Net Core в Linux работает нормально с 'dotnet myapp.dll', но не работает с systemctl - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь разместить приложение ASP.Net Core MVC на Ubuntu Server 16.04 LTS, следуя указаниям этого руководства .

На компьютере Linux я использую git pullтянуть в моем проекте.Я успешно строю его с dotnet build, который запускает восстановление пакета.Я успешно публикую это с dotnet publish -c Release -r linux-x64.Я изменяю каталоги на bin/Release/netcoreapp2.1 и запускаю sudo cp ./*.* /var/aspnetcore/myapp/, чтобы скопировать файлы в каталог, где я размещаю проект.Я перехожу к этому каталогу и набираю dotnet myapp.dll - приложение начинает прослушивать порты 5000 и 5001, и с другого компьютера я могу ввести свое доменное имя в браузер и посмотреть веб-сайт, что означает обратный прокси-сервер Nginx и Kestrel.должно работать нормально.

Теперь я хочу запустить приложение в качестве службы, чтобы оно запускалось с компьютера, перезагружалось при сбое, регистрировало ошибки и т. д., но когда я набираю sudo systemctl start kestrel-myapp.service, оно сразу падает и пытаетсяперезапускать каждые 10 секунд, но не удается.Журнал показывает ошибку: An assembly in the application dependencies manifest (myapp.deps.json) was not found: package: 'Microsoft.EntityFrameworkCore.Relational.Design', version '1.1.5' path: 'lib/netstandard1.3/Microsoft.EntityFrameworkCore.Relational.Design.dll' Main process exited, code=exited, status=140/n/a

Итак, версия 1.1.5 выглядит подозрительно низкой, но я обновил все свои пакеты NuGet и все еще хочет его использовать.Кроме того, я не понимаю, почему он не падает с dotnet myapp.dll, если есть проблемы с зависимостями.Кто-нибудь знает, как решить проблему?

Вот мой служебный файл:

[Unit]
Description=myapp ASP.Net Core MVC Application

[Service]
WorkingDirectory=/var/aspnetcore/myapp
ExecStart=/usr/bin/dotnet /var/aspnetcore/myapp/myapp.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
SyslogIdentifier=myapp
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

Бонусный вопрос: куда мне скопировать папку wwwroot со статическими файлами?Приложение запускается, но не может найти ни один из моих javascript или css файлов, и я не уверен, где они находятся.

1 Ответ

0 голосов
/ 11 сентября 2018

Когда вы dotnet publish -c Release -r linux-x64 создаете несколько каталогов.Вы хотите использовать каталог bin/Release/netcoreapp2.1/linux-x64/publish.Другие каталоги также содержат сборки, но эти сборки предполагают, что они будут работать в системах разработки.Только каталог publish содержит биты, которые должны быть развернуты.Другие каталоги содержат биты, которые предполагают, что они работают в среде разработки.

Он работает, когда вы запускаете dotnet myapp.dll, потому что вы все еще работаете как обычный пользователь, и он видит ваши локальные ресурсы разработки, включая кэш-память nuget.

Когда вы запускаете через systemctl, он запускается как root, который не имеет локального кэша nuget и не может использовать версию вашего кода для разработчиков (не publish ed).

...