0

I have a two machines. First machine runs several docker containers (django(uwsgi), db and nginx). Second server runs also several docker containers ( django(dahpne), redis, db ).

On first machine nginx serves static files from Django(uwsgi) everything work correctly.

I'm trying to configure nginx to serve static files also from the second server. Without success. Please help me I'm out of ideas.

I tried many things and my current configuration looks like:

nginx (on first machine)

map $http_upgrade $connection_upgrade {
        default upgrade;
        '' close;
    }

...

server {
    listen      443 ssl;
    server_name ${DOMAIN} www.${DOMAIN};

access_log  /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;

ssl_certificate     /etc/letsencrypt/live/${DOMAIN}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/${DOMAIN}/privkey.pem;

include     /etc/nginx/options-ssl-nginx.conf;

ssl_dhparam /vol/proxy/ssl-dhparams.pem;

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

location /static {
    alias /vol/static;     
}

location / {
    uwsgi_pass              ${P1_HOST}:${P1_PORT};
    include                 /etc/nginx/uwsgi_params;
    client_max_body_size    10M;
}

location /dashboard {
    proxy_pass http://dashboardproject;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_set_header Host $host;

    #proxy_redirect off;        
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $server_name;

    location /dashboard/d2/static {
        alias /vol/web/static/dashboard/;
        #try_files $uri $uri/ =404;
    }
}

} Proxy docker compose

...
  proxy:
    build:
      context: ./proxy

    ...

    volumes:
      - certbot-web:/vol/www
      - proxy-dhparams:/vol/proxy
      - certbot-certs:/etc/letsencrypt
      - static-data:/vol/static
    networks:
      - p_internal_network

volumes:
  certbot-web:
  proxy-dhparams:
  certbot-certs:
  postgres-data:
  static-data:
...

And the configuration of docker compose on second server

version: "3.9"

services:
  dashboard:
    build:
      context: ./dashboard
    restart: always
    networks:
      - d2_internal_network
    volumes:
      - static-data:/vol/web/static/dashboard
    environment:
      - DASHBOARD_SECRET_KEY=${DASHBOARD_SECRET_KEY}
      - DASHBOARD_ALLOWED_HOSTS=${DOMAIN},www.${DOMAIN}
      - DASHBOARD_CSRF_TRUSTED_ORIGINS=https://${DOMAIN},https://www.${DOMAIN}
      - DB_HOST=db
      - DB_PORT=${DB_PORT}
      - DB_NAME=${DB_NAME}
      - DB_USER=${DB_USER}
      - DB_PASS=${DB_PASS}
      - REDIS_URL=redis
    ports:
      - "9800:9200"
    depends_on:
      - db
      - redis
      
  ...

networks:
  d2_internal_network:

volumes:
postgres-data: static-data:

And relevant Django settings.py lines:

STATIC_URL = '/dashboard/d2/static/'
MEDIA_URL = 'dashboard/d2/static/media/'

MEDIA_ROOT='/vol/web/media'
STATIC_ROOT='/vol/web/static/dashboard/'

PROTECTED_ROOT='/vol/web/protected'

STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)

If something important is missing I'd be glad to add it.

Michal P.
  • 53
  • 7
  • looks like similar to this one https://stackoverflow.com/questions/76395528/django-does-not-serve-static-files-for-ckeditor-in-docker-container#comment134712515_76395528 – Ivan Starostin Jul 04 '23 at 18:12

0 Answers0