Ubuntu上的asp.net核心应用程序无法打开DataProtectionKeys并抛出权限被拒绝错误

时间:2018-08-27 16:17:54

标签: ubuntu asp.net-core .net-core

我们有一个用asp.net核心编写的Web应用程序,可在Ubuntu 17.10上运行。

由于一些错误的决定,我们开始在与运行生产服务器的OS实例相同的OS实例上运行TeamCity(这是一个持续集成服务器)。同时,我们安装了数据库服务器(PostgreSQL)的另一个实例以用作登台数据库服务器,并设置TeamCity为登台git分支进行自动构建。全部在同一操作系统上。

当我们决定在同一OS实例中同时与Kestrel的两个实例同时运行时,事情就发了。

由于同时运行了两个Kestrel实例,因此我们会定期收到以下错误消息:

  

2018-08-24 11:03:28.1730 | 47 | ERROR | Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider |刷新密钥环时发生错误。将在2分钟后重试。 System.UnauthorizedAccessException:拒绝访问路径“ /home/userRunningKestrelProcess/.aspnet/DataProtection-Keys”。 ---> System.IO.IOException:权限被拒绝

从那时起我们有了

  1. 将所有登台基础结构(即TeamCity服务器,kestrel登台服务器和登台PostgreSQL服务器)移动到另一个虚拟OS实例。
  2. 从生产服务器中删除了与登台环境相关的所有内容(这是启动kestrel进程的系统服务,该进程运行我们的Web应用的登台版本以及Web应用的编译版,所有TeamCity可执行文件和登台PostgreSQL实例)。
  3. 确保运行生产服务器的kestrel进程是操作系统上运行的唯一kestrel进程。
  4. 确保运行Kestrel进程的用户具有错误所提及的目录及其直到其主目录的所有父目录的所有者的读取/写入权限。
  5. 在发生错误时,请确保(使用热熔器)没有其他进程打开文件。

但是错误仍然存​​在。它唯一消失的方法是重新启动服务器。

由于我们计划完全虚拟化生产环境,并使用当前的TeamCity服务器(在单独的OS实例上运行)使生产构建自动化,因此我们希望此错误消失,但是对于为什么会有所见解它正在发生(尽管我们怀疑同时运行两个版本的Kestrel是罪魁祸首),更重要的是,为什么在我们采取措施解决此问题之后,错误仍然出现。

0 个答案:

没有答案