Django,Gunicorn 设置
Django, Gunicorn Setup
我正在尝试在我的服务器上设置一个 django 项目,但无法将其传送到 运行。我正在为静态文件使用 virtualenv、gunicorn 和 nginx。我不确定我是不是错了。我目前的设置如下:
myenv
- project(my django project)
- bin(and all it contains)
- lib(and all it contains)
- include(and all it contains)
- gunicorn_config.py
gunicorn_config.py:
command = '/home/me/django/myenv/bin/gunicorn'
pythonpath = '/home/me/django/myenv/project'
bind = '127.0.0.1:80'
workers = 2
nginx project.conf:
upstream project_server {
server unix:/tmp/gunicorn_project.sock fail_timeout=0;
}
server {
listen 80;
client_max_body_size 4G;
# set the correct host(s) for your site
server_name project.com www.project.com;
keepalive_timeout 5;
# path for static files
root /home/me/django/myenv/assets;
location / {
# checks for static file, if not found proxy to app
try_files $uri @proxy_to_app;
}
location @proxy_to_app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://project_server;
}
error_page 500 502 503 504 /500.html;
location = /500.html {
root /home/me/django/myenv/project/project/templates;
}
}
并且我运行以下尝试启动它:
/home/me/django/myenv/bin/gunicorn -c /home/me/django/myenv/gunicorn_config.py project/project/wsgi.py
但它只是说 "Can't connect to ('127.0.0.1', 80)"
基本上,我猜 nginx 在 gunicorn 之前启动。它占用端口 80(来自您的 listen)。接下来是 gunicorn,也需要端口 80(来自您的 bind),并发现它已被占用,因此出错。 运行 不同端口上的 gunicorn 并使用 proxy_pass 告诉 nginx。
独角兽
bind = '127.0.0.1:8000'
Nginx
proxy_pass http://127.0.0.1:8000/;
您已将 gunicorn 配置为绑定到 TCP 端口,但 gunicorn 绑定到 unix 套接字。你应该使用同样的东西;最好是套接字,这样它就不会与 nginx 实际监听的端口冲突。
在gunicorn_config.py中:
bind = 'unix:/tmp/gunicorn_project.sock'
我正在尝试在我的服务器上设置一个 django 项目,但无法将其传送到 运行。我正在为静态文件使用 virtualenv、gunicorn 和 nginx。我不确定我是不是错了。我目前的设置如下:
myenv
- project(my django project)
- bin(and all it contains)
- lib(and all it contains)
- include(and all it contains)
- gunicorn_config.py
gunicorn_config.py:
command = '/home/me/django/myenv/bin/gunicorn'
pythonpath = '/home/me/django/myenv/project'
bind = '127.0.0.1:80'
workers = 2
nginx project.conf:
upstream project_server {
server unix:/tmp/gunicorn_project.sock fail_timeout=0;
}
server {
listen 80;
client_max_body_size 4G;
# set the correct host(s) for your site
server_name project.com www.project.com;
keepalive_timeout 5;
# path for static files
root /home/me/django/myenv/assets;
location / {
# checks for static file, if not found proxy to app
try_files $uri @proxy_to_app;
}
location @proxy_to_app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://project_server;
}
error_page 500 502 503 504 /500.html;
location = /500.html {
root /home/me/django/myenv/project/project/templates;
}
}
并且我运行以下尝试启动它:
/home/me/django/myenv/bin/gunicorn -c /home/me/django/myenv/gunicorn_config.py project/project/wsgi.py
但它只是说 "Can't connect to ('127.0.0.1', 80)"
基本上,我猜 nginx 在 gunicorn 之前启动。它占用端口 80(来自您的 listen)。接下来是 gunicorn,也需要端口 80(来自您的 bind),并发现它已被占用,因此出错。 运行 不同端口上的 gunicorn 并使用 proxy_pass 告诉 nginx。
独角兽
bind = '127.0.0.1:8000'
Nginx
proxy_pass http://127.0.0.1:8000/;
您已将 gunicorn 配置为绑定到 TCP 端口,但 gunicorn 绑定到 unix 套接字。你应该使用同样的东西;最好是套接字,这样它就不会与 nginx 实际监听的端口冲突。
在gunicorn_config.py中:
bind = 'unix:/tmp/gunicorn_project.sock'