From a5290c5e035f7e6028780f08032e3194b55abf12 Mon Sep 17 00:00:00 2001 From: jinql Date: Mon, 1 Sep 2025 23:38:52 +0800 Subject: [PATCH] 25.09.01 --- Dockerfile | 29 ++++++++++++++++++++++------ Dockerfile.1 | 16 +++++++++++++++ favicon_app/routes/favicon_routes.py | 2 +- gunicorn.conf.py | 17 +++++++++++----- 4 files changed, 52 insertions(+), 12 deletions(-) create mode 100644 Dockerfile.1 diff --git a/Dockerfile b/Dockerfile index 5371c5a..bc4e561 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,16 +1,33 @@ -FROM python:3.12-slim +FROM python:3.12-slim AS builder WORKDIR /app COPY requirements.txt . - -RUN pip install --no-cache-dir -r requirements.txt +RUN pip wheel --no-cache-dir --no-deps --wheel-dir /app/wheels -r requirements.txt COPY . . +RUN python -m compileall -b . + +FROM python:3.12-slim + +WORKDIR /app + +COPY --from=builder /app/wheels /wheels +COPY --from=builder /app/requirements.txt . +RUN pip install --no-cache /wheels/* + +COPY --from=builder /app /app + +RUN find . -type d -name "__pycache__" | while read -r dir; do \ + module_dir=$(dirname "$dir"); \ + mv "$dir"/*.pyc "$module_dir/"; \ + rmdir "$dir"; \ +done + +RUN find . -name "*.py" -delete + EXPOSE 8000 # CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] - -# CMD ["gunicorn", "-w", "4", "-k", "uvicorn.workers.UvicornWorker", "-b", "0.0.0.0:8000", "main:app"] -CMD ["gunicorn", "--config", "gunicorn.conf.py", "main:app"] +CMD ["gunicorn", "--config", "gunicorn.conf.pyc", "main:app"] diff --git a/Dockerfile.1 b/Dockerfile.1 new file mode 100644 index 0000000..5371c5a --- /dev/null +++ b/Dockerfile.1 @@ -0,0 +1,16 @@ +FROM python:3.12-slim + +WORKDIR /app + +COPY requirements.txt . + +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . + +EXPOSE 8000 + +# CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] + +# CMD ["gunicorn", "-w", "4", "-k", "uvicorn.workers.UvicornWorker", "-b", "0.0.0.0:8000", "main:app"] +CMD ["gunicorn", "--config", "gunicorn.conf.py", "main:app"] diff --git a/favicon_app/routes/favicon_routes.py b/favicon_app/routes/favicon_routes.py index 7575c19..b0c3fb5 100644 --- a/favicon_app/routes/favicon_routes.py +++ b/favicon_app/routes/favicon_routes.py @@ -34,7 +34,7 @@ async def get_favicon( bg_tasks: BackgroundTasks, url: Optional[str] = Query(None, description="网址:eg. https://www.baidu.com"), refresh: Optional[str] = Query(None, include_in_schema=False), - sync: Optional[str] = Query(False, description="是否使用同步方式获取") + sync: Optional[str] = Query('false', description="是否使用同步方式获取") ): """获取网站图标""" return await _service.get_favicon_handler(request, bg_tasks, url, refresh, sync) diff --git a/gunicorn.conf.py b/gunicorn.conf.py index a68f262..b795208 100644 --- a/gunicorn.conf.py +++ b/gunicorn.conf.py @@ -3,18 +3,19 @@ # 绑定地址和端口 bind = "0.0.0.0:8000" -# Worker 进程数 +# Worker 进程数(推荐 CPU 核心数 * 2 + 1) workers = 4 -# 使用 Uvicorn 的 ASGI Worker +# 工作模式(sync、gevent、uvicorn.workers.UvicornWorker) worker_class = "uvicorn.workers.UvicornWorker" -# 可选:日志级别 +# 日志级别(debug、info、warning、error、critical) loglevel = "info" -# loglevel = "warning" -# 可选:访问日志和错误日志输出到控制台(Docker 常用) +# 访问日志文件("-" 表示输出到 stdout) accesslog = "-" + +# 错误日志文件 errorlog = "-" # 可选:超时时间(秒) @@ -22,3 +23,9 @@ timeout = 120 # Keep - Alive超时 keepalive = 5 + +# 进程名(ps aux 中显示) +# proc_name = "gunicorn" + +# 守护进程运行(后台运行,默认 False) +# daemon = True