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ó.