From 84f22e366e2addddac3b696d874c781b8260f395 Mon Sep 17 00:00:00 2001 From: zhangtao <9480807882@qq.com> Date: Tue, 12 May 2026 19:21:26 +0800 Subject: [PATCH] =?UTF-8?q?refactor(docker):=20=E7=AE=80=E5=8C=96=E5=90=8E?= =?UTF-8?q?=E7=AB=AF=E5=AE=B9=E5=99=A8=E9=85=8D=E7=BD=AE=E5=8F=8A=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E4=BB=A3=E7=90=86=E8=BD=AC=E5=8F=91=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/backend/Dockerfile | 18 ++++-------------- docker/docker-compose.yaml | 7 +++---- docker/nginx/nginx.conf | 11 +++-------- 3 files changed, 10 insertions(+), 26 deletions(-) diff --git a/docker/backend/Dockerfile b/docker/backend/Dockerfile index dcb38fecf..6fd1b74f7 100644 --- a/docker/backend/Dockerfile +++ b/docker/backend/Dockerfile @@ -37,24 +37,14 @@ ENV PYTHONUNBUFFERED=1 \ PIP_NO_CACHE_DIR=1 \ TZ=Asia/Shanghai -# 创建非 root 用户和日志目录 -RUN groupadd -r fastapiadmin && \ - useradd -r -g fastapiadmin -u 1001 -m -s /sbin/nologin fastapiadmin && \ - mkdir -p /home/logs && \ - chown fastapiadmin:fastapiadmin /home/logs && \ - chmod 755 /home/logs - WORKDIR /home -# 从构建阶段复制依赖(直接指定所有者,避免后续 chown) -COPY --from=builder --chown=fastapiadmin:fastapiadmin /home/deps /home/deps +# 从构建阶段复制依赖 +COPY --from=builder /home/deps /home/deps ENV PYTHONPATH=/home/deps:$PYTHONPATH -# 复制应用代码(一步到位设置所有者,省去 chmod -R 耗时) -COPY --chown=fastapiadmin:fastapiadmin ./backend/ . - -# 切换到非 root 用户 -USER fastapiadmin +# 复制应用代码(运行时由 volume 覆盖,此处仅作为镜像兜底) +COPY ./backend/ . EXPOSE 8001 diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index 4fb5b2985..2718a5066 100644 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -106,10 +106,9 @@ services: REDIS_PORT: "6379" ports: - "${BACKEND_PORT:-8001}:8001" - # 生产环境建议注释掉以下卷挂载,使用镜像内代码; - # 开发调试时可取消注释,实现代码热更新 - # volumes: - # - ../backend:/home + # 挂载宿主机代码到容器(热更新,生产环境保留以便读取 .env.prod 等配置文件) + volumes: + - ../backend:/home depends_on: mysql: condition: service_healthy diff --git a/docker/nginx/nginx.conf b/docker/nginx/nginx.conf index 091f13dc6..12b1fbf61 100644 --- a/docker/nginx/nginx.conf +++ b/docker/nginx/nginx.conf @@ -143,13 +143,13 @@ http { } # ==================== 后端 API 代理 ==================== - location /api/v1/ { + location /api/v1 { # 速率限制: 每 IP 每秒最多 30 个 API 请求 limit_req zone=api_limit burst=20 nodelay; limit_conn conn_limit 100; - # 后端服务器地址(结尾 / 会去掉 /api/v1 前缀再转发) - proxy_pass http://backend:8001/; + # 完整转发 /api/v1 前缀到后端(FastAPI root_path 机制处理) + proxy_pass http://backend:8001; # WebSocket 支持 proxy_http_version 1.1; @@ -170,11 +170,6 @@ http { proxy_cache off; } - # 不带 /api/v1/ 前缀的请求直接返回 404 - location = /api/v1 { - return 404; - } - # ==================== Nginx 健康检查 ==================== location /nginx-health { access_log off;