【问题标题】:How can Django projects be deployed with minimal installation work?如何以最少的安装工作部署 Django 项目?
【发布时间】:2010-04-05 00:55:47
【问题描述】:

要使用 Python/Django/MySQL 部署站点,我必须在服务器 (RedHat Linux) 上执行这些操作:

  • 安装 MySQLPython
  • 安装 ModPython
  • 安装 Django(使用 python setup.py install
  • 在 httpd.conf 文件中添加一些指令(或使用 .htaccess)

但是,当我使用 PHP(使用 CodeIgniter)部署另一个站点时,我什么都不做。在共享服务器上部署 Django 项目时遇到了一些问题。现在,我的问题是:

  • django项目的部署过程可以简化吗?
  • 我做的太多了吗?
  • 可以省略某些步骤吗?
  • 在共享服务器上部署 django 站点的最佳方式是什么?

【问题讨论】:

  • 这与您的问题有点正交,但目前建议使用 mod_wsgi 而不是 mod_python。

标签: python django


【解决方案1】:

为了实现简单的 Django 部署,我将执行以下操作:

首次服务器配置

  • 安装mod_wsgi,它允许您在嵌入式模式或守护进程模式下运行。
  • 安装python和virtualenv

在您的开发环境中

每次要部署时

  • 将您的虚拟环境复制到生产服务器
  • 只需在您的 httpd.conf 文件(或使用 .htaccess)中添加一个 Include 指令到您项目的 apache 配置中。正如mod_wsgi integration with django 文档中所述,如何配置 Apache 包含文件的一个示例是:

Alias /media/ /usr/local/django/mysite/media/

<Directory /usr/local/django/mysite/media>
  Order deny,allow
  Allow from all
</Directory>

WSGIScriptAlias / /usr/local/django/mysite/apache/django.wsgi

<Directory /usr/local/django/mysite/apache>
  Order deny,allow
  Allow from all
</Directory>

自动化部署

  • 我会考虑使用Fabric 来自动化部署

【讨论】:

    【解决方案2】:

    django项目的部署过程可以更简单吗?

    没有。如果需要,您可以编写其中的一些脚本。但是,您永远不会再安装 MySQL、MySQLPuthon、mod_wsgi(或 mod_python)或 Django。

    但是,您会一直调整您的应用程序。

    我做的太多了吗?

    没有。 Python(和 Django)不是 Apache 的一部分。 PHP 嵌入在 Apache 中。 PHP 与 mod_python(或 mod_wsgi)完全一样。只是一块馅饼。 (显然,有些主机会为您处理 PHP 安装,但不处理 mod_wsgi 或 mod_python 安装。)

    有些步骤可以省略吗?

    没有。但是,您只能执行一次。

    在共享服务器上部署 django 站点的最佳方式是什么?

    你做得对。

    当我使用 php(使用 CodeIgniter)部署另一个站点时,我什么都不做

    当然是不公平的比较。显然,他们已经为您安装了 PHP 和数据库。他们真好。

    另外,PHP 不是 Python。 PHP 是 Apache 的插件。 Python“只是”一种编程语言,需要单独的 Apache 插件(即 mod_python 或 mod_wsgi)。

    How nicely does Python 'flow' with HTML as compared to PHP?

    【讨论】:

    • PHP 和 Python 一样是一种单独的语言,可以通过模块嵌入到服务器中。 PHP 肯定不是 Apache 的一部分。
    • @John Millikin:PHP 似乎总是不仅仅是一种语言。它似乎是专门为插入 Apache 而设计的,而 Python 没有类似的期望。
    • 你怎么看? PHP 通常位于 FastCGI 后面,前面是一个快速 HTTP 服务器,例如 lighttpd 或 cherokee。 Apache + PHP 是最流行的选择,但如果 PHP 是 Apache 的一部分,那么 Python、Perl、Ruby 或任何其他可嵌入语言也是如此。
    • @John Millikin:PHP 似乎包含模板语言和 HTTP 协议处理。 Python 没有。 PHP 可以直接嵌入到 Apache 中。 Python 不能,它需要一个额外的模块(mod_wsgi 或 mod_python)。我只是看不出 PHP(将 Web 处理作为一流功能)与 Python 之间的相似之处,后者只是一种语言。
    【解决方案3】:

    Django 托管支持不如 PHP 广泛,但有一些不错的选择。我可以推荐WebFaction - 他们提供了一个易于使用的控制面板,它提供了 Django 版本、Python 版本、mod_python、mod_wsgi、MySQL、PostgreSQL 等的各种组合。它们也很划算。如果您使用他们的设置,您可以获得 SSH 访问权限,但除了实际上传项目文件夹之外,几乎所有设置都可以通过他们的控制面板完成。

    免责声明:除了作为一个快乐的客户之外,我与他们没有任何其他联系。

    【讨论】:

      【解决方案4】:

      部署 PHP 站点时您无需执行任何操作,因为您的托管服务提供商已经安装了它。支持 Django 的 Web 主机通常会为您安装和配置它。

      【讨论】:

        【解决方案5】:

        如果您允许在虚拟机上运行映像,您只需安装这个已经制作的 solution。我可以想象将来会以这种方式完成安装,因为可以自动完成复杂的安全配置。

        【讨论】:

          【解决方案6】:

          大多数共享托管站点都运行 LAMP(Linux、Apache、MySQL、PHP)堆栈,因此部署只需复制一些文件即可。如果您使用的是像 CakePHP 这样的 PHP 框架之一或该服务尚未安装的东西(如图像库),那么您也将经历额外的部署步骤。

          使用 Django(或 Rails,或任何其他复杂框架),您必须自己设置一次堆栈,然后就可以开始了。

          但是,您还需要考虑部署后更新。如果这是您经常要做的事情,您可能还想查看 FabricCapistrano 以帮助实现自动化。

          附:我将支持 WebFaction 的建议。正如我所见,它接近于一键式安装。非常高兴的客户,尽管我主要将它们用于测试站点和原型设计。

          【讨论】:

            【解决方案7】:

            您可以使用 Python virtualenvpip(另请参阅“Tools of the Modern Python Hacker: Virtualenv, Fabric and Pip”)。我在虚拟环境中开发了我的 Django 项目。我在部署应用程序时将虚拟环境文件复制到生产机器。我使用mod_wsgi。你必须把它写在mod_wsig 文件中:

            import site  
            site.addsitedir('C:\PythonVirtualEnv\IntegralEnv\Lib\site-packages') 
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-04-21
              • 2020-03-20
              • 2012-03-31
              • 2011-06-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多