Ядро asp.net на Ubuntu не может открыть DataProtectionKeys, выдавая ошибку «Отказано в доступе» - PullRequest
0 голосов
/ 27 августа 2018

У нас есть веб-приложение, написанное на ядре asp.net, работающее на Ubuntu 17.10.

Из-за некоторых неверных решений мы начали запуск TeamCity (который является сервером непрерывной интеграции) на том же экземпляре ОС, что и на рабочем сервере. В то же время мы смонтировали еще один экземпляр нашего сервера базы данных (PostgreSQL) для использования в качестве промежуточного сервера базы данных и настроили TeamCity для создания автоматических сборок для нашей промежуточной ветви git. Все на одной ОС.

Дела пошли на юг, когда мы решили запустить одновременно с двумя экземплярами Kestrel в одном экземпляре ОС, а именно производственный и промежуточный.

После запуска обоих экземпляров Kestrel периодически появляется следующая ошибка:

2018-08-24 11: 03: 28.1730 | 47 | ОШИБКА | Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider | Произошла ошибка при обновлении кольца ключей. Попробую еще раз через 2 минуты. System.UnauthorizedAccessException: доступ к пути '/home/userRunningKestrelProcess/.aspnet/DataProtection-Keys' запрещен. ---> System.IO.IOException: в доступе отказано

С тех пор у нас есть

  1. Перемещена вся промежуточная инфраструктура (то есть сервер TeamCity, промежуточный сервер kestrel и промежуточный сервер PostgreSQL) в другой виртуализированный экземпляр ОС.
  2. Удалено все, что связано с промежуточной средой, с рабочего сервера (это служба systemd, которая запустила процесс kestrel, выполняющий промежуточную версию нашего веб-приложения, а также скомпилированную версию нашего веб-приложения, все исполняемые файлы TeamCity и промежуточную версию). экземпляр PostgreSQL).
  3. Удостоверился, что процесс kestrel, на котором запущен производственный сервер, является единственным процессом kestrel, работающим в ОС.
  4. Убедитесь, что пользователь, на котором запущен процесс Kestrel, имеет разрешения на чтение / запись и является владельцем каталога, упомянутого в ошибке, и всех его родительских каталогов вплоть до его домашнего каталога.
  5. Удостоверился (используя fuser), что ни один другой процесс не открыл файл при возникновении ошибки.

Но ошибка сохраняется. Единственный способ, которым он уйдет - перезагрузка сервера.

Поскольку мы планируем полностью виртуализировать нашу производственную среду, а также автоматизировать производственные сборки с использованием нашего текущего сервера TeamCity (работающего на отдельном экземпляре ОС), мы рассчитываем на то, что эта ошибка исчезнет, ​​но при любом понимании того, почему это происходит (хотя мы подозреваем, что запуск двух версий kestrel одновременно был виновником) и, что более важно, почему после того, как мы сделали что-то, чтобы исправить проблему, ошибки все еще появляются.

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