Reputation: 12423
I have setting with nginx
and django
(named python container).
I can access see the top page with localhost:8000
, however I cannot fetch the static file nor use API localhost:8000/api/items
I am newbee for nginx and django so still confusing.
I am planning the setting like this belo
normal files
browser ->8000 -> nginx -> 8001 ->django
for static file
django ->8000 -> nginx
am it correct???or where should I fix??
These are settings below.
docker-composer.yml
version: '3'
services:
python:
container_name: python
build: ./python
command: uwsgi --socket :8001 --module myapp.wsgi --py-autoreload 1 --logto /tmp/mylog.log
expose:
- "8001"
nginx:
image: nginx:1.13
container_name: nginx
ports:
- "8000:8000"
volumes:
- ./nginx/conf:/etc/nginx/conf.d
- ./nginx/uwsgi_params:/etc/nginx/uwsgi_params
- ./nginx/static:/static
depends_on:
- python
app_nginx.conf
upstream django {
ip_hash;
server python:8001;
}
server {
listen 8000;
server_name 127.0.0.1;
charset utf-8;
location /static {
alias /static;
}
location / {
uwsgi_pass django;
include /etc/nginx/uwsgi_params;
}
}
server_tokens off;
uwsgi_prams
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
Upvotes: 1
Views: 204
Reputation: 4404
Static files are generated on django management command collectstatic
.
If run in django container - these files will be generated and present only in django container. So, STATIC_ROOT
should be shared with nginx - i.e. one common docker volume mounted both to django container STATIC_ROOT
and to nginx container static files path.
This command may be used as part of entrypoint
script of django container to be auto-run on every start.
python:
volumes:
- static-volume:/app/static
nginx:
volumes:
- static-volume:/static
volumes:
static-volume:
Or static files can be generated and provided to nginx /static
in other way, i.e. as an artifact during ci build / deploy.
Or you can use whitenoise and make django serve its static files (but not media files).
Also, files can be stored (and distributed by) in cloud like Amazon S3.
Upvotes: 1