Configurar entorno de desarrollo para Django y Postgres con VSCode plugins

 

README

Este es un artefacto cuyo único objetivo es socializar el conocimiento,  lo producido NO DEBE USARSE TAL CUAL EN UN AMBIENTE DE PRODUCCIÓN.  No soy responsable por ningún daño o perjuicio ocasionado por el uso del contenido de esta publicación.

Antes de iniciar esta guía, recomiendo leer y entender las siguientes secciones : 

Necesidad

Agilizar proceso de configuración de entorno de desarrollo para hacer aplicaciones en Django utilizando Docker como herramienta para configurar la arquitectura de desarrollo que facilite de manera segura el deployment a producción de soluciones informáticas usando containers como infraestructura.

Hipótesis de solución

Usar las funcionalidades que provee Visual Studio Code para programar aplicaciones basadas en Django sin tener que instalar python  y sus librerías necesarias en la computadora de trabajo del desarrollador, sino que usar el entorno ofrecido por Docker images.

Objetivo de aprendizaje

Al finalizar esta guía el participante deberá haber adquirido las referencias sobre herramientas y métodos para implementar desde cero un entorno de desarrollo virtualizado en Python, específicamente usando Django.  El entregable es tener la app Django operable y editable usando Docker para proveer todas las librerías necesarias sin tener que instalarlas en la estación de trabajo del desarrollador.    

Está fuera del alcance de esta guía : 

  • Enseñar cómo usar docker, Git,  Visual Studio o cualquiera de las herramientas o librerías que se mencionan en la guía.

  • Tener un producto de software listo para ejecutar en producción, ya que no se contemplaran las buenas prácticas de seguridad digital necesarias.

  • Enseñar a hacer una app usando Django

Requisitos necesarios para utilizar esta guía

  • Haber instalado Docker, Git y Visual Studio Code en tu computadora

  • Tener conocimientos necesarios para operar con efectividad cada una de las 3 herramientas necesarias   

  • Tener cuenta activa y funcional en Github y Docker Hub.

Referencia 

Django development environment using VSCode Remote Containers - BackendClub.com 


Entorno de trabajo

Desarrollo

  • README validado por participantes

many tutorials explain how to Dockerise/containerise an existing project, and most of them will assume you already have a local development environment set up. Another way you could do this is to use Docker from the start, bypassing the need to install Python and other dependencies to your local machine.  


Antes se hacía : 

  • Instalabas en tu computador todo el software necesario para desarrollar app en Django

  • Creabas un proyecto nuevo desde tu computador de Django

  • …. Dockerizabas tu app, es decir copiabas y mantenias sincronizado tu código fuente de tu computador con la image  de Docker


Crear carpeta de trabajo


Instalar software y plugins necesarios en VS Code


Crear configuración Docker base para Django

Esta sección va a generar, mediante el uso del plugin instalado de Docker,  los archivos y carpetas necesarias para trabajar Django en una image/container.


Crear archivos de configuración usando la extensión  VSCode Docker




Ejecutar  paleta de comandos con (cmd+P on Mac, Ctrl+Shift+P on Windows) …


Analizando el Dockerfile creado

Toma como base una image del repositorio público oficial,  algunas consideraciones a tomar en cuenta  : 

  • En tu oficina puede existir un repositorio de imágenes oficiales ya validadas por áreas de infraestructura,  

  • Tu docker instalado deberá entonces tener la configuración para leer dicho repositorio en lugar del repositorio público Docker Hub

  • En este caso en particular está tomando la versión 3.8-slim,  deberás asegurarte que sea la versión que tu área de desarrollo tenga como estándar.

  • El Dockerfile agrega atributos de configuración contemplados como buenas prácticas en el uso de python en contenedores,  ej  no generar archivo .pyc en container.



Borrar archivo app.py  no será utilizado


A este momento el plugin nos ha ayudado a crear los archivos necesarios que construiran la docker image para trabajar.


Configurar la ejecución del Container a partir de la descripción de Dockerfile y docker-compose

Agregar la Dev Container Configuration Files

Ir a Paleta de comandos …





… Este proceso se puede tardar mas de 5 minutos dependiendo de las condiciones de tu equipo y servicio de conectividad a internet.


Que acabamos de hacer : 

  • Con la ayuda del plugin Dev Container se dieron respuesta a algunos parametros y la extensión  nos creo la Carpeta y archivos necesarios para ejecutar un container con nuestra aplicación en base al docker file creado.

  • Inicializar el entorno remoto, ya no en nuestro host,  en un container creado a partir del dockerfile


Generar el proyecto Django 


Once you’ve verified that, generate your Django project as you would for any other project:


$ django-admin startproject testproject .    # Crea proyecto Django


$ python manage.py runserver 0.0.0.0:8000  # Ejecuta django


Visitar desde el navegador …



Al cerrar Visual Studio Code, podemos verificar la Docker image creada


Se recomienda crear un visual studio workspace para que luego de cerrar tu entorno de trabajo puedas retomar la configuración hecha de manera rápida y facil


A continuación agregaremos Postgres dentro de un docker-compose,  Configurar Git local,  Configurar e integrar Git Remote,  Publicar Docker image lista para producción,  Iniciar proyecto usando git clone desde otra estación de trabajo.



Agregar servicio de Postgres  a nuestra instalación

OJO : Tengo la costumbre de guardar mi file workspace de VS Code en Desktop, sin embargo, al utilizar las funcionalidades de la extensión Dev Container me pide que workspace file esté en la misma carpeta del proyecto. En general no abrir VSCode con workspace.


Borrar carpeta recien creada >.devcontainer,  Agregar nuevamente la Dev Container Configuration Files, pero esta vez ELEGIR LA OPCIÓN DE DOCKER-COMPOSE FILE


Editar el file docker-compose.yml creado desde la configuración inicial

  1. Crear dependencia de service postgresdb al servicio de python app creado inicialmente

  2. Crear la descripción del servicio

  3. Por configuraciones de VSCode y el plugin Dev Container,  la carpeta que almacenará el volume con la data de Django DEBE ESTAR AFUERA DE LA CARPETA DEL PROYECTO.



Agregar un .gitignore y configurar que la subcarpeta >pgdata  que será creada para sincronizar el volume de datos de postgres no se suba a git.  Se recomienda  que cada instalación determine de manera estandarizada el contenido del file .gitignore por tipo de herramientas usadas(python,django, etc)


Modificamos la configuración de la app en el archivo settings.py creada en Django para incorporar el uso de Postgres …


Modificamos la configuración de Django con la library que conecta Django a Postgres en file requirements.txt


Ahora reconstruimos la image y el container …


… proceso tardará acorde a tus condiciones de equipo y conectividad


No levantan los servicios.  REVISAR.

https://code.visualstudio.com/docs/devcontainers/create-dev-container  

Luego de ejecutar la app y seguir los logs se pudo detectar que era un error de propiedad de carpeta donde se guardan datos de postgres(debe estar afuera de carpeta de proyecto) y que no había borrado la subcarpeta .devcontainer al momento de iniciar la configuración de postgres para recrearlo basandome en docker-compose en lugar de Dockerfile como se hace al principio de la guía.

La app funciona correctamente.  


Modifiqué Dockerfile para que en su CMD inicial ejecutara de una vez Django

Ejecutar 

python manage.py runserver 0.0.0.0:8000


Considerar 

Este primer comando crearía de una vez un proyecto con Django.

CMD [ "django-admin", "startproject hello_world_django" ]

… este otro comando solo inicia django

CMD [ "python", "manage.py runserver 0.0.0.0:8000" ]

A continuación administrar nuestro proyecto con Git



Gestionar el proyecto con Git


Asegurarse de estar en local folders y tener cuenta activa y funcional en Github



Luego de dar click en Git funcionalidad …

  1. Publish to Github

  2. Seleccionar el nombre y tipo de repository

  3. Seleccionar archivos a publicar


Se recomienda crear un .gitignore apropiado a la app que estas publicando.

Esta es la url pública de la app https://github.com/untaldouglas/basedjangopost.git   


Utilizar la app publicada en Git en otra estación de trabajo

Desde terminal, ir a una carpeta donde quieres que el software a descargar se instale.  Vamos a utilizar git clone para instalar el sfw

$ git clone https://github.com/untaldouglas/basedjangopost.git  # clonar la app ubicada en la url pública de git repository

$ cd basedjangopost # ir a carpeta creada


Asegurate tener instalado y configurado el sfw necesario : 


Iniciar desde allí VSCode

$ vscode .


Antes de iniciar en Remote Folde la app abierta en VSCode asegurate que ninguna otra instalación este usando el port 8000

Cuando estes en remote folder (dentro de container), ejecuta el arranque de django

python manage.py runserver 0.0.0.0:8000





Comments

Popular posts from this blog

Guía de instalación y configuración de Elixir Phoenix en Linux Pop 21 o Ubuntu 20.04

Instalar Frappe y ErpNext usando Docker developer mode en Linux y Mac