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.