使用Python manage.py runserver在VPS上部署Django到生产环境

14

我为我的Django应用程序购买了一个VPS。我以前从未部署过Django或其他任何应用程序。我阅读了一些关于如何使用Apache和WSGI以及其他选项Gunicorn、Nginx部署Django的教程。对我来说,所有这些都非常令人沮丧和难以理解。我想知道如果我将调试改为假,创建数据库,插入它,然后简单地运行python manage.py runserver my-ip来部署我的应用程序会发生什么。

这是否是一种不好的做法?


13
这里充满了仇恨,但我认为这是一个有价值的问题——我所阅读的文档并没有解释为什么需要一个Web服务器、gunicorn等,而且由于我可以在没有它们的情况下服务我的开发服务器,因此了解它们提供了什么是如此必要。 - owencm
1
我也不明白为什么没有人能够提供一个足够的答案,除了“就是不要这样做”。接受规定而不理解其基本原理难道曾经是一个好主意吗? - Alex Petralia
主要原因是Django服务器不被认为是安全的。一般来说,即使在受保护的环境中,数据也需要保护,这使得manage.py runserver不适合生产环境。 - aris
2个回答

6

学习如何部署Django项目很容易。

首先,您应该知道如何安装Apachemod_wsgi

如果您使用的是Ubuntu操作系统

sudo apt-get install apache2 libapache2-mod-wsgi

或者Fedora(红帽)(未经测试)

yum install httpd mod_wsgi

那么,你需要知道如何将Apache2与你的Django项目关联起来。

<VirtualHost *:80>
    ServerName example.com
    ServerAdmin example@example.com

    Alias /media/ /home/tu/blog/media/

    <Directory /home/tu/blog/media>
        Require all granted
    </Directory>

    WSGIScriptAlias / /home/tu/blog/blog/wsgi.py

    <Directory /path/to/django/project/wsgifile>
    <Files wsgi.py>
        Require all granted
    </Files>
    </Directory>
</VirtualHost>

句子“WSGIScriptAlias”将Apache2配置与您的Django项目联系起来。在Django的“wsgi.py”文件中,您会看到包含“project.settings”的代码,这就是它的工作方式。
以下内容可能更容易理解其工作原理:
*.conf --> wsgi.py --> settings.py --> urls.py 和 apps
只需在Google中搜索“ubuntu django server mod_wsgi”,自己学习吧!

3
不要在生产环境中使用开发服务器。千万不要这样做。
至少应该使用gunicorn进行服务:
$ pip install gunicorn
$ cd your_project
$ gunicorn project.wsgi  # gunicorn now runs locally on port 8000

同时使用nginx(或apache)作为反向代理:

server {
    location / {
        proxy_pass http://127.0.0.1:8000;
    }
}

部署Django(就像任何其他应用程序一样)是一个独立的世界,掌握它需要时间。但永远不要在生产环境下运行开发服务器。


5
请问你为什么需要使用Gunicorn和Nginx或Apache?我相信你的选择,但我可以帮助你更好地了解它们所提供的功能。 - owencm
3
在非常小的规模场景下为什么不能在生产环境中使用开发服务器?请解释原因。参见http://serverfault.com/q/717568/134848。 - a06e
请解释为什么不要在生产环境中使用开发服务器? - Ricky
1
@Ricky - 来自Django文档:“不要在生产环境中使用此服务器。它尚未经过安全审计或性能测试。” - Yuval Adam
如果您提供静态文件,则只需要nginx作为反向代理,如果您的Django应用程序是API,则只需要gunicorn。 - redigaffi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接