Django在Ubuntu 16.04中部署到Production

时间:2018-03-27 11:21:35

标签: django apache2 virtualenv python-3.5 mod-wsgi

我是django的新手,我必须在ubuntu 16.04中将项目部署到生产模式。我已经用apache2安装了wsgi,并包含了django项目和python site-packages的系统路径。

我的网站启用/ 000-default.config是

 <VirtualHost *:80>

        ServerAdmin webmaster@localhost
        ServerName myproject.com
        ServerAlias www.myproject.com

         Alias /static /var/www/html/TEST/myproject/static
         <Directory /var/www/html/TEST/myproject/static>
                Require all granted
         </Directory>

        <Directory /var/www/html/TEST/myproject/myproject>
                <Files wsgi.py>
                    Require all granted
                 </Files>
        </Directory>

      WSGIDaemonProcess myproject python-home=/var/www/html/TEST/newenv python-path=/var/www/html/TEST/myproject:/var/www/html/TEST/newenv/lib/python3.5/site-packages
        WSGIProcessGroup myproject
        WSGIScriptAlias / /var/www/html/TEST/myproject/myproject/wsgi.py


        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

和我的wsgi文件

import os , sys

sys.path.append('/var/www/html/TEST/myproject/')

sys.path.append('/var/www/html/TEST/newenv/lib/python3.5/dist-packages/')

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')

from django.core.wsgi import get_wsgi_application

application = get_wsgi_application()

当我运行链接时,我收到内部服务器错误(505)

我已经检查了错误日志中的错误,它显示了我

  

django.core.wsgi导入get_wsgi_application   [wsgi:error] ImportError:没有名为django.core.wsgi的模块

有人可以帮我这个吗?我用Google搜索并检查了所有其他选项和解决方案。提前致谢

1 个答案:

答案 0 :(得分:0)

而不是:

    WSGIDaemonProcess myproject python-home=/var/www/html/TEST/newenv \
      python-path=/var/www/html/TEST/myproject:/var/www/html/TEST/newenv/lib/python3.5/site-packages
    WSGIProcessGroup myproject
    WSGIScriptAlias / /var/www/html/TEST/myproject/myproject/wsgi.py

你需要的只是:

    WSGIDaemonProcess myproject python-home=/var/www/html/TEST/newenv \
      python-path=/var/www/html/TEST/myproject
    WSGIProcessGroup myproject
    WSGIScriptAlias / /var/www/html/TEST/myproject/myproject/wsgi.py

您不需要添加site-packages目录。

在您不需要的wsgi.py文件中:

sys.path.append('/var/www/html/TEST/myproject/')
sys.path.append('/var/www/html/TEST/newenv/lib/python3.5/dist-packages/')

python-homepython-path WSGIDaemonProcess的结果相同。

另一个问题是您已将Django项目代码放在目录/var/www/html下。你不应该把它放在那里。这是默认的DocumentRoot目录。如果您要取消注释WSGIScriptAlias,有人可以下载您的源代码。因此最好不要将代码放在该目录下。

现在,就解决问题而言,这些事情都不应该有所作为,因为第一个只是获得冗余设置。第二个是改变更好的做法。

此时,唯一的原因可以看出为什么找不到Django模块的原因是目录/文件的权限是否使得Apache运行代码的用户无法读取它们。因此,请检查/var/www/html/TEST/newenv上的权限。