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
Crear dependencia de service postgresdb al servicio de python app creado inicialmente
Crear la descripción del servicio
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 …
Publish to Github
Seleccionar el nombre y tipo de repository
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