你认为哪种"设置"效果最好?我使用了viralenv并移动了我的
在这个环境中的Django项目,但是我看到了另一个
设置,其中有一个文件夹用于虚拟环境,其他文件夹用于
项目.
virtualenv是一种隔离Python环境的方法;因此,它在deployment岁时没有太大的作用,但是在development岁和testing岁时,如果不是强烈推荐的话,这是一个要求.
您将从viralenv获得的价值在于,它允许您确保为应用程序安装了正确版本的库.因此,虚拟环境本身放在哪里并不重要.只需确保您没有将其作为源代码版本控制系统的一部分.
文件系统布局并不重要.你会看到很多文章赞美目录布局的优点,甚至可以克隆一些框架项目作为起点.我觉得这更多的是个人喜好,而不是严格的要求.当然,拥有它很好;但是,除非你有know why,否则它不会给你的部署过程增加任何价值——所以不要这样做,因为有些博客推荐它,除非它对你的场景有意义.例如,如果部署工作流程中没有专用PyPi服务器,则无需创建setup.py
文件.
我如何设置允许多个站点托管的内容
要进行多个站点设置,您需要做两件事:
- 在端口80和/或端口443(如果您有SSL)上监听公网IP的服务器.
- 一堆运行实际django源代码的"进程".
人们将nginx用于#1是因为它是一个速度非常快的代理,并且没有Apache这样的综合服务器的开销.如果您对Apache感到满意,您可以自由使用它.没有要求"对于多个站点,使用nginx";您只需要一个监听该端口的服务,知道如何重定向(代理)到运行实际Django代码的进程.
对于#2,有几种方法可以启动这些过程.gevent/uwsgi是最受欢迎的.这里唯一需要记住的是do not use runserver in production.
这些是绝对最低要求.通常,人们会添加某种进程管理器来控制所有"django服务器"(#2)的运行.这里你会看到upstart
和supervisor
被提及.我更喜欢supervisor,因为它不需要接管整个系统(不像upstart).然而,再一次——这不是hard requirement.你完全可以运行一系列screen
个会话,并将其删除.缺点是,如果服务器重新启动,则必须重新启动屏幕会话.
我个人建议:
- Nginx代表#1
- 在uwsgi和genicorn之间 Select -我使用uwsgi.
- supervisor用于管理后端进程.
- 您托管的每个应用程序的单个系统帐户(用户).
我推荐#4的原因是隔离权限;同样,这不是必需的.
为什么有些人建议使用gunicorn_django-b 0.0.0:8000和
0.0.0.0
表示"所有IP地址"——它是一个元地址(即占位符地址).127.0.0.1
是始终指向本地计算机的保留地址.这就是为什么它被称为"localhost".只有在同一系统上运行的进程才能访问它.
通常,您让前端服务器(上面列表中的#1)侦听公共IP地址.你是should explicitly bind the server to 100 IP address号.
但是,如果由于某种原因您正在使用DHCP,或者您不知道IP地址是什么(例如,它是一个新配置的系统),您可以告诉nginx/apache/任何其他进程绑定到0.0.0.0
.This should be a 101.
对于生产服务器,您将拥有一个静态IP.如果你有一个动态IP(DHCP),那么你可以在0.0.0.0
分钟后离开.但在生产机器上使用DHCP是非常罕见的.
将genicorn/uwsgi绑定到此地址的版本为not recommended.如果您将后端进程(genicorn/uwsgi)绑定到0.0.0.0
,则可能会绕过您的前端代理(nginx/apache/etc)"直接"访问它;某人可能只需请求http://your.public.ip.address:9000/
,然后直接访问您的应用程序especially if your front-end server (nginx) and your back end process (django/uwsgi/gevent) are running on the same machine.
不过,如果你不想麻烦地运行前端代理服务器,你可以自由地这么做.
nginx的配置文件背后的逻辑是什么?有这么多
使用截然不同的配置文件的教程
不知道哪一个更好.例如,有些人使用"别名"
/path/to/静电/文件夹",其他"root/path/to/静电/文件夹".
也许您可以共享您的首选配置文件.
关于nginx,您应该知道的第一件事是它是not a webserver,就像Apache或IIS一样.它是一个代理人.因此,您将看到定义了不同的术语,如"upstream "/"下游"和多个"服务器".花点时间先看一下nginx手册.
设置nginx有很多不同的方法;但是对于您的问题,这里有一个答案,分别是alias
和root
.root
是绑定nginx的文档根目录("主目录")的显式指令.这是当您发出没有路径(如http://www.example.com/
)的请求时它将查看的目录
alias
表示"将名称映射到目录".别名目录may not be是文档根的子目录.
为什么我们要在中可用的站点和启用的站点之间创建一个符号链接
这是Debian(以及类似Debian的系统,如ubuntu)所独有的.sites-available
列出系统上所有虚拟主机/站点的配置文件.从sites-enabled
到sites-available
的符号链接"激活"该站点或虚拟主机.它是分离配置文件并轻松启用/禁用主机的一种方式.