Skip to content

Commit

Permalink
Adicionando nota sobre inicialização do postgres com healthcheck
Browse files Browse the repository at this point in the history
related #48

Modified-by: dunossauro <[email protected]>
  • Loading branch information
dunossauro committed Jun 3, 2024
1 parent 31199a8 commit ee1f50f
Showing 1 changed file with 31 additions and 2 deletions.
33 changes: 31 additions & 2 deletions aulas/10.md
Original file line number Diff line number Diff line change
Expand Up @@ -443,7 +443,7 @@ Este processo garante que as migrações do banco de dados são realizadas autom
---

??? info "Nota de revisão sobre variáveis de ambiente"
Utilizar variáveis de ambiente definidas em um arquivo `.env` é uma prática recomendada para cenários de produção devido à segurança que oferece. No entanto, para manter a simplicidade e o foco nas funcionalidades do FastAPI neste curso, optamos por explicitar essas variáveis no `compose.yaml`. Isso é particularmente relevante, pois o Docker Compose é utilizado apenas para o ambiente de desenvolvimento; no deploy para [fly.io](http://fly.io), o qual é o nosso foco, o compose não será utilizado em produção.
Utilizar variáveis de ambiente definidas em um arquivo `.env` é uma prática recomendada para cenários de produção devido à segurança que oferece. No entanto, para manter a simplicidade e o foco nas funcionalidades do FastAPI neste curso, optamos por explicitar essas variáveis no `compose.yaml`. Isso é particularmente relevante, pois o Docker Compose é utilizado apenas para o ambiente de desenvolvimento; no deploy para [fly.io](http://fly.io){:target="_blank"}, o qual é o nosso foco, o compose não será utilizado em produção.

Ainda assim, é valioso mencionar como essa configuração mais segura seria realizada, especialmente para aqueles que planejam utilizar o Docker Compose em produção.

Expand Down Expand Up @@ -498,7 +498,36 @@ Este processo garante que as migrações do banco de dados são realizadas autom

Com essa configuração, o Pydantic irá ignorar quaisquer variáveis no `.env` que não sejam explicitamente declaradas na classe `Settings`, evitando assim conflitos e erros inesperados.

> Agradecimentos especiais a [@vcwild](https://github.com/vcwild) e [@williangl](https://github.com/williangl) pelas revisões valiosas nesta aula que me fizeram criar essa nota. :heart:
> Agradecimentos especiais a [@vcwild](https://github.com/vcwild){:target="_blank"} e [@williangl](https://github.com/williangl){:target="_blank"} pelas revisões valiosas nesta aula que me fizeram criar essa nota. :heart:


??? example "Boas práticas de inicialização do banco de dados"
Como esse é um caso pensado em estudo, possivelmente não haverá problemas relacionados à inicialização. Em um ambiente de produção, porém, não existe a garantia de que o postgres está pronto para uso no momento em que o `entrypoint` for executado. Seria necessário que, antes da execução da migração, o container do banco de dados tivesse a inicialização finalizada.

Isso é feito usando o campo `healthcheck` do `compose.yaml`:

```py title="compose.yaml" hl_lines="12-16"
services:
fastzero_database:
image: postgres
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_USER: app_user
POSTGRES_DB: app_db
POSTGRES_PASSWORD: app_password
ports:
- "5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready"]
interval: 5s
timeout: 5s
retries: 10
```

Dessa forma, ele irá executar o comando [`pg_isready`](https://www.postgresql.org/docs/current/app-pg-isready.html){:target="_blank"} a cada 5 segundos por 10 vezes. `pg_isready` é um utilitário do PostgreSQL que verifica se ele já está operando e pronto para receber conexões. Desta forma, a inicialização do container só termina quando o postgres estiver ouvindo conexões.

Dica do [@ayharano](https://github.com/ayharano){:target="_blank"} nessa [issue](https://github.com/dunossauro/fastapi-do-zero/issues/48){:target="_blank"}.


## Testes com Docker
Expand Down

0 comments on commit ee1f50f

Please sign in to comment.