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;