您认为哪种“设置”效果最好?我使用了virtualenv并将django项目移动到该环境中,但是我看到了另一种设置,其中有一个用于虚拟环境的文件夹,另一个用于项目的文件夹。
virtualenv是隔离Python环境的一种方法。因此,它在部署中没有很大的作用-但是在开发和测试过程中,如果不强烈建议,则是必需的。
您可以从virtualenv获得的价值在于,它可以确保为应用程序安装了正确的库版本。因此,将虚拟环境本身粘贴在什么位置都没有关系。只要确保您没有将其包含在源代码版本控制系统中即可。
文件系统布局并不重要。您将看到许多文章,这些文章都赞扬了目录布局的优点,甚至可以克隆可以作为起点的框架项目。我觉得这更多是个人喜好而不是硬性要求。当然很高兴;但是除非您知道为什么,否则它不会为您的部署过程增加任何价值-请勿这样做,因为有些博客建议您这样做,除非对您的情况有意义。例如-setup.py
如果您的部署工作流程中没有私有PyPi服务器,则无需创建文件。
如何以允许将多个站点托管在单个服务器中的方式进行设置?
您需要做两件事来进行多个站点设置:
- 正在使用端口80和/或端口443上的公用IP侦听的服务器。
- 一堆正在运行实际django源代码的“进程”。
人们将nginx用于#1,因为它的代理速度非常快,并且没有像Apache这样的综合服务器带来的开销。如果您愿意,可以自由使用Apache。没有要求“对于多个站点,请使用nginx”;您只需要在该端口上侦听的服务即可,该服务知道如何重定向(代理)到运行实际django代码的进程。
对于#2,有几种方法可以启动这些过程。gevent / uwsgi是最受欢迎的。这里唯一要记住的是不要在生产中使用runserver。
这些是最低要求。通常,人们添加某种流程管理器来控制所有“ django服务器”(#2)的运行。在这里,您将看到upstart
并supervisor
提及。我更喜欢主管,因为它不需要接管整个系统(不同于新贵)。但是,这又不是硬性要求。您可以完美地运行一系列screen
会话并将它们分离。缺点是,如果服务器重新启动,则必须重新启动屏幕会话。
我个人建议:
- Nginx为#1
- 在uwsgi和gunicorn之间选择-我使用uwsgi。
- 管理后端流程的主管。
- 您所托管的每个应用程序的单独的系统帐户(用户)。
我建议#4的原因是为了隔离权限。同样,这不是必需的。
为什么有些人建议使用gunicorn_django -b 0.0.0.0:8000,而另一些人建议使用gunicorn_django -b 127.0.0.1:8000?我在Amazon EC2实例中测试了后者,但是前者没有问题时却无法正常工作。
0.0.0.0
表示“所有IP地址”-它是一个元地址(即占位符地址)。127.0.0.1
是始终指向本地计算机的保留地址。这就是为什么将其称为“ localhost”。仅在同一系统上运行的进程才可以访问。
通常,您让前端服务器(上面列表中的#1)监听公共IP地址。您应该将服务器明确绑定到一个IP地址。
但是,如果由于某种原因使用了DHCP或不知道IP地址是什么(例如,它是新配置的系统),则可以告诉nginx / apache /任何其他进程绑定到0.0.0.0
。这应该是暂时的权宜之计。
对于生产服务器,您将拥有一个静态IP。如果您有动态IP(DHCP),则可以保留0.0.0.0
。但是,为生产计算机配备DHCP的情况很少见。
在生产中不建议将gunicorn / uwsgi绑定到此地址。如果将后端进程(gunicorn / uwsgi)绑定到0.0.0.0
,则可以“直接”访问它,而绕过前端代理(nginx / apache / etc);有人可能只是http://your.public.ip.address:9000/
直接请求并访问您的应用程序,特别是如果您的前端服务器(nginx)和后端进程(django / uwsgi / gevent)在同一台计算机上运行。
如果您不想运行前端代理服务器的麻烦,则可以自由地这样做。
Nginx的配置文件背后的逻辑是什么?有太多使用完全不同的配置文件的教程,我困惑于哪个更好。例如,有些人使用“别名/ path / to / static / folder”,其他人使用“ root / path / to / static / folder”。也许您可以共享您的首选配置文件。
关于nginx,您应该了解的第一件事是它不是像Apache或IIS这样的Web服务器。它是代理。因此,您将看到不同的术语,例如“上游” /“下游”,并且定义了多个“服务器”。请花一些时间并首先阅读nginx手册。
设置nginx的方法有很多。但这是您对alias
vs.问题的一个答案root
。root
是绑定nginx的文档根目录(“主目录”)的显式指令。这是您在没有路径的情况下发出请求时要查看的目录http://www.example.com/
alias
表示“将名称映射到目录”。别名目录可能不是文档根目录的子目录。
为什么要在/ etc / nginx中的可用站点和启用站点之间创建符号链接?
这是debian(和像ubuntu这样的debian之类的系统)所特有的。 sites-available
列出系统上所有虚拟主机/站点的配置文件。从sites-enabled
到的符号链接sites-available
“激活”该站点或虚拟主机。这是分离配置文件并轻松启用/禁用主机的一种方法。