我正在尝试使用Flask,uWSGI和nginx的组合来设置我的第一个Web服务器.我已经成功运行了Flask和uWSGI组件.我还从各种博客中获得了很多关于如何设置它的技巧.但是,没有一致性,文章提出了许多不同的设置方法,特别是在文件夹结构,nginx配置和用户/权限方面(我已经尝试了一些这些建议,许多确实有效,但我不确定哪个是最好的).那么有没有一种基本的"最佳实践"方式来设置这个堆栈?
nginx + uwsgi + flask是一个强大的堆栈!我将supervisor添加到混合中并按如下方式配置它.
从主管中运行uwsgi和nginx以获得更好的过程控制.然后,您可以在启动时启动主管,它将以正确的顺序运行uwsgi和nginx.如果他们死了,它也会智能地试图让他们活着.请参阅下面的示例主管配置.
如果在同一主机上运行nginx和uwsgi,请使用unix套接字而不是HTTP.
如果您的Web服务器正在侦听端口80,则nginx主进程必须以root身份运行.我通常在其他端口(如8080)上运行我的Web服务器,并使用前面的负载均衡器来侦听端口80和代理到nginx.
确保您的uwsgi服务器有权读取/写入您选择的套接字文件以及对任何应用程序代码和数据目录的适当权限.
不要过分担心您的文件夹结构,特别是如果您使用的是具有合理默认值的Ubuntu Linux发行版.主管理程序配置文件可以包含子目录中的文件,例如/etc/supervisor/conf.d/
将特定于应用程序的配置与管理程序核心配置分开.同样适用于nginx /etc/nginx/sites-enabled
.
uwsgi和nginx的示例管理器配置:
$ cat /etc/supervisor/conf.d/app.conf [program:app] command=/usr/local/bin/uwsgi --enable-threads --single-interpreter --vacuum --chdir /path/to/app --uid www-data --log-syslog --processes 4 --socket /tmp/app.sock -w mypython:app --master directory=/path/to/app autostart=true autorestart=true priority=999 stopsignal=INT environment=SOMEVAR=somevalue [program:nginx] command=/usr/sbin/nginx autostart=true autorestart=true priority=999
示例nginx.conf:
$ cat /etc/nginx/sites-enabled/myapp.conf server { listen 8080; client_max_body_size 4G; server_name localhost; keepalive_timeout 5; location / { include uwsgi_params; uwsgi_pass unix:///tmp/app.sock; } }