Saltar al contenido

docker, nginx, django y cómo servir static archivos

Hola, tenemos la respuesta a lo que buscas, has scroll y la encontrarás un poco más abajo.

Solución:

Con referencia a servir static archivos, sus opciones dependen de la funcionalidad de su aplicación. Hay una herramienta muy ingeniosa llamada dj-static que te ayudará a servir static archivos agregando un código mínimo.

La documentación es bastante simple y todo lo que tiene que hacer es seguir estos pasos.

Encontré esta respuesta de Michael Hampton: “Esto solo funciona si los procesos están en el mismo host, VM o contenedor, porque intenta establecer una conexión con la misma máquina. Cuando están en diferentes contenedores, no funciona.

Debe modificar su configuración de nginx para que use la dirección IP interna del contenedor uwsgi”. Enlace de la publicación

Y definitivamente es algo que debe tener en cuenta si tendrá Nginx en un contenedor diferente, también debe configurar nginx.conf, señalando su directorio de archivos estáticos como alias para evitar un problema de seguridad.

Espero que este código funcione para todos, me tomó un par de nuestros averiguar cómo componer Gunicorn, docker y Nginx:

# nginx.conf
  upstream djangoA 
       server $DOCKER_CONTAINER_SERVICE:9000 max_fails=3 fail_timeout=0;
       # In my case looks like: web:9000
  
Server 
    include mime.types;
    # The port your site will be served on      
    listen 80;
    # the domain name it will serve for
    server_name $YOUR_SERVER_NAME;# substitute your machine's IP address or FQDN
    charset utf-8;
    #Max upload size
    client_max_body_size 512M;   # adjust to taste
    location /site_media 
       alias $DIRECTORY_STATIC_FILES/site_media;#your Django project's media   files have to be inside of the container have nginxs, you can copy them with volumes.
    expires 30d;
    

    location / 
      try_files $uri @proxy_to_app;
    

   # Finally, send all non-media requests to the Django server.
   location @proxy_to_app 
     proxy_set_header X-Real-IP $remote_addr;
     proxy_redirect off;
     proxy_set_header Host $host;
     proxy_pass http://djangoA;
   

Y para el docker-compose:

#production.yml
version: '2'

services:
  db:
    extends:
      file: base.yml
      service: db

  nginx:
    image: nginx:latest
  volumes:
      - ./nginx:/etc/nginx/conf.d/
      - ./$STATIC_FILE_ROOT/site_media:/$STATIC_FILE_ROOT/site_media
  ports:
      - "80:80"
    depends_on:
      - web


  web:
    extends:
      file: base.yml
      service: web
    build:
      args:
        - DJANGO_ENV=production
    command: bash -c "python manage.py collectstatic --noinput && chmod 775 -R project/site_media/static && gunicorn project.wsgi:application"
    volumes:
      - ./$DIRECTORY_APP:/$DIRECTORY_APP
    ports:
      - "9000:9000"
    depends_on:
      - db

volumes:
  db_data:
    external: true

Recuerda algo, que puedes permitirte añadir un criterio acertado si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *