paint-brush
Cómo Dockerizar e implementar aplicaciones Djangopor@abrahamdahunsi
11,912 lecturas
11,912 lecturas

Cómo Dockerizar e implementar aplicaciones Django

por Abraham Dahunsi 15m2023/10/14
Read on Terminal Reader

Demasiado Largo; Para Leer

En este tutorial, aprendió cómo acoplar e implementar aplicaciones Django usando Docker, Django y Heroku. Viste cómo Docker puede ayudarte a crear entornos aislados y reproducibles para tus aplicaciones y cómo Heroku puede simplificar el proceso de implementación. También aprendió a usar Docker Compose para administrar múltiples contenedores y servicios, y a configurar sus ajustes de Django para diferentes entornos.
featured image - Cómo Dockerizar e implementar aplicaciones Django
Abraham Dahunsi  HackerNoon profile picture
0-item
1-item

Docker es una plataforma para crear, ejecutar y distribuir aplicaciones. Le permite empaquetar su aplicación y todas sus dependencias en un solo contenedor, que luego se puede ejecutar en cualquier máquina que tenga Docker instalado.


Esto hace que Docker sea ideal para implementar aplicaciones web, ya que facilita mover su aplicación de un entorno a otro sin tener que preocuparse por problemas de compatibilidad.


Django, por otro lado, es un marco web Python que facilita la creación de aplicaciones web potentes y escalables. Django proporciona una serie de funciones listas para usar, como un sistema de autenticación de usuarios, una capa de abstracción de base de datos y un motor de plantillas.


Esto facilita la introducción a Django y la creación de aplicaciones web complejas de forma rápida y sencilla.


Dockerizar e implementar una aplicación Django es un proceso relativamente sencillo. Los principales pasos involucrados son:


1. Cree un Dockerfile para su aplicación Django.

2. Cree una imagen de Docker a partir de su Dockerfile.

3. Implemente la imagen de Docker en un entorno de producción.


En este artículo, lo guiaré en detalle a través de los pasos necesarios para acoplar e implementar una aplicación Django. También proporcionaré algunos consejos y mejores prácticas para implementar aplicaciones Django en producción.

Requisitos previos

Para seguir este tutorial, necesitará los siguientes requisitos previos:


  • Python 3.9 o superior
  • Pepita
  • Estibador
  • Composición acoplable
  • git


También necesitará un proveedor de alojamiento en la nube como AWS, Azure o Google Cloud Platform si desea implementar su aplicación Django en producción. Pero para este tutorial, usaré Heroku.


Una vez que tenga todos los requisitos previos instalados, estará listo para comenzar a Dockerizar e implementar su aplicación Django.

Creando un proyecto Django

Para iniciar un nuevo proyecto Django, necesita usar el comando django-admin . Este comando te permite crear un directorio de proyecto y algunos archivos básicos para tu aplicación Django. Por ejemplo, si desea crear un proyecto llamado my_project , puede ejecutar este comando en su terminal:


django-admin startproject my_project


Esto creará un directorio llamado `my_project` con la siguiente estructura:



mi proyecto/


├── gestionar.py


└── proyecto/


├── en eso .py


├── configuración.py


└── URL.py


El archivo manage.py es un script que le permite realizar diversas tareas para su proyecto, como ejecutar el servidor de desarrollo, crear migraciones de bases de datos y probar su código. El directorio project/ contiene los ajustes y archivos de configuración para su proyecto.


El archivo settings.py define la configuración principal de su proyecto, como la conexión de la base de datos, las aplicaciones instaladas y el middleware. El archivo urls.py asigna las URL de su proyecto a las vistas de sus aplicaciones.


Después de crear un nuevo proyecto Django, puedes probarlo localmente ejecutando el servidor de desarrollo. El servidor de desarrollo es un servidor web simple que se ejecuta en su máquina y sirve los archivos de su proyecto. Para iniciar el servidor de desarrollo, ejecute este comando en su terminal:


python manage.py runserver


Esto iniciará el servidor en el puerto 8000 de forma predeterminada. Luego puede abrir su navegador e ir a http://localhost:8000/ para ver la página de inicio predeterminada de Django.

Estructura básica y archivos de un proyecto Django

Un proyecto Django se compone de varios archivos y directorios que definen la funcionalidad y apariencia de su aplicación web. Los principales componentes de un proyecto Django son:


manage.py : un script que proporciona varios comandos para administrar su proyecto, como crear aplicaciones, migrar la base de datos y probar su código.


project/ : Un directorio que contiene los ajustes y archivos de configuración para su proyecto. Los archivos principales de este directorio son:

 `settings.py`: A file that defines the main settings for your project, such as the database connection, the installed apps, and the middleware. You can customize this file to suit your needs and preferences. `urls.py`: A file that maps the URLs of your project to the views of your apps. You can define different URL patterns for different parts of your web application.


apps/ : Un directorio que contiene todas las aplicaciones de Django que componen tu proyecto. Cada aplicación Django es un paquete Python independiente que proporciona una funcionalidad o característica específica para su aplicación web. Puede crear sus propias aplicaciones o utilizar las existentes de fuentes de terceros.

Probar el proyecto localmente

Para probar el proyecto localmente, puede utilizar el servidor de desarrollo o el marco de prueba proporcionado por Django. El servidor de desarrollo es un servidor web simple que se ejecuta en su máquina y sirve los archivos de su proyecto. El marco de prueba es una herramienta que le permite escribir y ejecutar pruebas unitarias para su código.


Para utilizar el servidor de desarrollo, puede ejecutar este comando en su terminal:


python manage.py runserver


Esto iniciará el servidor en el puerto 8000 de forma predeterminada. Luego puede abrir su navegador e ir a `http://localhost:8000/` para ver la página de inicio predeterminada de Django.


Para utilizar el marco de prueba, puede ejecutar este comando en su terminal:


python manage.py test


Esto ejecutará todas las pruebas unitarias de su proyecto. Si todas las pruebas pasan, verá un mensaje como este:



 Ran 1 test in 0.001s Ok


Si alguna de las pruebas falla, verá un mensaje de error con detalles sobre la falla. Puede utilizar esta información para depurar y corregir su código.


Una vez que haya probado el proyecto localmente y esté satisfecho con los resultados, puede implementarlo en un entorno de producción.

Dockerizando el Proyecto Django

¿Qué es un archivo Docker?

Un Dockerfile es un archivo de texto que contiene instrucciones sobre cómo crear una imagen de Docker. Una imagen de Docker es un paquete ejecutable autónomo que incluye todo lo necesario para ejecutar una aplicación: código, tiempo de ejecución, herramientas del sistema, bibliotecas del sistema y configuración.


Para crear un Dockerfile, debe especificar la imagen base, los comandos que se ejecutarán para instalar los paquetes necesarios y los comandos que se ejecutarán para iniciar la aplicación.

Ejemplo de Dockerfile para un proyecto Django

Aquí hay un Dockerfile de ejemplo para un proyecto Django:


 FROM python:3.9 #Install Django and other required packages RUN pip install django # Copy the Django project files into the image COPY ./app # Set the working directory WORKDIR /app # Start the Django development server CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]



Este Dockerfile creará una imagen de Docker que contiene Python 3.9, Django y los archivos del proyecto Django. La imagen se configurará para iniciar el servidor de desarrollo Django en el puerto 8000.

¿Qué es un archivo docker-compose.yml?

Un archivo docker-compose.yml es un archivo YAML que define los servicios que componen una aplicación Dockerizada. Un servicio puede ser un único contenedor Docker o un grupo de contenedores Docker.


Para crear un archivo docker-compose.yml para un proyecto Django, debe definir el servicio web y el servicio de base de datos. El servicio web ejecutará la aplicación Django y el servicio de base de datos ejecutará la base de datos que utiliza la aplicación Django.

Ejemplo de archivo docker-compose.yml para un proyecto Django

Aquí hay un archivo docker-compose.yml de ejemplo para un proyecto Django:


 version: "3.9" services: web: build: ports: -"8000:8000" volumes -./:/app db: image: postgres:14.0-alpine volumes: -./postgres:/var/lib/postgresql/data



Este archivo docker-compose.yml define dos servicios: web y db . El servicio web creará la imagen de Docker a partir del Dockerfile que creamos en la sección anterior. El servicio web también expondrá el puerto 8000 en la máquina host para que podamos acceder al servidor de desarrollo Django.


El servicio db utilizará la imagen oficial de PostgreSQL Docker. El servicio db también montará el directorio postgres en la máquina host en el directorio /var/lib/postgresql/data dentro del contenedor. Esto garantizará que los archivos de la base de datos persistan entre reinicios del contenedor.

Construyendo y ejecutando los contenedores Docker

Para construir y ejecutar los contenedores Docker, podemos usar el siguiente comando:


docker-compose up -d


Este comando creará las imágenes de Docker para los servicios `web` y `db` si aún no existen. Luego, el comando iniciará los contenedores Docker para los servicios `web` y `db`.

Probando localmente el proyecto Django Dockerizado

Una vez que los contenedores Docker se estén ejecutando, podemos probar el proyecto Dockerized Django localmente usando un navegador web. Abra un navegador web y navegue hasta `http://localhost:8000`. Ahora deberías poder ver la página de desarrollo de Django.


También puede iniciar sesión en la página de administración de Django en http://localhost:8000/admin/ . El nombre de usuario y la contraseña son admin y admin de forma predeterminada.

Implementando el Proyecto Django

Ahora es el momento de implementar su proyecto Django en una plataforma en la nube usando Git, GitHub y Heroku. También probará su aplicación web implementada utilizando un navegador web.

¿Qué es Git y por qué lo necesitamos?

Git es una herramienta de software que puede ayudarte a administrar el código fuente de tu proyecto. Le permite realizar un seguimiento de los cambios realizados en su código, colaborar con otros desarrolladores y volver a versiones anteriores si algo sale mal.


Git también puede permitirle enviar su código a repositorios remotos, como GitHub, donde puede almacenar y compartir su código con otros.

¿Cómo crear un repositorio de GitHub y enviar nuestro código a GitHub?

Ignore lo siguiente si ya ha creado un repositorio de GitHub.


Para crear un repositorio de GitHub para su proyecto Django, debe seguir estos pasos:


- Crea una cuenta gratuita en GitHub


- Vaya a su página de perfil y haga clic en el botón Nuevo junto a Repositorios .


- Asigne un nombre a su repositorio, como django-docker-app , y opcionalmente agregue una descripción.


- Haga clic en el botón Crear repositorio .


Ahora que ha creado un repositorio vacío en GitHub. Para enviar su código a este repositorio, debe usar el comando `git` en su terminal. Supongo que ya instaló Git en su máquina local e inicializó un repositorio de Git en la carpeta de su proyecto Django. En caso contrario, sigue la documentación oficial para hacerlo.


Para enviar su código a GitHub, debe seguir estos pasos:


- Vaya a la carpeta de su proyecto Django en la terminal y escriba git status para ver el estado actual de su repositorio. Debería ver algo como esto:


 On branch main Your branch is up to date with 'origin/main'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: Dockerfile modified: docker-compose.yml modified: requirements.txt no changes added to commit (use "git add" and/or "git commit -a")


Esto significa que tiene algunos archivos modificados que no están preparados para su confirmación. Para prepararlos para su confirmación, debe usar el comando git add .


- Escribe git add . para preparar todos los archivos modificados para su confirmación. Alternativamente, puede especificar los nombres de los archivos que queremos preparar, como git add Dockerfile docker-compose.yml requirements.txt .


- Escribe git status nuevamente para ver el estado actualizado de nuestro repositorio. Debería ver algo como esto:


 On branch main Your branch is up to date with 'origin/main'. Changes to be committed: (use "git restore --staged <file>..." to unstage) modified: Dockerfile modified: docker-compose.yml modified: requirements.txt


Esto significa que tiene algunos cambios que están preparados para su confirmación. Para confirmarlos, debes usar el comando git commit .


- Escriba git commit -m "Add Docker configuration files" para confirmar los cambios preparados con un mensaje que describe lo que hicimos. Alternativamente, puedes omitir el indicador -m e ingresar un mensaje más largo en un editor que se abrirá después de escribir git commit .


- Escribe git status nuevamente para ver el estado final de nuestro repositorio. Debería ver algo como esto:


 On branch main Your branch is ahead of 'origin/main' by 1 commit. (use "git push" to publish your local commits) nothing to commit, working tree clean


Esto significa que tiene una confirmación que aún no se envió al repositorio remoto. Para enviarlo, necesitas usar el comando git push .


- Escriba git push origin main para enviar su confirmación local al repositorio remoto en GitHub.


Alternativamente, puede especificar el nombre remoto y el nombre de la rama que desea enviar, como git push origin main .


Es posible que se le solicite que ingrese su nombre de usuario y contraseña de GitHub o que utilice un token de acceso personal para autenticarse.


- Vaya a la página de su repositorio de GitHub y actualícela. Deberías ver tu código y el mensaje de confirmación en la página.


Has enviado correctamente tu código a GitHub. Ahora puedes pasar al siguiente paso, que es implementar tu proyecto Django en Heroku.

¿Qué es Heroku y por qué lo necesita?

Heroku es una plataforma en la nube que le permite implementar, administrar y escalar aplicaciones web. Admite varios lenguajes de programación, marcos y bases de datos, como Python, Django y PostgreSQL.


También proporciona varias funciones y complementos que mejoran nuestra experiencia de desarrollo web, como registro, monitoreo, almacenamiento en caché, seguridad, etc.


Necesita Heroku porque hace que su proceso de implementación sea más fácil y rápido. Puede utilizar Heroku para implementar su proyecto Django sin preocuparse por la infraestructura subyacente, como servidores, redes o sistemas operativos.


También puedes utilizar Heroku para escalar tu aplicación web según el tráfico y la demanda. Heroku maneja todas las complejidades y desafíos de la implementación web por usted.

¿Cómo crear una cuenta Heroku e instalar la herramienta CLI Heroku?

Para crear una cuenta Heroku, debe seguir estos pasos:


- Vaya a Heroku y haga clic en el botón Registrarse .

- Complete la información requerida, como nombre, correo electrónico, contraseña, etc.

- Elija un lenguaje de desarrollo principal, como Python.

- Haga clic en el botón Crear cuenta gratuita .

- Revisa nuestro correo electrónico y haz clic en el enlace para verificar nuestra cuenta.


Ahora ha creado una cuenta Heroku gratuita. Para instalar la herramienta Heroku CLI, debe seguir estos pasos:


- Vayamos a [ Heroku CLI , y elijamos el instalador adecuado a nuestro sistema operativo, como por ejemplo Windows, Mac OS X o Linux.


- Descargue y ejecute el instalador y siga las instrucciones en pantalla.


- Abra una terminal y escriba heroku --version para verificar que la instalación se haya realizado correctamente. Debería ver algo como esto:


heroku/7.59.0 win32-x64 node-v12.21.0


Ahora ha instalado la herramienta Heroku CLI en su máquina local. Puedes utilizar esta herramienta para interactuar con Heroku desde la terminal.

¿Cómo crear una aplicación Heroku y configurar los ajustes necesarios?

Para crear una aplicación Heroku para nuestro proyecto Django, debemos seguir estos pasos:


- Vaya a la carpeta de su proyecto Django en la terminal y escriba heroku login para iniciar sesión en su cuenta Heroku usando la herramienta Heroku CLI. Es posible que se le solicite que ingrese su correo electrónico y contraseña o que utilice un navegador web para autenticarse.


- Escriba heroku create django-docker-app para crear una nueva aplicación Heroku con el nombre django-docker-app . Alternativamente, puedes omitir el nombre y dejar que Heroku genere un nombre aleatorio para ti. Debería ver algo como esto:


 Creating ⬢ django-docker-app... done https://django-docker-app.herokuapp.com/ | https://git.heroku.com/django-docker-app.git


Esto significa que ha creado una nueva aplicación Heroku con una URL web y una URL de Git. La URL web es donde puede acceder a su aplicación web implementada y la URL de Git es donde puede enviar su código a Heroku.


- Escriba heroku config:set SECRET_KEY=<your_secret_key> para establecer una variable de entorno para la configuración SECRET_KEY de nuestro proyecto Django. Debes reemplazar <your_secret_key> con una cadena aleatoria que puedes generar usando una herramienta como Django Secret Key Generator .


Alternativamente, puede usar la clave secreta existente que tiene en su archivo settings.py , pero no se recomienda por razones de seguridad.


- Escriba heroku addons:create heroku-postgresql:hobby-dev para agregar un complemento gratuito de base de datos PostgreSQL a tu aplicación Heroku. Esto creará una nueva base de datos para su proyecto Django y establecerá una variable de entorno para la configuración DATABASE_URL de su proyecto Django. Debería ver algo como esto:

 Creating heroku-postgresql:hobby-dev on ⬢ django-docker-app... free Database has been created and is available ! This database is empty. If upgrading, you can transfer ! data from another database with pg:copy Created postgresql-curved-12345 as DATABASE_URL Use heroku addons:docs heroku-postgresql to view documentation


Esto significa que ha agregado un complemento de base de datos PostgreSQL con el nombre PostgreSQL-curved-12345 y la URL DATABASE_URL .


- Escriba heroku config para ver la lista de variables de entorno que ha configurado para su aplicación Heroku. Debería ver algo como esto:


 === django-docker-app Config Vars DATABASE_URL: postgres://<username>: <password>@<host>:<port>/<database> SECRET_KEY: <your_secret_key>


Esto significa que tienes dos variables de entorno, DATABASE_URL y SECRET_KEY , que puedes usar en la configuración de tu proyecto Django.


Ahora que ha creado una aplicación Heroku y ha configurado los ajustes necesarios para nuestro proyecto Django, puede pasar al siguiente paso, que es implementar su proyecto Django en Heroku.


¿Cómo implementar su proyecto Django en Heroku usando el comando ` heroku ?


Para implementar nuestro proyecto Django en Heroku usando el comando heroku , debe seguir estos pasos:


- Vaya a la carpeta de su proyecto Django en la terminal y escriba heroku container:login para iniciar sesión en Heroku Container Registry usando la herramienta Heroku CLI. Esto le permitirá enviar nuestra imagen de Docker a Heroku.


- Escriba heroku container:push web -a django-docker-app para crear y enviar su imagen de Docker a Heroku. Debes especificar el nombre de tu aplicación Heroku, que en este caso es django-docker-app . Debería ver algo como esto:


 === Building web (Dockerfile) Sending build context to Docker daemon 1.024kB Step 1/9 : FROM python:3.9-slim ---> 7f5b6ccd03e9 Step 2/9 : ENV PYTHONUNBUFFERED 1 ---> Using cache ---> 64b5d0e40a22 Step 3/9 : RUN mkdir /code ---> Using cache ---> 4d8c638f2b6c Step 4/9 : WORKDIR /code ---> Using cache ---> e69c02a028cd Step 5/9 : COPY requirements.txt /code/ ---> Using cache ---> 8f0f3e0f2d8c Step 6/9 : RUN pip install -r requirements.txt ---> Using cache ---> 0f7b497d81ed Step 7/9 : COPY . /code/ ---> Using cache ---> c0a8e9a32b16 Step 8/9 : EXPOSE 8000 ---> Using cache ---> a1d36a4a2da4 Step 9/9 : CMD ["gunicorn", "django_docker.wsgi", "--bind", "0.0.0.0:8000"] ---> Using cache ---> f7f3c0418a1d Successfully built f7f3c0418a1d Successfully tagged registry.heroku.com/django-docker-app/web:latest === Pushing web (Dockerfile) The push refers to repository [registry.heroku.com/django-docker-app/web] f7f3c0418a1d: Pushed latest: digest: sha256:6cbbf22cf6aa60e0343e6d8e7c4c2eeb2e cb8fd5e82a42dfe5f4aeeb15af89ec size: 528 Your image has been successfully pushed. You can now release it with the 'container:release' command.


Esto significa que ha creado y enviado su imagen de Docker a Heroku.


- Escriba heroku container:release web -a django-docker-app para publicar nuestra imagen de Docker en nuestra aplicación Heroku. Debería ver algo como esto:


 Releasing images web to django-docker-app... done


Esto significa que ha publicado su imagen de Docker en su aplicación Heroku.


- Escriba heroku run python manage.py migrate -a django-docker-app para ejecutar las migraciones de la base de datos en su aplicación Heroku. Esto creará las tablas e índices necesarios para su proyecto Django en la base de datos PostgreSQL. Debería ver algo como esto:


 Running python manage.py migrate on ⬢ django-docker-app... up, run.1234 (Free) Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions, polls Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying auth.0012_alter_user_first_name_max_length... OK Applying polls.0001_initial... OK Applying sessions.0001_initial... OK


Esto significa que ha ejecutado las migraciones de la base de datos en su aplicación Heroku.


- Escriba heroku open -a django-docker-app para abrir nuestra aplicación web implementada en un navegador web. Deberías ver nuestro proyecto Django ejecutándose en Heroku.


Ha implementado con éxito su proyecto Django en Heroku usando el comando heroku . Ahora puede disfrutar de su aplicación web y compartirla con otros.

Conclusión

En este tutorial, aprendió cómo acoplar e implementar aplicaciones Django usando Docker, Django y Heroku. Viste cómo Docker puede ayudarte a crear entornos aislados y reproducibles para tus aplicaciones y cómo Heroku puede simplificar el proceso de implementación.


También aprendió a usar Docker Compose para administrar múltiples contenedores y servicios, y a configurar sus ajustes de Django para diferentes entornos.


Dockerizar e implementar aplicaciones Django puede tener muchos beneficios, como por ejemplo:


- Ciclos de desarrollo y pruebas más rápidos.

- Colaboración y uso compartido de código más sencillos

- Rendimiento consistente y confiable en todas las plataformas

- Escalabilidad y flexibilidad de recursos.

- Seguridad y aislamiento de dependencias.


Lea a continuación: CI/CD es esencial para una entrega de software rápida y confiable. Para optimizar su proceso de CI/CD para obtener la máxima eficiencia, elija las herramientas adecuadas, optimice su flujo de trabajo, utilice pruebas y control de calidad automatizados, paralelice las compilaciones, utilice bucles de monitoreo y retroalimentación, realice controles de seguridad y mejore continuamente su proceso. Leer más

Lea también: Todo lo que aprendimos en DockerCon 2023 Leer más

Recursos adicionales

- Documentación de Docker : la documentación oficial de Docker, donde puede encontrar guías, tutoriales, materiales de referencia y más.


- Documentación de Django : la documentación oficial de Django, donde puede encontrar temas, guías prácticas, materiales de referencia y más.