diff --git a/Dockerfile.complete b/Dockerfile.complete index 73d1afd..a7b0d67 100644 --- a/Dockerfile.complete +++ b/Dockerfile.complete @@ -90,11 +90,11 @@ WORKDIR /app/backend # 复制前端静态文件到 nginx COPY --from=frontend-builder /tmp/frontend/dist /usr/share/nginx/html -# 配置 nginx +# 配置 nginx(单镜像版:前端静态文件 + 本地 backend 代理,见 nginx/standalone.conf) RUN rm -rf /etc/nginx/conf.d/default.conf # 删除默认 nginx site,防止 default_server 劫持 80 端口 RUN rm -f /etc/nginx/sites-enabled/default -COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf +COPY ./nginx/standalone.conf /etc/nginx/conf.d/default.conf # 创建 supervisor 配置 # 关键点:supervisord 默认 *不* 把自己的环境变量传给子进程。 @@ -129,8 +129,7 @@ priority=20 environment=BACKEND_PORT="%(ENV_BACKEND_PORT)s",BACKEND_HOST="%(ENV_BACKEND_HOST)s",TRANSCRIBER_TYPE="%(ENV_TRANSCRIBER_TYPE)s",WHISPER_MODEL_SIZE="%(ENV_WHISPER_MODEL_SIZE)s",FFMPEG_BIN_PATH="%(ENV_FFMPEG_BIN_PATH)s",HF_ENDPOINT="%(ENV_HF_ENDPOINT)s",STATIC="%(ENV_STATIC)s",OUT_DIR="%(ENV_OUT_DIR)s",DATA_DIR="%(ENV_DATA_DIR)s",NOTE_OUTPUT_DIR="%(ENV_NOTE_OUTPUT_DIR)s",DATABASE_URL="%(ENV_DATABASE_URL)s",IMAGE_BASE_URL="%(ENV_IMAGE_BASE_URL)s",ENV="%(ENV_ENV)s",GROQ_TRANSCRIBER_MODEL="%(ENV_GROQ_TRANSCRIBER_MODEL)s" EOF -# 修改 nginx 配置:backend 代理到本地,前端由 nginx 直接服务静态文件 -RUN sed -i 's/proxy_pass http:\/\/backend:8483/proxy_pass http:\/\/127.0.0.1:8483/g' /etc/nginx/conf.d/default.conf +# nginx/standalone.conf 已直接写好本地 backend(127.0.0.1:8483)与前端静态服务,无需再 sed 改写。 # 启动 supervisor # 推荐启动方式(覆盖默认 env): diff --git a/nginx/default.conf b/nginx/default.conf index 1c3451d..efac1d1 100644 --- a/nginx/default.conf +++ b/nginx/default.conf @@ -8,10 +8,10 @@ server { gzip_proxied any; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml; + # 多容器(docker-compose)部署:前端在独立的 frontend 容器,代理过去。 + # 单镜像(Dockerfile.complete)部署请勿用本文件,改用 nginx/standalone.conf。 location / { - root /usr/share/nginx/html; - index index.html; - try_files $uri $uri/ /index.html; + proxy_pass http://frontend:80; } location /api/ { diff --git a/nginx/standalone.conf b/nginx/standalone.conf new file mode 100644 index 0000000..be6d99c --- /dev/null +++ b/nginx/standalone.conf @@ -0,0 +1,41 @@ +# 单镜像(Dockerfile.complete / 一体化部署)专用 nginx 配置。 +# +# 与 nginx/default.conf(docker-compose 多容器版)的关键区别: +# - 前端不再由独立的 frontend 容器提供,构建产物已直接 COPY 到本镜像的 +# /usr/share/nginx/html,所以 location / 走【静态文件】而非反代 frontend; +# - backend 与 nginx 同处一个容器,所以 /api、/static 代理到 127.0.0.1:8483。 +# +# 注意:请勿把本文件的 location / 改成代理 frontend,否则单镜像里没有 frontend +# 服务,会回退到 nginx 默认欢迎页。多容器(compose)请改 nginx/default.conf。 +server { + listen 80; + client_max_body_size 10G; + + gzip on; + gzip_vary on; + gzip_min_length 1024; + gzip_proxied any; + gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml; + + # 前端静态文件由本容器直接服务(构建产物已 COPY 到此目录) + location / { + root /usr/share/nginx/html; + index index.html; + try_files $uri $uri/ /index.html; + } + + # backend 与 nginx 同容器,代理到本地 + location /api/ { + proxy_pass http://127.0.0.1:8483; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } + + location /static/ { + proxy_pass http://127.0.0.1:8483/static/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + expires 7d; + add_header Cache-Control "public, immutable"; + } +}