【问题标题】:Deploy Django project on RedHat在 RedHat 上部署 Django 项目
【发布时间】:2016-10-01 23:42:15
【问题描述】:

我正在尝试在我的 RedHat 服务器上部署我的本地 Django 项目。所以我安装了我需要的所有库和依赖项(还有 mod_wsgi)。

所以,我编辑我的项目设置并将我的本地项目移动到服务器。但我面临一个问题:当我尝试访问我的项目的 URL 时,我有资源管理器视图。

我还编辑了 httpd.conf 文件:

WSGIScriptAlias /var/www/html/virtualEnv/ /var/www/html/virtualEnv/ThirdPartyApplications/ThirdPartyApplications/wsgi.py
    WSGIPythonPath /var/www/html/virtualEnv/ThirdPartyApplications/:/var/www/html/virtualEnv/lib/python2.7/site-packages
    WSGIDaemonProcess http://licops.app.ale-international.com/ python-path=/var/www/html/virtualEnv/ThirdPartyApplications/:/var/www/html/virtualEnv/lib/python2.7/site-packages
    WSGIProcessGroup http://licops.app.ale-international.com/
    <Directory /var/www/html/virtualEnv/ThirdPartyApplications/>
        <Files wsgi.py>
            Order deny,allow
            Allow from all
        </Files>
    </Directory>

编辑:@FlipperPA

到目前为止,我正在 /etc/httpd/conf.d/djangoproject.conf 中运行这个 conf:

WSGISocketPrefix /var/run/wsgi

NameVirtualHost *:448
Listen 448

ServerName http://server.name-international.com
ErrorLog /home/myuser/apache_errors.log

WSGIDaemonProcess MyApp python-path=/var/www/html/MyApp:/var/www/html/MyApp/MyApp/lib/python2.7/site-packages
WSGIProcessGroup MyApp
WSGIScriptAlias /MyApp /home/user/MyApp/MyApp/wsgi.py
Alias /static /var/www/html/MyApp/MyApp/static

【问题讨论】:

  • 您运行的是什么版本的 RHEL 和 Apache?这会影响答案,因为 Apache 2.4 的配置发生了变化。
  • @FlipperPA 我正在运行 Apache 2.2.15 和 RHEL 6.8
  • 完成了@FlipperPA
  • 您需要跟踪两个主要目录树:(1)您的 virtualenv; (2) 你的 Django 项目。在WSGIDaemonProcess 指令中,python-path 应该指向您的virtualenv 的根目录。然后你的WSGIScriptAlias 应该指向你的Django 项目中的wsgi.py。您的 virtualenv 托管在哪个目录中?看起来您的 python-path 声明包括您的 Django 项目和系统 Python,但不包括您的 virtualenv?
  • @FlipperPA 我的 virtualenv 托管在 /home/myuser/virtualenv 但我的 django 项目位于 /var/www/html/myproject。我明白你说的,我会努力的;)

标签: python django apache mod-wsgi redhat


【解决方案1】:

这是我在 CentOS 6.8 和 Apache 2.2 上使用的 Apache 配置示例;我将其命名为 yourproject.conf 并将其包含在 /etc/httpd/conf.d 中,以便它包含在主 Apache 配置文件中:

LoadModule wsgi_module modules/mod_wsgi.so
LoadModule ssl_module modules/mod_ssl.so

WSGISocketPrefix /var/run/wsgi

NameVirtualHost *:443
Listen 443
<VirtualHost *:443>

  ServerName yourservername.com
  ErrorLog /home/yourusername/apache_errors.log

  WSGIDaemonProcess yourproject-https python-home=/home/yourusername/.virtualenvs/yourproject
  WSGIScriptAlias /yourproject /var/www/html/yourproject/yourproject/wsgi.py process-group=yourproject-https application-group=yourproject-https
  WSGIProcessGroup yourproject-https
  Alias /yourproject/static/ /var/www/html/yourproject/static/

  SSLENGINE on 

  SSLCertificateFile /etc/pki/tls/certs/localhost.crt
  SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
  SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
  SSLProtocol all -SSLv2
</VirtualHost>

您可能还需要在 Django 项目中调整 wsgi.py

import os, sys
from django.core.wsgi import get_wsgi_application

sys.path.append(os.sep.join(os.path.abspath(__file__).split(os.sep)[:-2]))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "yourproject.settings")
application = get_wsgi_application()

这假设您的 virtualenv 位于 /home/yourusername/.virtualenvs/yourproject 中,并且您的 Django 项目位于 /var/www/html/yourproject 中。它还会将 Apache 错误写入您的主目录,以防您遇到任何障碍。祝你好运!

【讨论】:

  • 谢谢,但我怎样才能访问我的服务器上的应用程序。我试过http://myserver.com/myproject 但我收到以下错误:Not Found The requested URL /myproject/ was not found on this server.
  • 上面的例子是在 SSL 的 443 端口上,所以你必须通过 https 访问它。如果您想要 http,请删除所有以 SSL 开头的行并将 443 切换为 80。
  • 好的,我正在缓慢但肯定地移动。现在,当访问http://mysever.com/myproject 时,我得到了目录中存在的文件列表:/
  • 您能否通过更新将您的 Apache 配置现在的样子添加到答案的末尾?
  • @FlipperPA 你应该避免再使用 SSL,改用 TLS,由于这个 POODLE 漏洞,SSL v3.0 现在完全不安全了。
【解决方案2】:

这是一个示例/etc/httpd/conf/httpd.conf 文件:

<VirtualHost *:80>
    ServerName my.webapp.com
    ServerAlias my.webapp.com

        ErrorLog /var/www/my.webapp.com/error.log

    WSGIDaemonProcess my.webapp.com \
      python-path=/var/www/my.webapp.com/my-django-project:/home/me/virt-envs/md-env/local/lib/python2.7/site-packages
    WSGIProcessGroup my.webapp.com

    DocumentRoot /var/www/my.webapp.com/my-django-project

    Alias /static/ /var/www/my.webapp.com/static/

    WSGIScriptAlias / /var/www/my.webapp.com/my-django-project/my-django-project/wsgi.py \
      process-group=my.webapp.com

    <Directory /var/www/my.webapp.com/my-django-project>
        Order allow,deny
    Satisfy Any
    Allow from all
    Options ExecCGI 
    AddHandler wsgi-script .wsgi
    </Directory>

    <Directory /var/www/my.webapp.com/my-django-project/my-django-project>
    <Files wsgi.py>
    Order deny,allow
    Allow from all
    </Files>
    </Directory>

    <Directory /var/www/my.webapp.com/static>
    Order allow,deny
    Allow from all
    </Directory>

</VirtualHost>

还有wsgi.conf:

LoadModule wsgi_module modules/mod_wsgi.so

然后是wsgi.py:

import os
import site
import sys

prev_sys_path = list(sys.path)

for directory in ALLDIRS:
    site.addsitedir(directory)

new_sys_path = []
for item in list(sys.path):
    if item not in prev_sys_path:
    new_sys_path.append(item)
    sys.path.remove(item)
sys.path[:0] = new_sys_path

sys.path.append('/var/www/my.webapp.com/my-django-project')
sys.path.append('/var/www/my.webapp.com/my-django-project/my-django-project')

from django.core.wsgi import get_wsgi_application

os.environ["DJANGO_SETTINGS_MODULE"] = "my-django-project.settings"

application = get_wsgi_application()

【讨论】:

    猜你喜欢
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 2020-11-06
    • 2015-09-15
    • 2013-03-11
    • 1970-01-01
    • 2012-08-24
    相关资源
    最近更新 更多