O que significa fazer o "deploy" de uma aplicação? Qual a diferença fundamental entre os ambientes de desenvolvimento e produção?
Por que não devemos reutilizar o ambiente virtual (venv) entre diferentes máquinas? Como devemos proceder para garantir que as dependências sejam instaladas corretamente em diferentes ambientes?
Explique a importância de configurar DEBUG=False em produção. Quais são os riscos de manter DEBUG=True em um servidor de produção?
Por que é importante nunca adicionar o SECRET_KEY de produção ao repositório Git? Como devemos gerenciar informações sensíveis como senhas e chaves secretas?
O que é o Gunicorn e qual sua função no deploy de aplicações Django? Por que não usamos o servidor de desenvolvimento do Django (runserver) em produção?
Explique o funcionamento do Gunicorn como daemon no systemd. Qual a diferença entre os arquivos .socket e .service?
Qual a função do Nginx no contexto do deploy de uma aplicação Django? Por que utilizamos o Nginx como proxy reverso em vez de acessar o Gunicorn diretamente?
Como o Nginx serve arquivos estáticos (CSS, JavaScript, imagens) de forma diferente do conteúdo dinâmico da aplicação Django?
Explique o processo de coleta de arquivos estáticos com o comando collectstatic. Por que esse passo é necessário?
Ao configurar múltiplos projetos Django em um mesmo servidor, quais estratégias podem ser utilizadas? Quais os cuidados necessários ao usar subdiretórios?
Descreva o processo completo de atualização de um projeto Django em produção após fazer um git pull. Quais comandos devem ser executados e em que ordem?
O que é conteinerização? Como essa tecnologia difere da virtualização tradicional?
Compare máquinas virtuais e containers em relação aos seguintes aspectos:
Uso de memória
Tempo de inicialização
Compartilhamento de recursos
Nível de isolamento
Portabilidade
Explique os seguintes conceitos fundamentais do Docker:
Imagem
Container
Volume
Network
Registry
O que é um Dockerfile? Explique a função das seguintes instruções:
FROM
WORKDIR
COPY e ADD
RUN
CMD e ENTRYPOINT
EXPOSE
Qual a diferença entre construir uma imagem Docker e executar um container? Apresente os comandos para ambas as operações.
Explique as seguintes opções do comando docker run:
-d
-p 8000:8000
-v $(pwd)/data:/app/data
-e DEBUG=False
--name
--rm
O que é o Docker Hub? Como podemos baixar uma imagem oficial do Docker Hub e como podemos enviar nossas próprias imagens?
O que é o Docker Compose e qual problema ele resolve? Em que situações é mais vantajoso usar Docker Compose em vez de comandos docker run individuais?
Explique a estrutura básica de um arquivo docker-compose.yml. O que são "services", "volumes" e "networks" nesse contexto?
Quais as principais diferenças entre usar docker-compose up e docker-compose up -d? Como visualizar os logs dos serviços após iniciá-los em background?
No contexto do tutorial de deploy Django com Docker, explique a função de cada um dos seguintes serviços:
db (PostgreSQL)
web (Django + Gunicorn)
nginx
Por que utilizamos um script entrypoint.sh no container Django? O que esse script faz antes de iniciar o Gunicorn?
Como o Docker Compose gerencia a ordem de inicialização dos containers usando a diretiva depends_on? Isso garante que o banco de dados esteja completamente pronto antes do Django tentar se conectar?
Explique como funcionam os volumes nomeados no Docker Compose (ex: postgres_data, static_volume, media_volume). Por que eles são importantes para persistência de dados?
Como o Nginx se comunica com o Gunicorn dentro da rede Docker? Por que podemos usar server web:8000 em vez de um endereço IP?
Compare o deploy tradicional de Django (aula 13) com o deploy usando Docker (aula 14). Quais as vantagens e desvantagens de cada abordagem?
Qual a função do arquivo .dockerignore? Por que devemos excluir arquivos como .git, venv, .env e __pycache__ da imagem Docker?
Quais comandos Docker/Docker Compose você usaria para:
Ver os logs do serviço web em tempo real
Executar as migrations do Django
Criar um superusuário
Acessar o shell bash do container web
Fazer backup do banco de dados PostgreSQL
Cite pelo menos 5 boas práticas ao trabalhar com Docker em produção.
Quais tecnologias de orquestração de containers você pode usar além do Docker Compose para ambientes de produção em larga escala?