我有一个使用Visual Studio制作并测试过的项目。有用。然后我将其上传到Ubuntu服务器。然后运行dotnet run。可以,远程计算机可以看到它(通过nginx代理)。
然后我尝试了dotnet run &。该过程似乎已经开始,但是没有任何监听指定的端口。然后,根据示例,我尝试了sudo nohup dotnet run kestrel > /dev/null 2>&1 &。这次它听了一段时间,然后死于:
应用程序已启动。按Ctrl + C关闭。
失败:Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware [0]发生未处理的异常:找不到软件包“ google.protobuf”的编译库位置System.InvalidOperationException:找不到Microsoft软件包“ google.protobuf”的编译库位置.Extensions.DependencyModel.CompilationLibrary.ResolveReferencePaths()
(nohup.out的输出片段,第一批亚麻布,我跳过了无关紧要和私有的项目详细信息)。
有什么线索吗?在前台运行它时,我仍然没有任何错误。
我发现的结果是:当我以root身份运行它时,我无法运行它(给出相同的错误消息)。在我的测试服务器上,我有一个名为“ dotnet”的特殊用户帐户。登录后dotnet即可运行该应用程序。作为根,我不能。
我不想使用root特权运行我的应用程序。
下一步尝试:我dotnet restore以root身份运行。然后我去了nohup dotnet run kestrel > /dev/null 2>&1 &,它起作用了。
真好 现在有没有办法以有限的权限启动我的应用程序?
我自己找到了答案,所以我会分享。
第一:如果您不打算为Linux的.NET核心项目提供完全的root用户特权,则不要将它们作为root用户运行。我认为具有root特权的Web应用程序不是一个好主意,并且有点麻烦。
但是好吧,当某事不起作用时,很容易sudo时不时地使用它。事实证明,这是问题的原因:
dotnet restore并且dotnet run必须由同一用户以相同的特权执行。当我dotnet restore以root身份发出时,它起作用了。要以较低特权的用户身份运行项目时,反之则更加困难。您必须在发出前删除所有临时文件dontet restore。所以,一般nohup dotnet run kestrel > /dev/null 2>&1 &工作原理的魅力,没有sudo这里需要,运行此作为root可能是有害的。
现在,我总是创建特殊dotnet用户来在服务器上运行dotnet应用程序。这样更安全。用户无法使用sudo。当我需要执行管理任务时,只需启动单独的根会话。我对数据库访问使用相同的方法。该应用程序仅具有执行程序的权限,甚至没有选择允许的权限。
| 归档时间: |
|
| 查看次数: |
1815 次 |
| 最近记录: |