Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Implementación de una aplicación Django en Elastic Beanstalk
En este tutorial se explica la implementación de un sitio web de Django
En este tutorial, hará lo siguiente:
Requisitos previos
Para seguir este tutorial, debe tener todos los requisitos previos comunes de Python instalados, incluidos los siguientes paquetes:
-
Python 3.7 o posterior
-
pip
-
virtualenv
-
awsebcli
La instalación de la plataforma Django
nota
Para crear entornos con la CLI de EB, se requiere una función de servicio. Puede crear una función de servicio creando un entorno en la consola de Elastic Beanstalk. Si no cuenta con ninguna función de servicio, el EB CLI intentará crear uno cuando ejecute eb create
.
Configuración de un entorno virtual de Python e instalación de Django
Cree un entorno virtual con virtualenv
y utilícelo para instalar Django y sus dependencias. Al utilizar un entorno virtual, puede determinar exactamente qué paquetes son necesarios para la aplicación a fin de que los paquetes necesarios se instalen en las instancias Amazon EC2 que ejecutan su aplicación.
Los siguientes pasos muestran los comandos que debe especificar para sistemas basados en Unix y Windows, que aparecen en pestañas independientes.
Para configurar el entorno virtual
-
Cree un entorno virtual llamado
eb-virt
. -
Active el entorno virtual.
Verá
(eb-virt)
delante del símbolo del sistema, lo que indica que se encuentra en un entorno virtual.nota
En el resto de estas instrucciones se muestra el símbolo del sistema de Linux en el directorio principal
~$
. En Windows, este directorio esC:\Users\
, dondeUSERNAME
>USERNAME
es su nombre de inicio de sesión de Windows. -
Use
pip
para instalar Django.(eb-virt)~$
pip install django==2.2
nota
La versión de Django que instale debe ser compatible con la versión de Python en la configuración de Elastic Beanstalk Python que elija para implementar su aplicación. Para obtener información sobre la implementación, consulte Implementación del sitio con la CLI de EB en este tema.
Para obtener más información sobre las versiones de plataforma de Python actuales, consulte Python en el documento AWS Elastic BeanstalkPlatforms.
Para obtener información sobre la compatibilidad de versiones de Django con Python, consulte ¿Qué versión de Python puedo utilizar con Django?
-
Para comprobar que Django está instalado, escriba lo siguiente.
(eb-virt)~$
pip freeze
Django==2.2 ...Este comando enumera todos los paquetes instalados en su entorno virtual. Más adelante utilizará el resultado de este comando para configurar su proyecto para usarlo con Elastic Beanstalk.
Creación de un proyecto de Django
Ahora está preparado para crear un proyecto de Django y ejecutarlo en su equipo, utilizando el entorno virtual.
nota
Este tutorial utiliza SQLite, que es un motor de base de datos incluido en Python. La base de datos se implementa con los archivos del proyecto. Para entornos de producción, se recomienda utilizar Amazon Relational Database Service (Amazon RDS) y separarlo del entorno. Para obtener más información, consulte Adición de una instancia de base de datos de Amazon RDS a su entorno de Python de Elastic Beanstalk.
Para generar una aplicación de Django
-
Active el entorno virtual.
Verá el prefijo
(eb-virt)
delante del símbolo del sistema, lo que indica que se encuentra en un entorno virtual.nota
En el resto de estas instrucciones se muestra el símbolo del sistema de Linux
~$
en el directorio principal y el directorio principal de Linux~/
. En Windows, estos directorios sonC:\Users\
, dondeUSERNAME
>USERNAME
es su nombre de inicio de sesión de Windows. -
Utilice el comando
django-admin startproject
para crear un proyecto de Django llamadoebdjango
.(eb-virt)~$
django-admin startproject ebdjango
Este comando crea un sitio de Django estándar denominado ebdjango con la siguiente estructura de directorios.
~/ebdjango |-- ebdjango | |-- __init__.py | |-- settings.py | |-- urls.py | `-- wsgi.py `-- manage.py
-
Ejecute el sitio de Django localmente con
manage.py runserver
.(eb-virt) ~$
cd ebdjango
(eb-virt) ~/ebdjango$
python manage.py runserver
-
En un navegador web, abra
http://127.0.0.1:8000/
para ver el sitio. -
Compruebe el registro del servidor para ver el resultado de la solicitud. Para detener el servidor web y volver al entorno virtual, presione Ctrl+C.
Django version 2.2, using settings 'ebdjango.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C. [07/Sep/2018 20:14:09] "GET / HTTP/1.1" 200 16348
Ctrl+C
Configure su aplicación Django para Elastic Beanstalk
Ahora que ya tiene un sitio de Django en su equipo local, puede configurarlo para implementarlo con Elastic Beanstalk.
De forma predeterminada, Elastic Beanstalk busca un archivo llamado application.py
para iniciar la aplicación. Como este archivo no existe en el proyecto de Django que ha creado, tendrá que realizar algunos ajustes en el entorno de su aplicación. También deberá configurar las variables de entorno para que puedan cargarse los módulos de la aplicación.
Para configurar su sitio para Elastic Beanstalk
-
Active el entorno virtual.
-
Ejecute
pip freeze
y, a continuación, guarde la salida en un archivo llamadorequirements.txt
.(eb-virt) ~/ebdjango$
pip freeze > requirements.txt
Elastic Beanstalk utiliza
requirements.txt
para determinar qué paquete se va a instalar en las instancias EC2 donde se ejecuta la aplicación. -
Cree un directorio llamado
.ebextensions
.(eb-virt) ~/ebdjango$
mkdir .ebextensions
-
En el directorio
.ebextensions
, añada un archivo de configuración llamadodjango.config
con el siguiente texto.ejemplo ~/ebdjango/.ebextensions/django.config
option_settings: aws:elasticbeanstalk:container:python: WSGIPath: ebdjango.wsgi:application
Esta configuración,
WSGIPath
, especifica la ubicación del script de WSGI que utiliza Elastic Beanstalk para iniciar su aplicación.nota
Si está utilizando una versión de la plataforma Python AMI de Amazon Linux (anterior a Amazon Linux 2), reemplace el valor
WSGIPath
porebdjango/wsgi.py
. El valor del ejemplo funciona con el servidor WSGI de Gunicorn, que no es compatible con las versiones de la plataforma de la AMI de Amazon Linux. -
Desactive el entorno virtual con el comando
deactivate
.(eb-virt) ~/ebdjango$
deactivate
Vuelva a activar su entorno virtual siempre que necesite añadir paquetes a su aplicación o ejecutar su aplicación localmente.
Implementación del sitio con la CLI de EB
Ha añadido todo lo que necesita para implementar su aplicación en Elastic Beanstalk. El directorio del proyecto debe ser similar al siguiente.
~/ebdjango/
|-- .ebextensions
| `-- django.config
|-- ebdjango
| |-- __init__.py
| |-- settings.py
| |-- urls.py
| `-- wsgi.py
|-- db.sqlite3
|-- manage.py
`-- requirements.txt
A continuación, creará el entorno de la aplicación e implementará su aplicación configurada con Elastic Beanstalk.
Inmediatamente después de la implementación, editará la configuración de Django para agregar al ajuste de Elastic Beanstalk de Django el nombre de dominio que ALLOWED_HOSTS
asignó a su aplicación. A continuación, volverá a implementar la aplicación. Se trata de un requisito de seguridad de Django, diseñado para impedir los ataques de encabezado de Host
HTTP. Para obtener más información, consulte Host header validation
Para crear un entorno e implementar la aplicación de Django
nota
El tutorial utiliza la CLI de EB como un mecanismo de implementación, pero también se puede utilizar la consola de Elastic Beanstalk para implementar un archivo ZIP que incluya el contenido del proyecto.
-
Inicialice el repositorio de la CLI de EB con el comando eb init.
~/ebdjango$
eb init -p python-3.7 django-tutorial
Application django-tutorial has been created.Este comando crea una aplicación llamada
django-tutorial
. También configura su repositorio local para crear entornos con la última versión de la plataforma Python 3.7. -
(Opcional) Ejecute de nuevo eb init para configurar un par de claves predeterminadas de forma que pueda usar SSH para conectarse a la instancia EC2 donde se ejecuta la aplicación.
~/ebdjango$
eb init
Do you want to set up SSH for your instances? (y/n):y
Select a keypair. 1) my-keypair 2) [ Create new KeyPair ]Seleccione un par de claves si ya tiene uno o siga las instrucciones para crear uno. Si no ve el símbolo del sistema o más adelante necesita cambiar la configuración, ejecute eb init -i.
-
Cree un entorno e implemente la aplicación en él con eb create.
~/ebdjango$
eb create django-env
nota
Si recibe un mensaje de error "service role required" (es necesario el rol de servicio), ejecute
eb create
interactivamente (sin especificar un nombre de entorno) y la CLI de EB creará el rol.Este comando crea un entorno de Elastic Beanstalk con equilibrio de carga denominado
django-env
. Se tarda alrededor de cinco minutos en crear el entorno. A medida que Elastic Beanstalk crea los recursos necesarios para ejecutar la aplicación, envía mensajes informativos que la CLI de EB transmite a su terminal. -
Cuando finalice el proceso de creación del entorno, busque el nombre de dominio de su nuevo entorno. Para ello, ejecute eb status.
~/ebdjango$
eb status
Environment details for: django-env Application name: django-tutorial ... CNAME:eb-django-app-dev.elasticbeanstalk.com
...El nombre de dominio del entorno es el valor de la propiedad
CNAME
. -
Abra el archivo
settings.py
en el directorioebdjango
. Localice el ajusteALLOWED_HOSTS
y, a continuación, agregue el nombre de dominio de la aplicación que encontró en el paso anterior al valor del ajuste. Si no encuentra este ajuste en el archivo, agréguelo en una línea nueva.... ALLOWED_HOSTS = ['
eb-django-app-dev.elasticbeanstalk.com
'] -
Guarde el archivo y, a continuación, vuelva a implementar la aplicación. Para ello, ejecute eb deploy. Cuando ejecuta eb deploy, la CLI de EB empaqueta el contenido del directorio del proyecto y lo implementa en su entorno.
~/ebdjango$
eb deploy
nota
Si utiliza Git con el proyecto, consulte Uso de la CLI de EB con Git.
-
Cuando finalice el proceso de actualización del entorno, abra el sitio web con eb open.
~/ebdjango$
eb open
Se abre una ventana del navegador con el nombre de dominio creado para su aplicación. Debería ver el mismo sitio web de Django que creó y probó localmente.
Si no ve la aplicación en ejecución o aparece un mensaje de error, consulte Solución de problemas de implementación para intentar determinar la causa del error.
En caso de que sí vea la aplicación en ejecución (le felicitamos en ese caso), habrá implementado la primera aplicación de Django con Elastic Beanstalk.
Actualizar la aplicación
Ahora que tiene una aplicación en ejecución en Elastic Beanstalk, puede actualizar y volver a implementar su aplicación o su configuración; Elastic Beanstalk se encargará de la tarea de actualizar sus instancias e iniciar la nueva versión de la aplicación.
Para este ejemplo, vamos a habilitar la consola de administración de Django y configurar otros ajustes.
Modificar la configuración del sitio
De forma predeterminada, el sitio web de Django utiliza la zona horaria UTC para mostrar el tiempo. Puede cambiar esta configuración especificando una zona horaria en settings.py
.
Para cambiar la zona horaria del sitio
-
Modifique el valor de
TIME_ZONE
ensettings.py
.ejemplo ~/ebdjango/ebdjango/settings.py
... # Internationalization LANGUAGE_CODE = 'en-us' TIME_ZONE =
'US/Pacific'
USE_I18N = True USE_L10N = True USE_TZ = TruePara obtener una lista de zonas horarias, visite esta página
. -
Implemente la aplicación en su entorno Elastic Beanstalk.
~/ebdjango/$
eb deploy
Crear un administrador del sitio
Puede crear un administrador del sitio para su aplicación de Django que tenga acceso a la consola de administración directamente desde el sitio web. Los detalles de inicio de sesión del administrador se almacenan de forma segura en la imagen de la base de datos local incluida en el proyecto predeterminado que genera Django.
Para crear un administrador del sitio
-
Inicialice la base de datos local de la aplicación de Django.
(eb-virt) ~/ebdjango$
python manage.py migrate
Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions 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 sessions.0001_initial... OK -
Ejecute
manage.py createsuperuser
para crear un administrador.(eb-virt) ~/ebdjango$
python manage.py createsuperuser
Username:admin
Email address:me@mydomain.com
Password:********
Password (again):********
Superuser created successfully. -
Para indicar a Django dónde debe almacenar los archivos estáticos, defina
STATIC_ROOT
ensettings.py
.ejemplo ~/ebdjango/ebdjango/settings.py
# Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/2.2/howto/static-files/ STATIC_URL = '/static/'
STATIC_ROOT = 'static'
-
Ejecute
manage.py collectstatic
para rellenar el directoriostatic
con los recursos estáticos (JavaScript, CSS e imágenes) del sitio de administración.(eb-virt) ~/ebdjango$
python manage.py collectstatic
119 static files copied to ~/ebdjango/static -
Implemente la aplicación.
~/ebdjango$
eb deploy
-
Consulte la consola de administración abriendo el sitio en el navegador y añadiendo
/admin/
a la dirección URL del sitio, como la siguiente.http://
djang-env.p33kq46sfh.us-west-2
.elasticbeanstalk.com/admin/ -
Inicie sesión con el nombre de usuario y la contraseña que ha configurado en el paso 2.
Puede utilizar un procedimiento similar de actualización/pruebas locales seguido de eb deploy. Elastic Beanstalk se encarga de la tarea de actualizar los servidores en directo, para que usted pueda centrarse en el desarrollo de la aplicación en lugar de en la administración del servidor.
Añadir un archivo de configuración de migración de la base de datos
Puede añadir comandos a su script .ebextensions
que se ejecuten cuando se actualice el sitio. Esto le permite generar automáticamente migraciones de base de datos.
Para añadir un paso de migración cuando se implemente su aplicación
-
Cree un archivo de configuración denominado
db-migrate.config
con el contenido siguiente.ejemplo ~/ebdjango/.ebextensions/db-migrate.config
container_commands: 01_migrate: command: "source /var/app/venv/*/bin/activate && python3 manage.py migrate" leader_only: true option_settings: aws:elasticbeanstalk:application:environment: DJANGO_SETTINGS_MODULE: ebdjango.settings
Este archivo de configuración activa el entorno virtual del servidor y ejecuta el comando
manage.py migrate
durante el proceso de implementación, antes de iniciar la aplicación. Como se ejecuta antes de iniciar la aplicación, deberá configurar la variable de entornoDJANGO_SETTINGS_MODULE
explícitamente (normalmentewsgi.py
se encarga de todo esto por usted durante el inicio). La especificación deleader_only: true
en el comando garantiza que se ejecute solo una vez cuando realice la implementación en varias instancias. -
Implemente la aplicación.
~/ebdjango$
eb deploy
Limpieza
Para ahorrar horas de instancias y otros recursos de AWS entre las sesiones de implementación, termine el entorno de Elastic Beanstalk con eb terminate.
~/ebdjango$ eb terminate django-env
Este comando finaliza el entorno y todos los recursos de AWS que se ejecutan en él. No elimina la aplicación. Al contrario, podrá crear más entornos con la misma configuración siempre que quiera ejecutando de nuevo eb create. Para obtener más información sobre los comandos de la CLI de EB, consulte Administración de entornos de Elastic Beanstalk con la CLI de EB.
Si ha terminado de trabajar con la aplicación de ejemplo, puede eliminar también la carpeta del proyecto y el entorno virtual.
~$ rm -rf ~/eb-virt
~$ rm -rf ~/ebdjango
Siguientes pasos
Para obtener más información sobre Django, como un tutorial detallado, consulte la documentación oficial
Si desea probar otra plataforma web de Python, consulte Implementación de una aplicación Flask en Elastic Beanstalk.