Exemplo de projeto com FastAPI e SQLModel usando async/await utilizado no mundo real.
Meu desejo é apresentar um motor de API REST utilizando o que considero que tem de melhor no universo Python. [MINHA OPINIÃO]
Conforme vou adquirindo mais conhecimento, vou ajustando o projeto para ficar mais claro.
- Python >=3.13
- uv >=0.9
Segue abaixo os passos para iniciar a aplicação.
Passos 1, 2 e 3 precisam ser executados somente na primeira vez.
Na primeira vez é necessario instalar todas as dependencias executando o seguinte comando:
uv syncCriar o arquivo .env na raiz do projeto com:
db_url=sqlite+aiosqlite:///database.db
db_debug=1
token_secret_key=09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7Preparar o banco de dados para o uso:
uv run migrateIniciar a aplicação (modo watch):
uv run serverApós iniciado, o OpenAPI Specification da aplicação estará disponivel em 2 endpoints:
Para executar os comandos a seguir, é necessario ter as dependencias instaladas.
uv run lintuv run unit_testuv run buildSão executados: validação de codigo e testes unitarios.
Iniciar a aplicação com o comando:
docker compose up| Será feito o build caso seja a primeira vez.
Executar os scripts de migração com o seguinte comando:
docker exec -it api-container bash -c 'DB_ROOT_URL="postgresql+psycopg://postgres:docker@db-service:5432/fastapi" alembic upgrade head'Os manifestos deste projeto foram desenvolvidos e testados utilizando microK8s e kind.
Para o manifesto do Kubernetes conseguir iniciar a aplicação, a imagem docker precisa estar no registry local.
Para isso minha recomendação é criar a imagem com o docker-compose:
docker compose buildPublicar a imagem no registry local:
docker compose pushkubectl apply -k k8sCriar um port-forward para acessar o banco de dados:
kubectl -n realworld port-forward deployments/db-deploy 5432:5432Com sua IDE favorita do Postgres, execute os seguintes comandos:
CREATE DATABASE fastapi;
CREATE USER fastapi_user WITH PASSWORD '123456';
GRANT CONNECT ON DATABASE fastapi TO fastapi_user;
GRANT USAGE ON SCHEMA public TO fastapi_user;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO fastapi_user;
GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO fastapi_user;
GRANT ALL ON ALL FUNCTIONS IN SCHEMA public TO fastapi_user;Executar os scripts de migração do banco de dados:
kubectl -n realworld exec deployments/api-deploy -- bash -c 'DB_ROOT_URL="postgresql+psycopg://postgres:docker@db-service.realworld.svc.cluster.local:5432/fastapi" alembic upgrade head'api: api-service.realworld.svc.cluster.local:8080
db: db-service.realworld.svc.cluster.local:5432kubectl -n realworld run mycurlpod --image=curlimages/curl -i --tty -- shexecute o comando:
curl -i http://api-service.realworld.svc.cluster.local:8080/docsmicrok8s enable dashboard
microk8s enable dns
microk8s enable registry
microk8s enable ingressExecutar o script: ./scripts/kind-with-registry.sh.
Ele foi copiado e ajustado.
kind delete clusterTodas as notas de alteração deste projeto serão documentados no CHANGELOG.md.