NAS 党狂喜:Docker 部署 gods-eye-view,把 3D 地球搬进家庭服务器
NAS 党狂喜Docker 部署 gods-eye-view把 3D 地球搬进家庭服务器【免费下载链接】gods-eye-viewA spy satellite simulator in your browser, except the data is real. Live open source spatial intelligence on a photorealistic 3D globe.项目地址: https://gitcode.com/GitHub_Trending/go/gods-eye-view2026 年 8 月一个叫 gods-eye-view 的开源项目冲上 GitHub Trending 榜首README 里至今挂着 #1 GitHub Trending 徽章社区情报显示其星标一度超过 3 万随后围绕它的中文教程像雨后春笋般冒出有人教 Windows 一键安装有人探讨如何把 GLM-5.3 接进它的语音系统还有人——也就是今天的主角——尝试把它跑进 NAS 的 Docker 容器里。这个项目最反直觉的地方在于它长得像《速8》里的天眼系统但所有数据都是真实的公开信号。实时航班、船舶、卫星轨道、地震、火点、公共摄像头全部叠加在一颗照片级真实的 3D 地球上而且零密钥即可启动。对 NAS 用户来说这意味着你的家庭服务器不只是跑跑 Emby 和 Home Assistant还能多一个上帝视角的常驻服务。本文从仓库源码出发把 Docker 部署、影像源切换、外网访问三条主线一次讲透。一、为什么 gods-eye-view 天生适合家庭服务器先看它的架构定位本地优先local-first的公开数据客户端。README 明确写着 Start without an account or API keyspackage.json 中 engines 字段要求 Node24.14.0 25 || 26 27Node 25 已 EOLnpm run doctor会主动警告。整个项目是 Vite 原生 JavaScript CesiumJS几乎没有框架黑盒二十个图层中十七个有无密钥路径。关键点在于安全模型这是一个key broker——凡是涉及私有凭据的请求OpenAI 语音、AISStream 船舶、OpenSky OAuth、摄像头视频帧都由服务端代理托管浏览器只拿短时效的会话令牌真正的密钥永不进浏览器见 SECURITY.md。这决定了它不能像普通静态站那样扔进 CDN 就完事必须有一个常驻的 Node 进程——而这恰好就是 NAS 的舒适区7×24 运行、内网固定地址、卷挂载持久化。跑起来之后你能看到什么一千多万行代码组织出的二十个图层点击任意航班进入座舱视角、CCTV 画面直接投影进 3D 城市、ISS 轨道环实时锁定、SGP4 算法在浏览器里推算卫星位置。下面是三个高频场景的实际效果二、Docker Compose 配置没有官方镜像但有清晰路线需要先说实话仓库里没有现成的 Dockerfile。官方主推两条路——Pinokio 一键安装跨 Windows/macOS/Linux和终端npm ci npm run doctor npm run dev。所以社区教程如 CSDN 上那篇 NAS 部署实践的做法是自己包一层容器这在工程上是完全站得住的因为项目的启动路径非常规整。看 package.json 的 scriptsdev是vitebuild是vite buildpreview是vite preview。而 server/standalone/vite.config.js 通过localProviderPlugins()把数据代理中间件同时挂到了 dev 和 preview 两个服务器上——这意味着preview 模式是功能完整的/api/*代理、密钥管理、限流全部可用。这给了容器一个关键结论不要只把dist/静态文件扔进 nginx那会丢掉所有 API 代理应当让容器跑 Vite preview自带完整中间件。一个经过验证的 Compose 写法如下services: gods-eye-view: image: node:24 working_dir: /app restart: unless-stopped # preview 自带 /api 数据代理中间件功能与 dev 一致且无热更新开销 command: sh -c npm ci npm run build npm run preview -- --host 0.0.0.0 --port 4173 ports: - 4173:4173 volumes: - /volume1/docker/gods-eye-view:/app - gev_node_modules:/app/node_modules environment: - HOST0.0.0.0 - PORT4173 # 密钥走 .env 或环境变量注入浏览器侧 key 见下文安全约束 - CESIUM_ION_TOKEN${CESIUM_ION_TOKEN:-} - GOOGLE_MAPS_API_KEY${GOOGLE_MAPS_API_KEY:-} - OPENAI_API_KEY${OPENAI_API_KEY:-} - AISSTREAM_API_KEY${AISSTREAM_API_KEY:-} - FIRMS_MAP_KEY${FIRMS_MAP_KEY:-} - TOMTOM_API_KEY${TOMTOM_API_KEY:-} networks: - default volumes: gev_node_modules:三个工程细节值得注意Node 版本必须匹配 engines 约束。镜像 tag 用node:24而不是 latest否则 Node 25 会触发 setup-doctor 的 EOL 警告且依赖锁定npm ci依据 package-lock.json可能与运行时行为不一致。node_modules 用命名卷隔离。把仓库目录整个 bind-mount 进容器后宿主目录里会混入 Linux 编译产物用gev_node_modules卷缓存依赖重启不重装。密钥写入.env已 gitignore或直接注入环境变量。参考 .env.example它完整列出了浏览器侧与服务端侧两类 key 的边界——只有GOOGLE_MAPS_API_KEY、CESIUM_ION_TOKEN、MAPILLARY_CLIENT_TOKEN会被 Vite 以define方式打进前端 bundle见 build/vite.js其余全部留在服务端。无任何密钥时应用会以Esri World Imagery 卫星底图 免费 Re:Earth 无密钥地形启动src/maps/terrain.js航班、卫星、地震、公共摄像头、广播、发射任务等图层照常工作——这是 NAS 部署最友好的入场姿势。三、CesiumJS 影像源修改OSM 与 Esri 的切换与自建很多 NAS 用户第一件事就是把底图换成更熟悉的 OSM 或 Esri。好消息是这个切换项目内置了根本不用改代码。看 src/maps/catalog.js 的MAP_STACKS底图栈共五档id标签来源是否需要密钥photorealGoogle 3DGoogle Photorealistic 3D Tilesion 令牌或 Google keybing-aerial/bing-labelsBing 影像/标注Cesium ion 托管需要 ionesri-imageryEsri SatelliteArcGIS World_Imagery 无需osmOSMtile.openstreetmap.org 无需默认逻辑在 src/maps/defaultSources.js无密钥时默认esri-imagery并且内置两级自动回退——constructionFallbackEsri 构建失败时和tileFailureFallback连续 2 张瓦片请求失败时都会切到 OSM。也就是说在 NAS 上如果 Esri 偶发抽风地球不会黑屏而是静默降级成 OSM。应用内语音甚至直接支持Switch to OSM.这类指令。真正的影像源定制发生在 src/maps/imagery.js。三个工厂函数一目了然export function createOsmImagery() { return new Cesium.OpenStreetMapImageryProvider({ url: https://tile.openstreetmap.org/, credit: © OpenStreetMap contributors, }); } export function createEsriImagery() { return Cesium.ArcGisMapServerImageryProvider.fromUrl( https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer, { credit: Powered by Esri — ..., enablePickFeatures: false }, ); }要接入自建瓦片服务比如内网 OSM 瓦片缓存、群晖上自渲染的矢量瓦片标准做法是在catalog.js增加一条栈描述、在imagery.js增加工厂函数并在defaultSources.js的分发分支descriptor.id osm ? createOsmImagery : createEsriImagery里补一个分支。若瓦片是标准 XYZ 规则可直接用 Cesium 的UrlTemplateImageryProviderexport function createSelfHostedImagery() { return new Cesium.UrlTemplateImageryProvider({ url: https://tiles.example.lan/{z}/{x}/{y}.png, credit: Self-hosted tiles, maximumLevel: 18, }); }两个提醒一是 Cesium 瓦片是 Web Mercator 金字塔规则自建源必须遵守{z}/{x}/{y}约定二是换源后版权署名要同步——createEsriImagery里的credit不是摆设DATA_SOURCES.md 对每个服务商的使用条款和署名义务有完整交代NAS 上的公开访问更要保留。四、内网穿透与外网访问key broker 的攻防边界这是最容易翻车、也最值得展开的部分。请记住一句话这个 dev/preview 服务器是密钥代理谁摸到它谁就能花你的 API 配额OpenAI、Google、OpenSky、AISStream、TomTom、FIRMS 都在其列。SECURITY.md 的威胁模型章节把这一点写在了最前面。4.1 三层访问控制源码可查第一层默认只绑 localhost。.env.example 注释明确Default is localhost — the server is reachable ONLY from this machine.。scripts/dev-fresh.sh里HOST${HOST:-localhost}一旦设置HOST0.0.0.0启动脚本会打印醒目的!! WARNING横幅并列出本机 LAN URL。第二层Host 头校验。build/allowedHosts.js 的hostCheckPlugin以enforce: pre挂在所有中间件之前只放行 IP 地址、localhost、*.localhost以及GEV_ALLOWED_HOSTS里显式列出的主机名后缀通配和*一律忽略其他 Host 一律回403 Blocked request。这同时防住了 DNS rebinding 攻击——这在家庭网络里恰恰是真实威胁。第三层跨站与 CSP。计费/限额类端点/api/realtime/token、/api/openai/hud-summary、/api/google/*等拒绝一切跨站 Origin 和Sec-Fetch-Site非 same-origin 的请求所有文档带完整 CSP 和X-Frame-Options: DENYbuild/vite.js。4.2 暴露到外网前必须做的事社区教程常忽略的一点直接拿HOST0.0.0.0绑公网 IP 是危险的。README 和 SECURITY.md 都明确建议外网访问请走单独审查过的认证代理而不是裸奔端口。一套稳妥的组合拳容器内保持HOST0.0.0.0仅对内网暴露映射端口不要直接发布到公网反向代理nginx/Caddy 认证层如 Basic Auth 或 OAuth2 Proxy并终结 TLS保留默认限流GEV_RATELIMIT_OPENAI_PER_MIN默认 30/分钟/IP和GEV_RATELIMIT_GOOGLE_PER_MIN默认 120/分钟/IP它们是内存态、进程重启即失效的软闸门不是账单封顶——真正的兜底必须在 provider 侧设置预算警报OpenAI usage limits、Google Cloud budget alerts浏览器侧三个 key 必须按 referrer/URL 限制GOOGLE_MAPS_API_KEY、CESIUM_ION_TOKEN、MAPILLARY_CLIENT_TOKEN会明文出现在 DevTools 里这是设计使然见 SECURITY.md公开部署时不限制 别人能用你的 key 计费反代要正确转发 WebSocket语音走 OpenAI Realtime浏览器先向/api/realtime/token换短时效会话令牌再直连 OpenAI 的 wssconnect-src self blob: data: https: wss: ws:表明 CSP 允许直连nginx 记得开proxy_http_version 1.1和Upgrade头。4.3 一个值得知道的反模式项目方甚至主动禁掉了 Pinokio 的 LAN/Cloudflare 分享启动器会把分享状态重写为禁用、清除全局 passcode强制 GEV 只跑在 loopbackSECURITY.md 的 Pinokio 章节。这个设计决定传达的信号很明确——这类 key broker 服务暴露面每大一分风险就大十分。NAS 上的正确姿势是内网常驻 按需穿透而不是图省事直接公网裸奔。写在最后把 gods-eye-view 跑进 NAS 是一次低成本、高回报的自托管实验零密钥即可获得一颗带实时航班、卫星、地震、公共摄像头的照片级 3D 地球Esri/OSM 底图切换是内置能力自建瓦片源也有清晰的扩展点真正要花心思的不是部署而是访问控制——牢记dev server 即 key broker这条安全底线内网常驻、认证反代、provider 预算三件套齐活你的家庭服务器就多了一个 24 小时运转的上帝视角。【免费下载链接】gods-eye-viewA spy satellite simulator in your browser, except the data is real. Live open source spatial intelligence on a photorealistic 3D globe.项目地址: https://gitcode.com/GitHub_Trending/go/gods-eye-view创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考