尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

NocoBase 生产部署如何用 Nginx 反向代理与静态资源代理

NocoBase 生产部署如何用 Nginx 反向代理与静态资源代理 NocoBase 生产部署如何用 Nginx 反向代理与静态资源代理【免费下载链接】nocobaseNocoBase is an open-source AI no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-proven infrastructure and a WYSIWYG no-code interface, so you get both speed and reliability.项目地址: https://gitcode.com/GitHub_Trending/no/nocobase在生产环境中部署 NocoBase 时官方推荐让页面与 API 保持同源通过同一域名下的 Nginx 反向代理把${APP_PUBLIC_PATH}api/和${APP_PUBLIC_PATH}files/转发到 NocoBase 服务同时由 Nginx 直接返回前端构建产物等静态资源并把API_BASE_URL留空。这篇文章给出两条可执行的路径Docker 安装的应用用外部 Nginx 容器或宿主机 Nginx接入用 CLInb init安装的应用用nb proxy nginx命令生成并管理代理配置。两条路径都以生成的 Nginx 配置能被校验、重载并正确覆盖/files/、上传目录、SPA 回退页作为完成标准。适用前提应用已完成安装Docker 安装推荐nocobase/nocobase:latest-full-no-nginx这类不带内置 Nginx 的镜像或已用nb init安装。生产环境不建议直接源码部署。如果要部署多个彼此独立的 NocoBase 服务为每个服务使用不同的hostname如app1.example.com、app2.example.com不要只靠端口区分——浏览器 cookie 不按端口隔离同 hostname 下不同端口的服务会互相覆盖登录 cookie。同一部署内的子应用不受此限制。路径一Docker 外部 Nginx 容器主路径这种方式的组成是NocoBase 应用容器 独立的 Nginx 容器只有 Nginx 容器对宿主机暴露端口应用容器只在内部网络通信。Nginx 容器启动后等待 NocoBase 生成的nocobase.conf把它链接为默认站点配置。docker-compose.yml示例来自官方文档13000:80仅为本地测试端口生产环境应暴露80/443networks: nocobase: driver: bridge services: app: image: nocobase/nocobase:latest-full-no-nginx restart: always depends_on: - postgres networks: - nocobase environment: - APP_KEYyour-secret-key - DB_DIALECTpostgres - DB_HOSTpostgres - DB_PORT5432 - DB_DATABASEnocobase - DB_USERnocobase - DB_PASSWORDnocobase - TZAsia/Shanghai - NOCOBASE_EXTRACT_CLIENT_ASSETStrue - NOCOBASE_PROXY_PROVIDERnginx - NOCOBASE_PROXY_STORAGE_PATH/app/nocobase/storage - NOCOBASE_PROXY_UPSTREAM_HOSTapp volumes: - ./storage:/app/nocobase/storage nginx: image: nginx:latest restart: always depends_on: - app networks: - nocobase volumes: - ./storage:/app/nocobase/storage command: /bin/sh -c while [ ! -f /app/nocobase/storage/.nocobase/proxy/nginx/nocobase.conf ]; do echo waiting for nocobase.conf... sleep 1 done rm -f /etc/nginx/conf.d/default.conf ln -sf /app/nocobase/storage/.nocobase/proxy/nginx/nocobase.conf /etc/nginx/conf.d/default.conf nginx -g daemon off; ports: # 这里只是本地测试示例。 - 13000:80 # 生产环境通常改成下面这样 # - 80:80 # - 443:443 postgres: image: postgres:16 restart: always command: postgres -c wal_levellogical environment: POSTGRES_USER: nocobase POSTGRES_DB: nocobase POSTGRES_PASSWORD: nocobase volumes: - ./storage/db/postgres:/var/lib/postgresql/data networks: - nocobase关键配置项含义按官方文档NOCOBASE_EXTRACT_CLIENT_ASSETStrue提取前端静态资源并生成代理配置。NOCOBASE_PROXY_PROVIDERnginx表示生成 Nginx 配置。NOCOBASE_PROXY_UPSTREAM_HOSTapp让 Nginx 容器通过 Compose 网络访问app服务。./storage同时挂载到app和nginx两个容器用于共享代理配置、静态资源和上传文件。APP_KEY、数据库账号密码在示例中是文档原值替换为你自己的密钥和数据库凭据文档提示修改APP_KEY会使旧 token 失效。验证配置已生效Nginx 容器在nocobase.conf生成前会持续输出waiting for nocobase.conf...不再出现该输出、容器正常运行即说明配置已生成并完成链接。通过http://宿主机IP:13000测试端口访问确认首页可打开、/api/请求经代理返回应用响应。生产环境把端口映射改为80:80以及443:443app服务不需要对宿主机暴露端口。自动生成的配置覆盖了这些行为APP_PUBLIC_PATH下的/files/和根路径/files/转发到 NocoBase用于登录鉴权后的文件预览和下载/storage/uploads/历史文件通过alias返回前先用auth_request调用 NocoBase 检查登录状态匿名访问默认返回401。可选分支宿主机本地 Nginx如果 Nginx 直接安装在宿主机上不跑在容器里用单独一份 compose 文件app保留ports: [13000:13000]并把代理相关变量改成宿主机视角NOCOBASE_PROXY_STORAGE_PATH写成宿主机上storage的绝对路径NOCOBASE_PROXY_UPSTREAM_HOST127.0.0.1、NOCOBASE_PROXY_UPSTREAM_PORT13000。启动app容器后在宿主机上等待配置文件生成再链接到本地 Nginx 并重载while [ ! -f ./storage/.nocobase/proxy/nginx/nocobase.conf ]; do echo waiting for nocobase.conf... sleep 1 done sudo ln -sf $(pwd)/storage/.nocobase/proxy/nginx/nocobase.conf /etc/nginx/conf.d/nocobase.conf sudo nginx -t sudo systemctl reload nginxnginx -t通过、reload 无报错后用浏览器访问对外域名验证。注意sudo ln -sf和systemctl reload会修改宿主机 Nginx 配置并使其生效执行前确认目标配置目录正确若宿主机 Nginx 没有conf.d目录把链接路径改成自己的配置目录。文档建议保持nocobase.conf作为http {}里的 include 文件不建议手动拆开再复制内容。路径二CLI 托管应用用nb proxy nginx替代路径如果你的应用是用nb init安装的可以用 CLI 的nb proxy nginx命令组统一生成、启动和重载代理配置。该命令组只适用于 CLI 托管的 env。最核心的三条命令nb proxy nginx use docker nb proxy nginx generate --env test2 --host c.local.nocobase.com nb proxy nginx reloaduse docker让 CLI 用 Docker 管理 Nginx使用nginx:latest容器名默认docker.container-prefix-nginx-proxy本机已装好 Nginx 则改为nb proxy nginx use local。默认 driver 是local可用nb proxy nginx current查看当前选择。generate按指定 env 生成入口配置。--env指定 env 名称--host指定对外域名--port指定代理入口端口不是应用本身的appPort可省略。上游应用端口来自该 env 已保存的appPort若提示 env 缺少appPort先执行nb env update test2 --app-port 56575补充。reload若 Nginx 未运行会先启动已运行则按最新配置重载。把示例中的test2和c.local.nocobase.com换成你自己的 env 名与域名即可。后续如果通过nb env update修改了app-port、app-public-path等影响代理结果的配置需要重新执行generate。CLI 维护的文件与验证方式以 envtest2为例相关命令会维护路径作用NB_CLI_ROOT/.nocobase/proxy/nginx/snippetsNginx 共享 snippets 目录NB_CLI_ROOT/.nocobase/proxy/nginx/test2/app.conf可编辑的站点入口配置NB_CLI_ROOT/.nocobase/proxy/nginx/test2/public/index-v1.html、index-v2.htmlSPA 回退页NB_CLI_ROOT/test2/storage/dist-client前端构建产物目录NB_CLI_ROOT/test2/storage/uploads上传目录NB_CLI_ROOT是 CLI 根目录上表中的test2换成你的 env 名。验证运行状态用nb proxy nginx status它会输出driver、status、config以及nginx或container信息nb proxy nginx info可进一步查看 driver、配置路径和运行信息。要加站点级配置限流、额外 header、访问控制时改app.conf但必须保留其中的 NocoBase 托管区块。手写 Nginx 配置时的必要规则如果不用自动生成的配置而是自行维护 Nginx生产环境的反向代理不只是proxy_pass。按官方文档一份完整可用的配置至少覆盖这几类入口uploads通过alias暴露上传目录storage/uploadsdist通过alias暴露前端构建产物目录storage/dist-clientwell-known处理 OAuth / OpenID 发现路径files把/files/转发到后端应用api转发/api/需与应用实际的API_BASE_PATH一致ws转发 WebSocket 到后端应用spa为/和/v/提供前端入口及try_files回退。两条硬性规则来自文档的明确警告/files/是需要经过 NocoBase 鉴权的应用路由不能作为静态目录处理也不能落入 SPA 回退页必须转发到后端且规则要放在location /等前端回退规则之前。配置了APP_PUBLIC_PATH/nocobase/时还要转发/nocobase/files/建议同时保留/files/转发规则兼容已有根路径地址。用alias直接返回/storage/uploads/文件前必须先通过auth_request调用 NocoBase 的auth:checkLegacyFileAccess检查登录状态否则会绕过登录检查。如果已有集成必须匿名访问该历史地址在 NocoBase 应用中设置LEGACY_LOCAL_STORAGE_PUBLIC_ACCESStrue并重启应用——该开关只影响/storage/uploads/不改变/files/的文件记录级权限且无需删除或改写 Nginx 的auth_request配置。文档还提示map指令用于从历史文件 URL 的__appName查询参数识别子应用必须放在http {}上下文中不能放进server {}或location {}。子路径部署等复杂场景下文档建议先执行generate生成配置、以生成结果为基准再手工调整而不是从零手写。边界与限制页面与 API 保持同源是推荐做法。若必须跨源访问配置了其他源的API_BASE_URL需要把页面来源加入CORS_ORIGIN_WHITELIST否则浏览器会忽略 API 响应中的Set-Cookie登录 cookie 无法写入且 cookie 按hostname存储页面与 API 域名完全不同时从页面域名访问/files/不会携带登录 cookie这类部署应改回同源反向代理。详见 环境变量说明。多个独立 NocoBase 服务必须用不同 hostname 区分推荐分别使用子域名再通过 Nginx 反向代理到不同服务不要只用端口区分。更省事的 HTTPS 方案自动证书申请与续期文档中指向 Caddy本文只覆盖 Nginx 路径HTTPS 证书仍按现有 Nginx 方式自行维护。参考文档生产环境部署 —— 同源代理与多服务 hostname 要求Docker 安装外部 Nginx —— 主路径的完整 compose 示例Nginx 反向代理CLI ——nb proxy nginx流程与手写配置注意事项nb proxy nginx 命令参考 —— 子命令与 driver 说明环境变量配置 ——API_BASE_URL、LEGACY_LOCAL_STORAGE_PUBLIC_ACCESS等【免费下载链接】nocobaseNocoBase is an open-source AI no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-proven infrastructure and a WYSIWYG no-code interface, so you get both speed and reliability.项目地址: https://gitcode.com/GitHub_Trending/no/nocobase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表