Я следую конфигурации, приведенной в этот хранилище. Я решил сохранить свою конфигурацию docker и фактический код в отдельных репозиториях - я бы клонировал репозиторий кода, используя Dockerfile. Я использую docker-machine (локально, используя драйвер Virtualbox) и docker-compose setup.
Структура каталогов репозитория кода примерно выглядит следующим образом -:
|-- 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
не существует до клонирования (для справки, этот является исходным файлом). Файл Dockerfile (для 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; } }}
Однако я не могу заставить nginx вообще обслуживать статические файлы - все они возвращают 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
Я не уверен, правильно ли это, так как в файле hosts всего 3 контейнера, но чертовски много записей, некоторые из которых являются дубликатами. Это воспроизводимое поведение - я получаю именно этот файл каждый раз, когда создаю и запускаю контейнер с помощью docker-compose. Docker-составлять журналы для nginx
подтвердите 404-е число.
Любые указания были бы очень признательны.