Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
| Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
|
ceti_mp03 [2022/07/08 12:07] antonio_duenas [Pàgines en aquesta wiki] |
ceti_mp03 [2022/10/14 08:14] (actual) enrique_mieza_sanchez |
||
|---|---|---|---|
| Línia 5: | Línia 5: | ||
| - | ====== Dockeritzant una aplicació Java ====== | ||
| - | En aquest article " | ||
| - | Cal haver seguit el [[Django|tutorial inicial Django]] o, com a mínim disposar d'un projecte Django amb el complement django-environ per a les variables d' | ||
| - | {{ java-docker.png }} | + | ===== Pàgines en aquesta wiki ===== |
| - | {{tag> # | + | {{topic> #CiberMp03 #CetiMp03 }} |
| - | Referències: | ||
| - | * [[Django]] : primer de tot cal seguir aquest article per disposar d'una app Django apta per a ser dockeritzada, | ||
| - | * [[Docker]] | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | |||
| - | \\ | ||
| - | |||
| - | ===== Dockeritzant amb el servidor de desenvolupament ===== | ||
| - | |||
| - | El Dockerfile permet crear la imatge del contenidor. | ||
| - | |||
| - | <file Dockerfile Dockerfile> | ||
| - | # We Use an official Python runtime as a parent image | ||
| - | FROM python: | ||
| - | |||
| - | # install db libs | ||
| - | RUN apt-get update | ||
| - | RUN apt-get install -y default-mysql-client libmariadb-dev | ||
| - | RUN apt-get install -y libmariadb-dev-compat gcc gdal-bin libjpeg-dev | ||
| - | |||
| - | # install app libs | ||
| - | COPY requirements.txt requirements.txt | ||
| - | RUN pip3 install --no-cache-dir -r requirements.txt | ||
| - | |||
| - | # Mounts the application code to the image | ||
| - | COPY . code | ||
| - | |||
| - | # establish workdir | ||
| - | WORKDIR /code | ||
| - | |||
| - | EXPOSE 8000 | ||
| - | |||
| - | # runs the development server | ||
| - | ENTRYPOINT [" | ||
| - | CMD [" | ||
| - | </ | ||
| - | |||
| - | Fixeu-vos en què la darrera instrucció equival a '' | ||
| - | |||
| - | El docker-compose ens facilita la posada en producció juntament amb la base de dades: | ||
| - | |||
| - | <file yaml docker-compose.yml> | ||
| - | version: ' | ||
| - | |||
| - | services: | ||
| - | |||
| - | django_app: | ||
| - | build: . | ||
| - | restart: always | ||
| - | ports: | ||
| - | - 8000:8000 | ||
| - | environment: | ||
| - | - DATABASE_URL=sqlite:/// | ||
| - | - DEBUG=False | ||
| - | - SECRET_KEY=asecretkeyblabla | ||
| - | volumes: | ||
| - | - ./ | ||
| - | |||
| - | </ | ||
| - | |||
| - | Per posar-ho en marxa primer cal crear un arxiu on persistir la BD local: | ||
| - | $ touch db.sqlite3 | ||
| - | $ docker-compose up -d --build | ||
| - | |||
| - | \\ | ||
| - | |||
| - | ===== Exercicis ===== | ||
| - | <WRAP todo> | ||
| - | Connecta' | ||
| - | - Fes un //migrate// per tal de crear les taules de la BD. | ||
| - | - Crea un superusuari i loga't al panell d' | ||
| - | </ | ||
| - | |||
| - | |||
| - | <WRAP todo> | ||
| - | Modifica el '' | ||
| - | |||
| - | Assegura' | ||
| - | |||
| - | Fes el //migrate// i crea el superusuari tal i com hem fet abans. | ||
| - | </ | ||
| - | |||
| - | \\ | ||
| - | |||
| - | ===== Utilitzant uWSGI + Ngnix ===== | ||
| - | El " | ||
| - | |||
| - | {{diagrama_django_produccio.png? | ||
| - | |||
| - | Recordem que un dels principis bàsics de Docker és el de "un servei per contenidor" | ||
| - | |||
| - | En canvi, [[https:// | ||
| - | |||
| - | |||
| - | ==== Dockeritzant uWSGI + Nginx en un sol contenidor ==== | ||
| - | |||
| - | Farem una mescla dels dos tutorials per aconseguir el nostre Django en un sol contenidor. | ||
| - | |||
| - | <file bash supervisord.conf> | ||
| - | [supervisord] | ||
| - | nodaemon=true | ||
| - | |||
| - | [program: | ||
| - | command=/ | ||
| - | stdout_logfile=/ | ||
| - | stdout_logfile_maxbytes=0 | ||
| - | stderr_logfile=/ | ||
| - | stderr_logfile_maxbytes=0 | ||
| - | |||
| - | [program: | ||
| - | command=/ | ||
| - | stdout_logfile=/ | ||
| - | stdout_logfile_maxbytes=0 | ||
| - | stderr_logfile=/ | ||
| - | stderr_logfile_maxbytes=0 | ||
| - | </ | ||
| - | |||
| - | <file bash uwsgi.ini> | ||
| - | [uwsgi] | ||
| - | module = mysite.wsgi | ||
| - | callable = application | ||
| - | uid = nginx | ||
| - | gid = nginx | ||
| - | socket = / | ||
| - | chown-socket = www-data: | ||
| - | chmod-socket = 664 | ||
| - | cheaper = 1 | ||
| - | processes = %(%k + 1) | ||
| - | # clear environment on exit | ||
| - | vacuum=true | ||
| - | </ | ||
| - | |||
| - | <file txt uwsgi_params> | ||
| - | uwsgi_param | ||
| - | uwsgi_param | ||
| - | uwsgi_param | ||
| - | uwsgi_param | ||
| - | |||
| - | uwsgi_param | ||
| - | uwsgi_param | ||
| - | uwsgi_param | ||
| - | uwsgi_param | ||
| - | uwsgi_param | ||
| - | uwsgi_param | ||
| - | |||
| - | uwsgi_param | ||
| - | uwsgi_param | ||
| - | uwsgi_param | ||
| - | uwsgi_param | ||
| - | </ | ||
| - | |||
| - | <file bash django-site.conf> | ||
| - | |||
| - | server { | ||
| - | location / { | ||
| - | try_files $uri @yourapplication; | ||
| - | } | ||
| - | location @yourapplication { | ||
| - | include uwsgi_params; | ||
| - | uwsgi_pass unix:/// | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | <file dockerfile Dockerfile> | ||
| - | # We Use an official Python runtime as a parent image | ||
| - | FROM python: | ||
| - | |||
| - | # install db libs | ||
| - | RUN apt-get update | ||
| - | RUN apt-get install -y default-mysql-client libmariadb-dev | ||
| - | RUN apt-get install -y libmariadb-dev-compat gcc gdal-bin libjpeg-dev | ||
| - | |||
| - | # install nginx and supervisor | ||
| - | RUN apt-get install -y --no-install-recommends \ | ||
| - | nginx supervisor | ||
| - | RUN useradd --no-create-home nginx | ||
| - | # install uwsgi | ||
| - | RUN pip3 install uwsgi | ||
| - | |||
| - | # adjustments | ||
| - | RUN rm / | ||
| - | RUN rm -r / | ||
| - | |||
| - | # production conf files | ||
| - | COPY deploy/ | ||
| - | COPY deploy/ | ||
| - | COPY deploy/ | ||
| - | |||
| - | # install app libs | ||
| - | COPY requirements.txt requirements.txt | ||
| - | RUN pip3 install --no-cache-dir -r requirements.txt | ||
| - | |||
| - | # Mounts the application code to the image | ||
| - | COPY . code | ||
| - | |||
| - | # establish workdir | ||
| - | WORKDIR /code | ||
| - | |||
| - | EXPOSE 80 | ||
| - | |||
| - | # runs the development server | ||
| - | CMD ["/ | ||
| - | </ | ||
| - | |||
| - | <WRAP tip> | ||
| - | Perquè funcioni bé i veiem la web al port 8000 cal que **modifiqueu el '' | ||
| - | </ | ||
| - | |||
| - | \\ | ||
| - | |||
| - | <WRAP todo> | ||
| - | Canvia la configuració per a utilitzar el servidor d' | ||
| - | |||
| - | Comprova que **tornem a tenir el problema dels arxius estàtics** accedint al /admin i refrescant fins que vegis que no es veuen els CSS. | ||
| - | |||
| - | Com creus que seria la millor manera de solventar el problema dels arxius estàtics? Implementa-la. | ||
| - | </ | ||