python fastapi tips

集成prometheus

from prometheus_fastapi_instrumentator import Instrumentator
instrumentator = Instrumentator()
instrumentator.instrument(app)
@app.on_event("startup")
async def _startup():
instrumentator.expose(app,endpoint="/healthz/metrics",tags=["healthz"])

过滤health check 日志

import logging
class EndpointFilter(logging.Filter):
def filter(self, record: logging.LogRecord) -> bool:
return record.getMessage().find("/healthz") == -1
logging.getLogger("uvicorn.access").addFilter(EndpointFilter())

sqlmodel自定义postgres schema

from sqlmodel import SQLModel, Field
class Item(SQLModel, table=True):
__table_args__ = {'schema': 'myschema'}

sqlmodel自定义postgres 列名

from sqlmodel import SQLModel, Field
class Item(SQLModel, table=True):
id: int | None = Field(default=None, primary_key=True,sa_column_kwargs={"name": "myId"})

fastapi docker ci

bitbucket pipeline里需要先cd到根目录

FROM python:3.13 AS base
WORKDIR /app
EXPOSE 80
COPY ./requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt
COPY ./app /app/app
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]

部署到k8s swagger报错

ingress带path导致, 设置root_path,增加一个环境变量ROOT_PATH,本地设为空,其它环境则设为域名后面的path

app = FastAPI(
docs_url="/swagger",
root_path= settings.ROOT_PATH
)
posted @ 2025-03-20 16:55  马行空的博客  阅读(42)  评论(0)    收藏  举报
点击右上角即可分享
微信分享提示