【发布时间】:2012-11-20 19:07:21
【问题描述】:
我在 Dotcloud 上部署了我的 Django 应用。
我将 websockets 与 Gevent 和 django-socketio 一起使用,所以我使用了自定义服务。目前,我仍在使用“runserver_socketio”来使其正常工作。
现在,我想使用 Nginx 来提供我的静态文件。我发现了这个:https://github.com/dotcloud/nginx-on-dotcloud
我尝试使用它。这是我的 dotcloud.yml:
www:
type: custom
buildscript: nginx/builder
processes:
app: /home/dotcloud/env/bin/python myproject/manage.py runserver_socketio 0.0.0.0:$PORT_WWW
nginx: nginx
ports:
www: http
systempackages:
- libevent-dev
- python-psycopg2
- libpcre3-dev
db:
type: postgresql
我在我的应用程序的根目录中添加了文件夹“nginx”。
我还在安装后的末尾添加了:
nginx_config_template="/home/dotcloud/current/nginx/nginx.conf.in"
if [ -e "$nginx_config_template" ]; then
sed > $HOME/nginx/conf/nginx.conf < $nginx_config_template \
-e "s/@PORT_WWW@/${PORT_WWW:-42800}/g"
else
echo "($nginx_config_template) isn't there!!! Make sure it is in the correct location or else nginx won't be setup correctly."
fi
但是当我去我的应用程序时,在我推送它之后,我得到了错误:
403 Forbidden, nginx/1.0.14
Nginx 确实提供错误页面 404。
所以我不知道为什么,但我无法再访问我的应用了。您知道如何使用 Nginx 设置我的应用程序吗?
非常感谢
【问题讨论】:
-
你想把你的应用放在 nginx 后面还是前面? - 如果你把你的应用程序放在 nginx 后面,你将无法再使用 websockets。 - 如果你把你的应用程序放在 nginx 前面,我不确定你会从 nginx 中获得什么。所以我试图理解这背后的基本原理!
-
你的 dotcloud 应用程序或 django 应用程序的根目录下是 nginx 文件夹吗?
nginx: nginx让我相信 nginx 进程会在 nginx 用户下运行。 nginx用户是否有权限读取nginx文件夹下的文件? -
@jpetazzo 我不想使用 nginx 来提供我的静态文件,并将我的应用程序放在 nginx 前面。我仍在使用 runserver_socketio 运行我的应用程序,所以我不能将我的 DEBUG 模式设置为 False,因为 Django 将停止为我的静态文件提供服务。所以我需要使用服务器来做到这一点。我是编程新手,所以我不知道最好的方法是什么。我会接受你能给我的任何建议!谢谢你的回答。
-
@jpetazzo 最后,我想做的是使用 nginx 提供我的静态文件并使用 Gunicorn 而不是 'runserver_socketio'
-
如果您只想提供静态文件,那么您可以使用 nginx 服务来执行此操作。这是一项单独的服务,但很容易设置。将两种服务混合在一起会更干净。另一种选择是从 CDN 提供静态文件