我需要帮助在生产服务器上部署 django 项目,我已经完成了以下过程:
- 我已经配置了 Ubuntu 服务器
- 我已经创建了虚拟环境
- 我已经安装了 django。
- 我运行 ./manage.py runserver domain:port
但是当访问 localhost 时,会显示默认的 apache 页面,并显示消息“It Works”。
我不知道应该将应用程序的文件放在哪里,我想知道我是否遗漏了一些重要的步骤,或者我需要在 Apache 中进行一些额外的配置?
我的配置是:
- 网络服务器: Apache2
- 主办: Stratus
- 蟒蛇: 3.5
- 姜戈: 1.9
编辑:我已经阅读了几次的官方文档之后的一个问题是,WSGIScriptAlias和WSGIPythonPath路由应该指向Apache2 配置中的哪个位置。
WSGIScriptAlias //path/to/mysite.com/mysite/wsgi.py(第一个斜线是什么让我怀疑,我不知道它是否必须指向像这里这样的根或我想要的vhost有网络)。
WSGIPythonPath /path/to/mysite.com(理论上这应该指向我安装python的位置,对吧?)。
编辑:
(最后我跟着apache,因为我无法将服务器迁移到nginx)。
按照示例在 Apache2 中配置 VirtualHost 后:
现在,当我访问 mydomain.com 时,我得到了 403 Forbidden。(这可能是因为什么?因为我必须授予项目文件夹的权限?还是直接有一个错误引用的目录?)
VirtualHost 是否足够,还是我需要启动一个进程让 django 启动?
我们必须将端口 8000 重定向到 80 吗?
编辑:在这里我离开我的虚拟主机
<VirtualHost *:80>
DocumentRoot "/var/www/vhosts/dominio.com/chewbacca.dominio.com"
Alias "/media" "/var/www/vhosts/dominio.com/chewbacca.dominio.com/django-project/chewbacca_project/media"
Alias "/static" "/var/www/vhosts/dominio.com/chewbacca.dominio.com/django-project/chewbacca_project/static"
<Directory /var/www/vhosts/dominio.com/chewbacca.dominio.com/django-project/chewbacca_project/static/>
Order deny,allow
Allow from all
</Directory>
<Directory /var/www/vhosts/dominio.com/chewbacca.dominio.com/django-project/chewbacca_project/media/>
Require all granted
</Directory>
WSGIDaemonProcess chewie python-path=/var/www/vhosts/dominio.com/chewbacca.dominio.com/django-project/:/var/www/vhosts/dominio.com/chewbacca.dominio.com/django-env/lib/python3.5/site-packages
WSGIProcessGroup chewie
WSGIScriptAlias / /var/www/vhosts/dominio.com/chewbacca.dominio.com/django-project/chewbacca_project/chewbacca_project/wsgi.py
WSGIPassAuthorization On
<Directory /var/www/vhosts/dominio.com/chewbacca.dominio.com/django-project/chewbacca_project/chewbacca_project>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
编辑:我认为我遇到的问题之一是服务器与PLESK一起使用,但是,嘿。
Apache 日志给了我以下错误:
- 致命的 Python 错误:PyEval_AcquireThread:NULL 新线程状态
[ssl:warn] [pid 14845] AH01909:为chewbacca.mydomain.com:443 配置的RSA 证书不包含与服务器名称匹配的ID
编辑:最后我能够解决问题,我遇到的问题之一(也是重要的)是我没有创建从 pip3 到 pip 的符号链接(ln -s /usr/bin/pip3 /usr/bin /pip ) 在所有这些都对我有用之后。现在是的!;) 我可以在谷歌上找到 mod_python 和 mod_wsgi 并做到了。
非常感谢!
编辑:最后我设法把项目和一切都很完美,但安装依赖项(DjangoRestFramework,枕头,Psycopg2)之后我立即做了一个服务apache2重新启动和噗......它已经停止工作它再次给出错误500 .我建议之前安装所有依赖项,这样python脚本就不会损坏
编辑:每天疯狂 15 天后,我设法让 WSGI 为我工作,问题是现在我正在对项目进行更改并且它们没有反映在生产部分中,现在如果我制作一个runserver并通过端口 8000 进入,如果它向我展示了真正的项目(以及我所做的更改),有人能告诉我为什么这会发生在我身上吗?把所有这些都不够吗,我还要留下其他东西吗? ?
我没有收到任何导入错误或任何东西,我什至已经完成了./manage.py check --deploy并且它给了我 8 个警告(正常),我错过了什么?我做错了什么?我还做了一个./manage.py 测试项目,它显示没有错误。
关于你的疑惑:
WSGIScriptAlias:它必须指向相对于您的虚拟主机的绝对路径,即
/
. 如果你放/miruta
,你的网址将是,例如,midominio.com/miruta/
WSGIPythonPath:它必须指向您安装 python 的位置,当然,指向您的虚拟环境,例如:
/var/www/[PATH_AL_PROYECTO]/venv/local/bin/python2.7
您的 apache 的可能配置可能是这样的:
为了更好地理解您必须替换的内容,我们假设以下内容:
您的项目有以下路线:
这样,前面的 Apache 示例将如下所示:
无论如何,如果我们用 Django 谈论生产部署,最首选的部署是Django + Gunicorn + Supervisor + Nginx。
我还建议,如果您想进行持续部署项目,请查看诸如fabric之类的库