Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 4 additions & 14 deletions docker/backend/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
7 changes: 3 additions & 4 deletions docker/docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
11 changes: 3 additions & 8 deletions docker/nginx/nginx.conf
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -170,11 +170,6 @@ http {
proxy_cache off;
}

# 不带 /api/v1/ 前缀的请求直接返回 404
location = /api/v1 {
return 404;
}

# ==================== Nginx 健康检查 ====================
location /nginx-health {
access_log off;
Expand Down