Instalando django con docker y docker-compose.

Configurando un Proyecto de Django con Docker y Docker Compose

Después de algunos problemas con la instalación de versiones recientes de Python usando pyenv (¡intentar instalar Python 3.12 fue un dolor de cabeza!), decidí simplificar mi flujo de trabajo y configurar mi entorno de desarrollo usando Docker y Docker Compose.

Para esta guía, te recomiendo tener Docker y Docker Compose ya instalados. Puedes usar la terminal o herramientas como Visual Studio Code, que ofrece una interfaz muy útil para gestionar proyectos Docker.

Paso 1: Configurar la Estructura de Archivos del Proyecto

  1. Ubícate en el directorio donde deseas crear el proyecto (en mi caso, Workspace).
  2. Crea el directorio del proyecto y navega a él.
  3. Crea los archivos y carpetas iniciales.
$ cd ~/Workspace
$ mkdir proyecto
$ proyecto
$ touch Dockerfile
$ touch docker-compose.yml
$ touch requirements.txt
$ mkdir app/

Paso 2: Configurar el Dockerfile, docker-compose.yml y requirements.txt

Dockerfile

Este archivo define cómo se construirá la imagen de Docker para el proyecto Django.

FROM python:3.12-slim
WORKDIR /proyecto
COPY requirements.txt requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

docker-compose.yml

Aquí configuramos dos servicios: uno para la base de datos PostgreSQL y otro para la aplicación web.

services:
  db:
    image: postgres:13
    environment:
      POSTGRES_DB: mydatabase
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: mypassword
    volumes:
      - postgres_data:/var/lib/postgresql/data
    ports:
      - "5440:5432"

  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - ./app:/app
    ports:
      - "8000:8000"
    depends_on:
      - db
    environment:
      - DATABASE_NAME=mydatabase
      - DATABASE_USER=myuser
      - DATABASE_PASSWORD=mypassword
      - DATABASE_HOST=db
      - DATABASE_PORT=5440

volumes:
  postgres_data: 

requirements.txt

Incluye las dependencias necesarias para el proyecto:

Django
psycopg2-binary

Paso 3: Crear el Proyecto Django

Inicia un nuevo proyecto de Django usando Docker Compose:

docker compose run web django-admin startproject myproject .

Si aparece algún error, revisa el log de Docker Compose para corregir posibles problemas, como nombres de archivos o dependencias faltantes.

Paso 4: Configurar la Base de Datos en Django

Actualiza el archivo settings.py de Django para usar PostgreSQL como base de datos. Ubica el archivo en app/myproject/settings.py y configura la sección de DATABASES:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.getenv('DATABASE_NAME'),
        'USER': os.getenv('DATABASE_USER'),
        'PASSWORD': os.getenv('DATABASE_PASSWORD'),
        'HOST': os.getenv('DATABASE_HOST'),
        'PORT': os.getenv('DATABASE_PORT'),
    }
} 

Paso 5: Levantar el Proyecto y Ejecutar Migraciones

  1. Construye y levanta el proyecto con Docker Compose:

docker compose up --build
    2. En otra terminal, aplica las migraciones de Django:
docker compose run web python manage.py migrate

Paso 6: Acceder al Proyecto

Tu aplicación de Django debería estar corriendo en http://127.0.0.1:8000/.

 

Estructura Final del Proyecto

Después de seguir estos pasos, la estructura de archivos y carpetas debería verse así:

├── app
│   ├── db.sqlite3
│   ├── manage.py
│   └── myproject
│       ├── asgi.py
│       ├── __init__.py
│       ├── __pycache__
│       │   ├── __init__.cpython-312.pyc
│       │   ├── settings.cpython-312.pyc
│       │   ├── urls.cpython-312.pyc
│       │   └── wsgi.cpython-312.pyc
│       ├── settings.py
│       ├── urls.py
│       └── wsgi.py
├── docker-compose.yml
├── Dockerfile
└── requirements.txt

4 directories, 14 files

Conclusión

¡Y listo! Ahora tienes un proyecto Django funcionando con Docker, que facilita la configuración del entorno y mejora la portabilidad.

 código: https://github.com/aztrock/myproject

No hay comentarios.:

Publicar un comentario