Estou seguindo a configuração dada em presente repositorio. Decidi manter minha configuração do docker e Código real em repositórios separados-clonaria o repositório de código usando o Dockerfile. Estou usando uma docker-machine (localmente, usando o driver Virtualbox) e a configuração docker-compose.
A estrutura de diretório do repositório de código é aproximadamente a seguinte -:
|-- 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
O docker-compose.yml
o arquivo é quase o mesmo do repositório que listei acima, com a pequena diferença que montei django
em volume .:/root
- sem a qual a [8] System error: no file or directory
o erro estava sendo lançado. Isso provavelmente foi porque /usr/src/app
não existe antes da clonagem (para referência, presente é o arquivo original). O Dockerfile (para o django
serviço) tem o seguinte -:
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", "-"]
E finalmente, o nginx.conf
para servir os arquivos estáticos é o seguinte -:
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; } }}
No entanto, não consigo fazer o nginx servir os arquivos estáticos - todos eles retornam um 404. Eu me perguntei se a ligação entre o nginx
e django
serviços de contêiner (conforme definido em docker-compose.yml
) estava incorreto, mas não parece. Eu também inspecionei o /etc/hosts
arquivo no nginx
container, para vincular cria entradas hostfile.
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
Não tenho certeza se isso está certo, pois existem apenas 3 contêineres, mas muitas entradas no arquivo hosts, algumas das quais são duplicatas. Este é um comportamento reproduzível - recebo esse arquivo exato cada vez que construo e executo o contêiner usando docker-compose. O docker-compor logs para nginx
confirme os 404s.
Quaisquer ponteiros seriam muito apreciados.