404 عند تقديم ملفات ثابتة مع عامل الميناء + إنجن إكس + جانغو/أنغولارجس

أنا أتابع التكوين المعطى في هذا مستودع. قررت الاحتفاظ بتكوين عامل الإرساء والرمز الفعلي في مستودعات منفصلة-سأقوم باستنساخ رمز الريبو باستخدام ملف الإرساء. أنا باستخدام عامل الميناء آلة (محليا ، وذلك باستخدام برنامج تشغيل فيرتثلبوإكس) والإعداد عامل الميناء يؤلف.

بنية الدليل رمز الريبو هو تقريبا على النحو التالي -:

|-- bower.json|-- CONTRIBUTORS|-- defsec|   |-- defsec|   |   |-- aws_settings.py|   |   |-- heroku_settings.py|   |   |-- __init__.py|   |   |-- settings.py|   |   |-- urls.py|   |   |-- views.py|   |   `-- wsgi.py|   |-- manage.py|   |-- quiz_restful|   |   |-- __init__.py|   |   |-- permissions.py|   |   |-- serializers.py|   |   |-- services.py|   |   |-- tests.py|   |   `-- views.py|   `-- users|       |-- __init__.py|       |-- models.py|       |-- permissions.py|       |-- serializers.py|       `-- views.py|-- extras|-- gulpfile.js|-- package.json|-- Procfile|-- README.md|-- requirements.txt|-- scripts|   `-- postInstall.sh|-- static|   |-- javascripts|   |   |-- app.js|   |   |-- controllers|   |   |   `-- controllers.js|   |   |-- directives|   |   |   `-- directives.js|   |   `-- services|   |       `-- services.js|   |-- partials|   |   |-- eval.html|   |   |-- exam.html|   |   |-- exam-partials|   |   |   |-- exam-view.html|   |   |   `-- sidebar.html|   |   |-- login.html|   |   `-- register.html|   `-- stylesheets|       `-- styles.css|-- templates|   |-- index.html|   |-- javascripts.html|   |-- navbar.html|   `-- stylesheets.html

ال docker-compose.yml الملف هو نفسه تقريبا كما ان من مستودع أنا المذكورة أعلاه، مع اختلاف بسيط أنني شنت django على حجم .:/root - والتي بدونها [8] System error: no file or directory تم طرح الخطأ. ربما كان هذا بسبب /usr/src/app غير موجود قبل الاستنساخ (كمرجع, هذا هو الملف الأصلي). دوكيرفيل (ل django الخدمة) لديه ما يلي -:

FROM ubuntu:14.04ENV DJANGO_CONFIGURATION Docker# First, we need to get git, and clone our repository# Additionally, get everything else here too, such as nodejs and npmRUN apt-get updateRUN apt-get install -y ca-certificates git-core ssh nodejs npm python-pip libpq-dev python-devRUN ln -s /usr/bin/nodejs /usr/bin/nodeENV HOME /root# Add custom ssh keypair - usually Bitbucket deployment keysADD ssh/ /root/.ssh/# Fix permissionsRUN chmod 600 /root/.ssh/*# Avoid first connection host confirmationRUN ssh-keyscan bitbucket.org > /root/.ssh/known_hosts# Clone the repoWORKDIR /usr/src/appRUN git clone git@bitbucket.org:username/defsec-exam-app.git# Install requirementsWORKDIR /usr/src/app/defsec-exam-appRUN pip install -r requirements.txtRUN npm install -g bowerRUN bower --allow-root install# Remember to perform migrations on your own, and also create DB when needed.# S3 Storage...# DB Settings...WORKDIR /usr/src/app/defsec-exam-app/defsecCMD ["gunicorn", "defsec.wsgi", "-w", "2", "-b", "0.0.0.0:8000", "--log-level", "-"]

وأخيرا ، فإن nginx.conf لخدمة الملفات الثابتة على النحو التالي -:

worker_processes 1;events {    worker_connections 1024;}http {    server {        listen 80;        server_name example.org;        access_log /dev/stdout;        error_log /dev/stdout info;        location /static/ {            alias /usr/src/app/defsec-exam-app/static;        }        location /static/javascripts/ {          default_type text/javascript;          alias /usr/src/app/defsec-exam-app/static/javascripts/;        }        location /static/stylesheets/ {          default_type text/css;          alias /usr/src/app/defsec-exam-app/static/stylesheets/;        }    location /static/bower_components/ {      alias /usr/src/app/defsec-exam-app/static/bower_components/;    }        location / {            proxy_pass http://django:8000;            proxy_set_header   Host $host;            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;        }    }}

ومع ذلك ، لا أستطيع الحصول على إنجن إكس لخدمة الملفات الثابتة على الإطلاق - كل منهم يعود 404. تساءلت عما إذا كان الربط بين nginx و django خدمات الحاويات (كما هو محدد في docker-compose.yml) كان غير صحيح ، ولكن لا يبدو مثل ذلك. أنا أيضا تفقد /etc/hosts الملف في nginx حاوية ، لربط يخلق إدخالات ملف المضيف.

172.17.0.136    151ca02e891a127.0.0.1   localhost::1 localhost ip6-localhost ip6-loopbackfe00::0 ip6-localnetff00::0 ip6-mcastprefixff02::1 ip6-allnodesff02::2 ip6-allrouters172.17.0.134    defsecdocker_django_1 eb900ed9600c172.17.0.135    defsecdocker_nginx_1 eec99206076a172.17.0.134    django eb900ed9600c defsecdocker_django_1172.17.0.134    django_1 eb900ed9600c defsecdocker_django_1172.17.0.135    nginx eec99206076a defsecdocker_nginx_1172.17.0.135    nginx_1 eec99206076a defsecdocker_nginx_1172.17.0.116    defsecdocker_postgres_1172.17.0.134    defsecdocker_django_1172.17.0.135    defsecdocker_nginx_1.bridge172.17.0.136    defsecdocker_nginx_run_10.bridge172.17.0.135    defsecdocker_nginx_1172.17.0.136    defsecdocker_nginx_run_10172.17.0.116    defsecdocker_postgres_1.bridge172.17.0.134    defsecdocker_django_1.bridge

لست متأكدا مما إذا كان هذا صحيحا ، حيث لا يوجد سوى 3 حاويات ولكن هناك الكثير من الإدخالات في ملف المضيفين ، وبعضها مكرر. هذا سلوك قابل للتكرار-أحصل على هذا الملف الدقيق في كل مرة أقوم فيها ببناء الحاوية وتشغيلها باستخدام عامل الإرساء. عامل الميناء-يؤلف سجلات ل nginx تأكيد 404.

أي مؤشرات سيكون موضع تقدير كبير.

يبدو أن تكوين عامل الإرساء لم يكن صحيحا. السبب في رمي إنجن إكس تلك 404 كان لأنه لم يكن لديه الوصول إلى /usr/src/app/defsec-exam-app/static.

هنا هو تكوين عامل الميناء الصحيح -:

# Nginxnginx:    build: ./nginx    volumes_from:        - django    links:        - django    ports:        - "80:80"# This defines a service for the Django app# Will include the Angular frontenddjango:    build: .    volumes:        - .:/root        - /usr/src/app    expose:        - "8000"    links:        - postgres# This defines a service for the Postgres databasepostgres:    image: postgres:latest

volumes_from يحصل على وحدات التخزين من خدمة جانغو. ولقد كشفت usr/src/app كمجلد. هذا يبدو أن تفعل خدعة. أنا منفتح على الاقتراحات ، إن وجدت!

بالإضافة إلى ذلك ، هنا هو التكوين إنجن إكس الجديد -:

worker_processes 1;events {    worker_connections 1024;}http {    server {        listen 80;        server_name example.org;        access_log /dev/stdout;        error_log /dev/stdout info;        location /static/ {            alias /usr/src/app/defsec-exam-app/static;        }        location /static/javascripts/ {          default_type text/javascript;          alias /usr/src/app/defsec-exam-app/static/javascripts/;        }        location /static/stylesheets/ {          default_type text/css;          alias /usr/src/app/defsec-exam-app/static/stylesheets/;        }    location /static/bower_components/ {      types {        text/css css;        text/javascript js;      }      alias /usr/src/app/defsec-exam-app/static/bower_components/;    }    location /static/partials/ {      types {        text/html html;      }      alias /usr/src/app/defsec-exam-app/static/partials/;    }    location /static/admin/ {          alias /usr/src/app/defsec-exam-app/static/admin/;    }    location /static/admin/css {      default_type text/css;      alias /usr/src/app/defsec-exam-app/static/admin/css;    }    location /static/admin/js {      default_type text/javascript;      alias /usr/src/app/defsec-exam-app/static/admin/js;    }    location /static/admin/img {      types {        image/png png;        image/jpeg jpg;      }      alias /usr/src/app/defsec-exam-app/static/admin/img;    }        location / {            proxy_pass http://django:8000;            proxy_set_header   Host $host;            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;        }    }}

ملاحظة: اضطررت إلى إضافة جانغو المشرف كس/جس/إمغ إلى مستودع عامل الميناء/النشر بشكل منفصل ، بحيث يعمل جانغو المشرف بشكل صحيح. (أمر إضافة بسيط في دوكيرفيل جانغو يفعل خدعة)