As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Implantar uma aplicação Django no Elastic Beanstalk
Este tutorial explica o processo de implantação de um site Django
Neste tutorial, você fará o seguinte:
Pré-requisitos
Para seguir este tutorial, você deve ter todos os Pré-requisitos comuns para Python instalados, incluindo os seguintes pacotes:
-
Python 3.7 ou posterior
-
pip
-
virtualenv
-
awsebcli
A framework do Django
nota
A criação de ambientes com a CLI do EB exige uma função de serviço. É possível criar uma função de serviço criando um ambiente no console do Elastic Beanstalk. Se você não tiver uma função de serviço, a CLI do EB tentará criar uma ao executar eb create
.
Configurar um ambiente virtual Python e instalar o Django
Crie um ambiente virtual com virtualenv
e use-o para instalar o Django e suas dependências. Usando um ambiente virtual, é possível saber exatamente de quais pacotes a aplicação precisa, para que eles sejam instalados nas instâncias do Amazon EC2 que executam a aplicação.
As etapas a seguir demonstram os comandos que você deve inserir para sistemas baseados em Unix e Windows, mostrados em guias separadas.
Para configurar o ambiente virtual
-
Crie um ambiente virtual denominado
eb-virt
. -
Ative o ambiente virtual.
Você verá
(eb-virt)
acrescentado ao começo do prompt de comando, indicando que você está em um ambiente virtual.nota
O restante das instruções mostra o prompt de comando do Linux no diretório inicial
~$
. No Windows, ele éC:\Users\
, em queUSERNAME
>USERNAME
é seu nome de login do Windows. -
Use
pip
para instalar o Django.(eb-virt)~$
pip install django==2.2
nota
A versão do Django que você instalar deve ser compatível com a versão do Python na configuração do Python do Elastic Beanstalk que você escolher para a implantação de seu aplicativo. Para obter informações sobre implantação, consulte Implantar o site com a CLI do EB neste tópico.
Para obter mais informações sobre as versões atuais da plataforma Python, consulte Python no documento Plataformas do AWS Elastic Beanstalk.
Para obter informações sobre a compatibilidade de versão do Django com o Python, consulte Qual versão do Python posso usar com o Django?
-
Para verificar se o Django está instalado, insira o seguinte.
(eb-virt)~$
pip freeze
Django==2.2 ...Esse comando relaciona todos os pacotes instalados em seu ambiente virtual. Posteriormente, você usará a saída desse comando para configurar o projeto para uso com o Elastic Beanstalk.
Criar um projeto Django
Agora você está pronto para criar um projeto Django e executá-lo em sua máquina, usando o ambiente virtual.
nota
Este tutorial usa SQLite, que é um mecanismo de banco de dados simples incluído no Python. O banco de dados é implantado com seus arquivos de projeto. Para ambientes de produção, recomendamos que você use o Amazon Relational Database Service (Amazon RDS) e que você o separe do ambiente. Para ter mais informações, consulte Adicionar uma instância de banco de dados do Amazon RDS ao seu ambiente Python Elastic Beanstalk.
Para gerar um aplicativo Django
-
Ative seu ambiente virtual.
Você verá o prefixo
(eb-virt)
acrescentado ao prompt de comando, indicando que você está em um ambiente virtual.nota
O restante das instruções mostra o prompt de comando do Linux
~$
em seu diretório inicial e no diretório inicial do Linux~/
. No Windows, eles sãoC:\Users\
, em queUSERNAME
>USERNAME
é seu nome de login do Windows. -
Use o comando
django-admin startproject
para criar um projeto Django denominadoebdjango
:(eb-virt)~$
django-admin startproject ebdjango
Este comando cria um site Django padrão denominado ebdjango com a seguinte estrutura de diretório.
~/ebdjango |-- ebdjango | |-- __init__.py | |-- settings.py | |-- urls.py | `-- wsgi.py `-- manage.py
-
Execute o site Django localmente com
manage.py runserver
:(eb-virt) ~$
cd ebdjango
(eb-virt) ~/ebdjango$
python manage.py runserver
-
Em um navegador da web, abra
http://127.0.0.1:8000/
para visualizar o site. -
Verifique o log do servidor para ver a saída da sua solicitação. Para interromper o servidor web e retornar ao seu ambiente virtual, pressione 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
Configurar a aplicação Django para o Elastic Beanstalk
Agora que você tem um site desenvolvido pelo Django em sua máquina local, você pode configurá-lo para implantação com o Elastic Beanstalk.
Por padrão, o Elastic Beanstalk procura um arquivo chamado application.py
para iniciar sua aplicação. Como isso não existe no projeto Django que você criou, é necessário fazer alguns ajustes no ambiente do aplicativo. Também é necessário definir variáveis de ambiente para que os módulos do aplicativo possam ser carregados.
Como configurar seu site para o Elastic Beanstalk
-
Ative seu ambiente virtual.
-
Execute
pip freeze
e salve a saída em um arquivo chamadorequirements.txt
.(eb-virt) ~/ebdjango$
pip freeze > requirements.txt
O Elastic Beanstalk usa o
requirements.txt
para determinar que pacote instalar nas instâncias do EC2 que executam a aplicação. -
Crie um diretório chamado
.ebextensions
.(eb-virt) ~/ebdjango$
mkdir .ebextensions
-
No diretório
.ebextensions
, adicione um arquivo de configuração chamadodjango.config
com o texto a seguir.exemplo ~/ebdjango/.ebextensions/django.config
option_settings: aws:elasticbeanstalk:container:python: WSGIPath: ebdjango.wsgi:application
Essa configuração,
WSGIPath
, especifica o local do script WSGI que o Elastic Beanstalk usa para iniciar a aplicação.nota
Se você estiver usando uma versão de plataforma Python da AMI do Amazon Linux (anterior ao Amazon Linux 2), substitua o valor
WSGIPath
porebdjango/wsgi.py
. O valor no exemplo funciona com o servidor WSGI do Gunicorn, que não é mais compatível nas versões da plataforma da AMI do Amazon Linux. -
Use o comando
deactivate
para desativar o ambiente virtual.(eb-virt) ~/ebdjango$
deactivate
Reative o ambiente virtual sempre que for necessário adicionar pacotes ao aplicativo ou executá-lo localmente.
Implantar o site com a CLI do EB
Você adicionou tudo o que precisa para implantar a aplicação no Elastic Beanstalk. O diretório do projeto deve ter esta aparência:
~/ebdjango/
|-- .ebextensions
| `-- django.config
|-- ebdjango
| |-- __init__.py
| |-- settings.py
| |-- urls.py
| `-- wsgi.py
|-- db.sqlite3
|-- manage.py
`-- requirements.txt
Depois, você criará o ambiente da aplicação e implantará a aplicação configurada com o Elastic Beanstalk.
Imediatamente após a implantação, edite a configuração do Django para adicionar o nome de domínio que o Elastic Beanstalk atribuiu à aplicação para os ALLOWED_HOSTS
do Django. Depois, reimplante o aplicativo. Este é um requisito de segurança do Django, projetado para impedir ataques ao cabeçalho de Host
HTTP. Para obter mais informações, consulte Validação do cabeçalho do host
Para criar um ambiente e implantar o aplicativo Django
nota
O tutorial usa a CLI do EB como um mecanismo de implantação, mas também é possível usar o console do Elastic Beanstalk para implantar um arquivo zip com o conteúdo do seu projeto.
-
Inicialize o repositório da EB CLI com o comando eb init:
~/ebdjango$
eb init -p python-3.7 django-tutorial
Application django-tutorial has been created.Esse comando cria um aplicativo chamado
django-tutorial
. Ele também configura o seu repositório local para criar ambientes com a versão mais recente da plataforma Python 3.7. -
(Opcional) Execute eb init novamente para configurar um par de chaves padrão para que você possa usar SSH para se conectar à instância do EC2 que está executando seu aplicativo:
~/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 ]Selecione um par de chaves se você já tiver um, ou siga os as instruções na tela para criar um. Se nenhum prompt aparecer ou se for necessário alterar as configurações posteriormente, execute eb init -i.
-
Crie um ambiente e implante o aplicativo nele com eb create.
~/ebdjango$
eb create django-env
nota
Se você vir uma mensagem de erro "service role required", execute
eb create
interativamente (sem especificar um nome de ambiente) e a CLI do EB cria a função para você.Esse comando cria um ambiente do Elastic Beanstalk com carga balanceada chamado
django-env
. A criação do ambiente leva cerca de 5 minutos. Como o Elastic Beanstalk cria os recursos necessários para executar a aplicação, ele gera mensagens informativas que a CLI do EB transmite ao terminal. -
Quando o processo de criação do ambiente for concluído, localize o nome de domínio do seu novo ambiente executando eb status.
~/ebdjango$
eb status
Environment details for: django-env Application name: django-tutorial ... CNAME:eb-django-app-dev.elasticbeanstalk.com
...Seu nome de domínio do ambiente é o valor da propriedade
CNAME
. -
Abra o arquivo
settings.py
no diretórioebdjango
. Localize a configuraçãoALLOWED_HOSTS
e adicione o nome de domínio do aplicativo que você encontrou na etapa anterior ao valor da configuração. Se você não encontrar essa configuração no arquivo, adicione-a em uma nova linha.... ALLOWED_HOSTS = ['
eb-django-app-dev.elasticbeanstalk.com
'] -
Salve o arquivo e, em seguida, implante o aplicativo executando eb deploy. Quando você executa eb deploy, a EB CLI empacota o conteúdo do diretório do projeto e implanta-o em seu ambiente.
~/ebdjango$
eb deploy
nota
Se você estiver usando o Git com seu projeto, consulte Usar a EB CLI com o Git.
-
Quando o processo de atualização do ambiente for concluído, abra o site com eb open.
~/ebdjango$
eb open
Isso abre uma janela do navegador usando o nome de domínio criado para o seu aplicativo. Você deve ver o mesmo site Django que você criou e testou localmente.
Se o aplicativo não aparecer em execução ou se houver uma mensagem de erro, consulte Solução de erros de implantação para obter ajuda sobre como determinar a causa do erro.
Se a aplicação aparecer em execução, você implantou sua primeira aplicação Django com o Elastic Beanstalk. Parabéns!
Atualizar seu aplicativo
Agora que você tem uma aplicação em execução no Elastic Beanstalk, pode atualizar e reimplantar a aplicação ou sua configuração, e o Elastic Beanstalk fará o trabalho de atualizar suas instâncias e iniciar sua nova versão da aplicação.
Para este exemplo, vamos habilitar o console de administração do Django e definir algumas outras configurações.
Modificar as configurações do site
Por padrão, o site Django usa o fuso horário UTC para exibir a hora. Você pode alterá-lo especificando um fuso horário em settings.py
.
Para alterar o fuso horário do site
-
Modifique a configuração
TIME_ZONE
emsettings.py
.exemplo ~/ebdjango/ebdjango/settings.py
... # Internationalization LANGUAGE_CODE = 'en-us' TIME_ZONE =
'US/Pacific'
USE_I18N = True USE_L10N = True USE_TZ = TruePara obter uma lista de fusos horários, visite esta página
. -
Implante a aplicação no ambiente do Elastic Beanstalk.
~/ebdjango/$
eb deploy
Criar um administrador de site
É possível criar um administrador de site para o aplicativo Django para acessar o console de administração diretamente do site. Os detalhes de login do administrador são armazenados de forma segura na imagem do banco de dados local incluída no projeto padrão gerado pelo Django.
Para criar um administrador de site
-
Inicialize o banco de dados local do aplicativo 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 -
Execute
manage.py createsuperuser
para criar um administrador.(eb-virt) ~/ebdjango$
python manage.py createsuperuser
Username:admin
Email address:me@mydomain.com
Password:********
Password (again):********
Superuser created successfully. -
Para informar ao Django onde armazenar os arquivos estáticos, defina
STATIC_ROOT
emsettings.py
.exemplo ~/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'
-
Execute
manage.py collectstatic
para preencher o diretóriostatic
com os ativos estáticos (JavaScript, CSS e imagens) para o site de administração.(eb-virt) ~/ebdjango$
python manage.py collectstatic
119 static files copied to ~/ebdjango/static -
Implante o aplicativo.
~/ebdjango$
eb deploy
-
Exiba o console de administração abrindo o site em seu navegador, anexando
/admin/
ao URL do site, como o seguinte:http://
djang-env.p33kq46sfh.us-west-2
.elasticbeanstalk.com/admin/ -
Faça login com o nome de usuário e a senha que você configurou na etapa 2.
Você pode usar um procedimento semelhante de atualização/teste local seguido por eb deploy. O Elastic Beanstalk cuida do processo de atualizar seus servidores em tempo real para que você possa se dedicar ao desenvolvimento de aplicações, em vez da administração de servidor.
Adicionar um arquivo de configuração de migração de banco de dados
É possível adicionar comandos ao script .ebextensions
que serão executados quando o site for atualizado. Isso permite gerar automaticamente migrações de banco de dados.
Para adicionar uma etapa de migração quando o aplicativo é implantado
-
Crie um arquivo de configuração chamado
db-migrate.config
com o conteúdo a seguir.exemplo ~/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
Esse arquivo de configuração ativa o ambiente virtual do servidor e executa o comando
manage.py migrate
durante o processo de implantação, antes de iniciar a sua aplicação. Como ele é executado antes da inicialização do aplicativo, também é necessário configurar a variável de ambienteDJANGO_SETTINGS_MODULE
explicitamente (em geral, owsgi.py
cuida desse procedimento para você durante o startup). A especificação deleader_only: true
no comando garante que ele seja executado somente uma vez quando você faz a implantação em várias instâncias. -
Implante o aplicativo.
~/ebdjango$
eb deploy
Limpeza
Para economizar horas de instância e outros recursos da AWS entre as sessões de desenvolvimento, termine o ambiente do Elastic Beanstalk com eb terminate.
~/ebdjango$ eb terminate django-env
Esse comando termina o ambiente e todos os recursos da AWS que são executados nele. Ele não exclui o aplicativo, mas você sempre pode criar mais ambientes com a mesma configuração executando eb create novamente. Para obter mais informações sobre comandos da CLI do EB, consulte Gerenciar ambientes do Elastic Beanstalk com a CLI do EB.
Se você já concluiu o aplicativo de exemplo, também pode remover a pasta do projeto e o ambiente virtual.
~$ rm -rf ~/eb-virt
~$ rm -rf ~/ebdjango
Próximas etapas
Para obter mais informações sobre o Django, incluindo um tutorial detalhado, consulte a documentação oficial
Se você deseja testar outra framework da Web para Python, consulte Implantar uma aplicação Flask no Elastic Beanstalk.