非根网站应该写在Ubuntu下的日志?

我有一个python我们的应用程序,为了安全目的在www-data下执行(不在root下)。 它的进程可以生成特定于应用程序的日志文件,我想把这个文件放在某个地方。 正如我注意到的, /var/log拥有root所有者和drwxr-xr-x权限,所以我的非root应用程序不能在这里写入日志。 在这种情况下写入日志的正确位置是什么? 我是否需要使用日志(如~/.myapp.log )来~/.myapp.log www-data主文件夹或者它是一些常用的解决scheme?

这就是/dev/log 。 您可以configurationsyslog守护进程将来自应用程序的消息redirect到您喜欢的任何文件。

从python,这应该像调用syslog.syslog一样简单。

您的应用程序可能不应该作为www-data运行。 为它创build一个新的系统用户 – 如果你正在使用adduser则使用系统选项 – 并将其文件放在/srv/yourapp 。 然后你可以为它创build一个日志目录,比如/var/log/yourapp ,或者把日志保存在/srv/yourapp/logs

这样,你的networking服务器就像www-data运行,你的app作为yourapp运行,并且你可以从root启动。 例如,使用带有选项user www-data; nginx user www-data; 在其configuration中,并运行您的应用程序作为uWSGI(这是一个应用程序容器服务器)应用程序与适当的

 uid = yourapp gid = yourapp 

/etc/uwsgi/apps-enabled/中的.iniconfiguration。 uWSGIconfiguration反映了nginxconfiguration的风格。 您可以在/etc/uwsgi/apps-available/创build应用程序configuration文件,并将它们符号链接到/etc/uwsgi/apps-enabled/ 。 其他一切都应该由你的分配来处理。

据我所知,这是一个非常有效的方法。 至less对于Ubuntu和python webapps来说。 它使一般pipe理更简单:启动脚本应该按预期工作,没有任何特殊的自定义编辑,更新不应该破坏任何东西…通常的好处。

作为一个更具体的例子,我有一个MoinMoin wiki作为uWSGI应用程序在Ubuntu的nginx后面运行。

来自nginx网站:

 location = /wiki { return 301 /wiki/; } location /wiki/ { gzip off; include uwsgi_params; uwsgi_param SCRIPT_NAME /wiki; uwsgi_modifier1 30; uwsgi_pass unix:/run/uwsgi/app/moin/socket; } 

从uWSGI moin.ini:

 [uwsgi] uid = moin gid = moin plugins = python wsgi-file = /usr/share/moin/server/moin.wsgi master = true chmod-socket = 666 processes = 1 

与所有其他设置完全默认( usr/share/uwsgi/conf/default.ini对我来说)

MoinMoin拥有自己的独立用户

 # grep moin /etc/passwd moin:x:109:111::/srv/moin:/bin/false 

而且,因为它就像其他的一切(nginx,uwsgi)一样从版本库安装,所以剩下的configuration在/etc/moin/