Estoy siguiendo la configuración dada en este repositorio. Decidí mantener mi configuración de docker y el código real en repositorios separados : clonaría el repositorio de código usando Dockerfile. Estoy usando una máquina acoplable (localmente, usando el controlador Virtualbox) y la configuración de docker-compose.
La estructura de directorios del repositorio de código es aproximadamente la siguiente -:
|-- 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
El docker-compose.yml
el archivo es casi el mismo que el del repositorio que enumeré anteriormente, con la pequeña diferencia de que monté django
en volumen .:/root
- sin la cual un [8] System error: no file or directory
se estaba produciendo un error. Esto fue probablemente porque /usr/src/app
no existe antes de la clonación (para referencia, este es el archivo original). El Dockerfile (para el django
servicio) tiene lo siguiente -:
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", "-"]
Y por último, el nginx.conf
para servir los archivos estáticos es como sigue -:
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; } }}
Sin embargo, no puedo hacer que nginx sirva los archivos estáticos , todos devuelven un 404. Me preguntaba si el vínculo entre el nginx
y django
servicios de contenedores (según se define en docker-compose.yml
) era incorrecto, pero no lo parece. También inspeccioné el /etc/hosts
archivo en el nginx
contenedor, para vincular crea entradas de archivo host.
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
No estoy seguro de si esto es correcto, ya que solo hay 3 contenedores pero muchas entradas en el archivo hosts, algunas de las cuales están duplicadas. Este es un comportamiento reproducible : obtengo este archivo exacto cada vez que construyo y ejecuto el contenedor usando docker-compose. Los registros de docker-compose para nginx
confirme los 404.
Cualquier sugerencia sería muy apreciada.