¿Cómo configurar Gunicorn y NGNIX para un proyecto de Django en un entorno de producción?

Estoy tratando de recrear un ambiente de producción en mi computadora local antes de desplegar el proyecto Django que he construido en un servidor. Estoy usando Gunicorn y NGNIX. Cuando lanzamiento Gunicorn escribiendo gunicorn mydjangoproject.wsgi, Tengo mi proyecto Django mostrado en la dirección http://127.0.0.1:8000, pero sin archivos estáticos. Eso me dice que el error está dentro de NGINX, pero no puedo averiguar dónde.

He seguido esta guía para configurar Gunicorn y NGNIX en mi computadora local. He saltado los pasos 5 a 7 en la guía porque no quiero lidiar con las tomas en mi computadora local.

Aquí están las partes relevantes de mi settings.py archivo de mi proyecto Django:

DEBUG = False

ALLOWED_HOSTS = ['*']

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'production_static/')

MEDIA_ROOT = os.path.join(BASE_DIR,'media')
MEDIA_URL = '/media/'

STATICFILES_DIRS = [
    BASE_DIR / "static",
]

Aquí está el archivo que se encuentra en /etc/nginx/sites-available/mydjangoproject:

server {
    listen 8000;
    server_name 127.0.0.1;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /production_static/ {
        root /home/john/Documents/Django_projects/mydjangoproject/Version_2/mydjangoproject;
    }

    location / {
        include proxy_params;
        proxy_pass http://127.0.0.1:8000;
    }
}

He hecho todos los otros pasos al paso 8 de la guía que enlacé - Corrí sudo ln -s /etc/nginx/sites-available/mydjangoproject /etc/nginx/sites-enabled, sudo nginx -t y sudo systemctl restart nginx después de hacer el archivo de configuración NGINX arriba. También corrí. manage.py collectstatic antes.

¿Puedes decirme qué hice mal? ¿Son válidos los archivos de configuración dada mi configuración del proyecto?

Pregunta hecha hace 3 años, 4 meses, 26 días - Por codecanvas


2 Respuestas:

  • El problema que estás experimentando con la falta de archivos estáticos en tu proyecto Django cuando se sirve a través de Gunicorn y NGINX probablemente esté relacionado con tu configuración de NGINX. Veamos algunas posibles correcciones:

    • En tu archivo de configuración de NGINX, estás apuntando la ubicación de los archivos estáticos a `/production_static/`, sin embargo, en tu configuración de Django, has definido `STATIC_URL = '/static/'` y `STATIC_ROOT = os.path.join(BASE_DIR, 'production_static/')`. Necesitas asegurarte de que estos se alineen en ambos lugares.
    • En tu archivo de configuración de NGINX, la configuración de `location /production_static/ { root ... }` puede estar generando un conflicto con la ubicación que estás utilizando para los archivos estáticos en Django. La configuración correcta podría ser más parecida a esto:
    nginx
    location /static/ {
        alias /home/john/Documents/Django_projects/mydjangoproject/Version_2/mydjangoproject/production_static/;
    }
    
    • Asegúrate de que después de hacer cambios en tu archivo de configuración de NGINX, ejecutes `sudo nginx -t` para verificar si hay errores en la configuración antes de reiniciar NGINX.
    • Asegúrate de que tus archivos estáticos realmente están siendo recopilados en la ubicación correcta ejecutando `manage.py collectstatic` y verificando que se han creado en el directorio `production_static`.

    Si después de hacer estos cambios y verificaciones aún tienes problemas con los archivos estáticos, revisa los logs de NGINX y de Gunicorn para ver si muestran algún error específico que pueda estar causando el problema.

    Respondida el Dec 20, 2020 a las 15:21 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Problemas de configuración:

    Archivos estáticos: Su configuración de NGINX parece estar correcta, pero la ruta raíz está apuntando a la ubicación incorrecta. Debe apuntar a la carpeta production_static que especificó en su archivo settings.py, no a la carpeta raíz del proyecto.

    Archivos de configuración válidos:

    Los archivos de configuración dados son válidos, pero necesitan una modificación para solucionar el problema de los archivos estáticos.

    Archivo settings.py:

    Sus archivos settings.py parecen correctos.

    Archivo NGINX:

    Modifica la línea root en el bloque de ubicación de archivos estáticos de la siguiente manera:

    
    root /home/john/Documents/Django_projects/mydjangoproject/Version_2/mydjangoproject/production_static/;
    

    Pasos para resolver el problema:

    • Guarde los cambios en el archivo NGINX.
    • Reinicie NGINX: `sudo systemctl restart nginx`
    • Reinicie Gunicorn: `gunicorn mydjangoproject.wsgi`
    • Recargue la página en su navegador web.

    Nota:* Asegúrese de que el usuario que ejecuta Gunicorn tenga permisos de lectura en la carpeta production_static.

    Con estos cambios, sus archivos estáticos deberían mostrarse correctamente en la dirección http://127.0.0.1:8000.

    Respondida el Dec 20, 2020 a las 15:31 - por Gemini

    Votos positivos: 0 | Votos negativos: 0