Tengo una configuración con nginx y django (llamado contenedor de python).
Puedo acceder a la página principal con localhost:8000 , sin embargo, no puedo obtener el archivo estático ni usar API localhost:8000/api/items
Soy newbee para nginx y django, por lo que todavía es confuso.
Estoy planeando el escenario como este belo
browser ->8000 -> nginx -> 8001 ->django
para archivo estático
django ->8000 -> nginx
es correcto??? o donde debo arreglar??
Estos son los ajustes a continuación.
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;Los archivos estáticos se generan en el comando de administración de django, collectstatic .
Si se ejecuta en un contenedor de django, estos archivos se generarán y estarán presentes solo en el contenedor de django. Por lo tanto, STATIC_ROOT debe compartirse con nginx, es decir, un volumen docker común montado tanto en el contenedor django STATIC_ROOT como en la ruta de archivos estáticos del contenedor nginx.
Este comando se puede usar como parte del entrypoint de punto de entrada del contenedor django para que se ejecute automáticamente en cada inicio.
python: volumes: - static-volume:/app/static nginx: volumes: - static-volume:/static volumes: static-volume: O los archivos estáticos se pueden generar y proporcionar a nginx /static de otra manera, es decir, como un artefacto durante la compilación/implementación de ci.
O puede usar whitenoise y hacer que django sirva sus archivos estáticos (pero no los archivos multimedia).
Además, los archivos se pueden almacenar (y distribuir) en la nube como Amazon S3.