您认为哪种“设置”效果最好?我使用了 virtualenv 并将我的 django 项目移到了这个环境中,但是我看到了另一个设置,其中有一个用于虚拟环境的文件夹和另一个用于项目的文件夹。
virtualenv 是一种隔离 Python 环境的方法;因此,它在部署时没有很大的作用- 但是在开发和测试期间,如果不强烈推荐,它是必需的。
您从 virtualenv 获得的价值是它允许您确保为应用程序安装了正确版本的库。因此,将虚拟环境本身粘贴在哪里并不重要。只要确保您没有将其作为源代码版本控制系统的一部分包含在内。
文件系统布局并不重要。你会看到很多文章赞美目录布局的优点,甚至是你可以克隆作为起点的骨架项目。我觉得这更多的是个人喜好,而不是硬性要求。当然很高兴拥有;但除非您知道原因,否则它不会为您的部署过程增加任何价值 - 所以不要这样做,因为一些博客推荐它,除非它对您的场景有意义。例如 -setup.py
如果您没有作为部署工作流程一部分的私有 PyPi 服务器,则无需创建文件。
如何以允许在单个服务器中托管多个站点的方式进行设置?
多站点设置需要做两件事:
- 如果您有 SSL,则服务器正在侦听端口 80 和/或端口 443 上的公共 IP。
- 一堆运行实际 django 源代码的“进程”。
人们将 nginx 用于#1,因为它是一个非常快速的代理,而且它没有像 Apache 这样的综合服务器的开销。如果您对 Apache 感到满意,您可以自由使用它。没有“多站点,使用nginx”的要求;您只需要一个正在侦听该端口的服务,知道如何重定向(代理)到您运行实际 django 代码的进程。
对于#2,有几种方法可以启动这些过程。gevent/uwsgi 是最受欢迎的。这里唯一要记住的是不要在生产中使用 runserver。
这些是绝对的最低要求。通常人们会添加某种进程管理器来控制所有运行的“django 服务器”(#2)。在这里你会看到upstart
并supervisor
提到。我更喜欢主管,因为它不需要接管整个系统(不像暴发户)。然而,再一次 - 这不是一个硬性要求。您可以完美地运行一堆screen
会话并将它们分离。不利的一面是,如果您的服务器重新启动,您将不得不重新启动屏幕会话。
我个人会推荐:
- #1 的 Nginx
- 在 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
是一个始终指向本地机器的保留地址。这就是为什么它被称为“本地主机”。它只能访问在同一系统上运行的进程。
通常你有前端服务器(上面列表中的#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的配置文件背后的逻辑是什么?有很多教程使用了截然不同的配置文件,我不知道哪个更好。例如,有些人使用“alias /path/to/static/folder”而其他人使用“root /path/to/static/folder”。也许你可以分享你喜欢的配置文件。
关于 nginx,您应该了解的第一件事是它不是像 Apache 或 IIS 这样的网络服务器。它是一个代理。因此,您会看到不同的术语,例如“上游”/“下游”和多个“服务器”被定义。花点时间先阅读一下 nginx 手册。
有很多不同的方式来设置 nginx;alias
但这是您对vs.的问题的一个答案root
。root
是绑定 nginx 的文档根目录(“主目录”)的显式指令。这是当您发出没有路径的请求时它将查看的目录http://www.example.com/
alias
表示“将名称映射到目录”。别名目录可能不是文档根目录的子目录。
为什么我们要在 /etc/nginx 中的站点可用和站点启用之间创建符号链接?
这是 debian(以及 ubuntu 等类似 debian 的系统)所独有的。 sites-available
列出系统上所有虚拟主机/站点的配置文件。从sites-enabled
到sites-available
“激活”该站点或虚拟主机的符号链接。这是一种分离配置文件并轻松启用/禁用主机的方法。