Например, в приложениях на основе PHP рекомендуется запускать PHP-FPM от пользователя, отличного от пользователя, которому принадлежит кодовая база, поэтому, если кто-то взломает ваше приложение из Интернета, не сможет ничего записать в кодовую базу (кроме каталог публичных активов). Похоже, что приложения ruby предназначены для запуска HTTP-серверов (или серверов приложений / граблей), таких как Unicorn и Puma от одного и того же пользователя. Puma (сервер rails по умолчанию) даже не имеет записей конфигурации для указания пользователя / группы.
UPDATE
То, что я ожидаю сделать с приложением ruby (то же самое, что я делаю с PHP-FPM), это запустить sudo unicorn
или sudo puma
от пользователя по умолчанию (владельца кодовой базы) и указать пользователя / группу (например, * 1009). *) в конфигурации, поэтому HTTP-сервер будет запускать главный процесс из корневых и дочерних процессов из www-data
. У Puma нет таких настроек, и я не нашел никаких проблем в репозитории Puma. Это заставило меня задуматься о том, что, возможно, в экосистеме Ruby распространено такое поведение. Я все еще пытался запустить последнее приложение rails (5.2.1) с единорогом, но столкнулся с другой проблемой: rails зависит от гема bootsnap, и когда вы запускаете sudo unicorn -c config.rb
, он создает каталоги tmp/cache/bootsnap-*
как root (в главном процессе), который нарушает все потому что дочерние процессы, запущенные из www-data
, не будут иметь к нему доступа. Это заставило меня снова подумать, что, возможно, я делаю что-то не так, и все в порядке, чтобы запускать приложения ruby от владельца базы кода, хотя я не вижу аргументов, как это отличается от запуска PHP-FPM.