关于python:在RedHat上部署Django项目

Deploy Django project on RedHat

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

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

我还编辑了httpd.conf文件:

1
2
3
4
5
6
7
8
9
10
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:

1
2
3
4
WSGISocketPrefix /var/run/wsgi

NameVirtualHost *:448
Listen 448

1
2
3
4
5
6
7
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


这是我在CentOS 6.8和Apache 2.2上运行的Apache配置示例。我将其命名为yourproject.conf并将其包含在/etc/httpd/conf.d中,因此它被主Apache配置文件包含:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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

1
2
3
4
5
6
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错误写入主目录。祝你好运!


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<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

1
LoadModule wsgi_module modules/mod_wsgi.so

然后是wsgi.py:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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()