Debugging Gunicorn + Nginx + Django

2

Estou tentando implantar uma instância readthedocs em meu próprio servidor. A maneira recomendada de implantar é usar Gunicorn + nginx com postgres. Porque basicamente não há documentação sobre como fazer isso (exceto em seus fabfiles que, é claro, só funciona em seu servidor), eu tenho tentado configurar meu próprio servidor manualmente.

Aqui está o meu nginx.conf :

server {
    listen 80 default;
    server_name mysite.com;
    access_log /var/log/nginx/mysite.access.log;
    error_log /var/log/nginx/mysite.error.log;

    location /favicon.ico {
        root /home/mysite/Code/checkout/readthedocs.org/media/images;
        break;
    }

    location robots.txt {
        root /home/mysite/Code/checkout/readthedocs.org/media;
        break;
    }

    location /static/ {
        alias /home/mysite/Code/checkout/readthedocs.org/media/;
        expires 30d;
        break;
    }

    location /media/ {
        alias /home/mysite/Code/checkout/readthedocs.org/media/;
        expires 30d;
        break;
    }

    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_connect_timeout 10;
        proxy_read_timeout 10;
        proxy_pass http://127.0.0.1:8888;
    }
}

O settings.py para configuração do django pode ser encontrado aqui . A única coisa que eu mudei em settings.py é que eu adiciono gunicorn on INSTALLED_APPS para que eu possa executar o gunicorn com ele.

O comando que eu uso para executar o servidor gunicorn é:

./manage.py run_gunicorn -b 127.0.0.1:8888

Então, se eu tentar acessar o 127.0.0.1 de um navegador local, ele funcionará, mas sempre mostrarei uma página 404, independentemente do URL inserido. A execução de ./manage.py runserver executará tudo corretamente.

Agora eu não sou um administrador de sistemas, e tenho basicamente 0 experiência com django, gunicorn ou nginx antes. Eu estive pesquisando e brincando com a configuração por semanas, com 0 resultado. Minha pergunta é:

  1. Como eu sei qual rota do django é chamada por gunicorn? Posso depurar isso? Todos os arquivos de log que eu posso encontrar não mostram isso.
  2. Você vê algo errado com o meu arquivo de configuração? Se sim, poderia me dizer o que está errado?

Muito obrigado.

    
por bertzzie 29.03.2013 / 04:16

1 resposta

0

Já tentou carregar o site na porta 8888 para garantir que está sendo executado corretamente?

A mensagem 404 que você está recebendo tem nginx no texto? Isso indicaria que o nginx está tendo o problema de encontrar o recurso e não o serviço na porta 8888. Nesse caso, você pode solucionar seu arquivo de configuração.

Você está registrando o acesso no nginx, assim você pode olhar para o seu log para mais algumas informações. tail -n 10 /var/log/nginx/mysite.access.log permitirá que você veja as últimas 10 linhas desse registro.

Por padrão, o nginx usa o formato de log combinado :

log_format combined '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';

Isso deve ajudá-lo a descobrir o que cada coluna no seu arquivo de log significa.

    
por 01.04.2013 / 10:00