惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
量子位
人人都是产品经理
人人都是产品经理
小众软件
小众软件
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
Recent Announcements
Recent Announcements
A
About on SuperTechFans
Microsoft Security Blog
Microsoft Security Blog
N
Netflix TechBlog - Medium
H
Help Net Security
博客园 - 三生石上(FineUI控件)
博客园 - 司徒正美
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MyScale Blog
MyScale Blog
The Cloudflare Blog
S
SegmentFault 最新的问题
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
P
Proofpoint News Feed
宝玉的分享
宝玉的分享
Vercel News
Vercel News

登山亦有道

Work Review 使用体验:用开源工具自动记录工作并生成日报 - 登山亦有道 近期在苏工作经历分享 - 登山亦有道 Qoder赋能助我快速实现全栈开发 - 登山亦有道 Windows 桌面创建网页快捷方式完整教程 - 登山亦有道 十全街万圣福利狂欢夜 - 登山亦有道 自驾环太湖游览长兴太湖博物馆 - 登山亦有道 文明在宛之南阳市博物院历史陈列 - 登山亦有道 森海克斯8800电池无法充电及相关问题解决 - 登山亦有道 参加了一下公会组织的青年交友活动 - 登山亦有道 是他们太麻木还是我太敏感? - 登山亦有道 参观WAIC2025世界人工智能大会 - 登山亦有道 为什么经济危机时娱乐业反而越发达(转) - 登山亦有道 《大锅饭》读书笔记及原文摘录 - 登山亦有道
Online3DViewer_腾讯云部署记录 - 登山亦有道
晨岩 · 2026-08-29 · via 登山亦有道

晨岩的头像 - 登山亦有道

1. 部署目的

在自有腾讯云服务器上部署开源项目 Online3DViewer,用于验证机械三维模型的浏览器在线预览能力,包括 STEP、IGES、STL、OBJ、glTF 等格式。本部署当前属于功能验证环境,不应上传核心或高保密图纸。Online3DViewer 在浏览器端解析和渲染模型,即使界面不提供下载按钮,具备技术能力的访问者仍可能从网络请求、浏览器缓存或运行时内存中提取原始文件或模型数据。

2. 当前部署状态

记录日期:2026-08-27

项目状态
服务器环境检查已完成
Docker环境检查已完成
官方源码下载已完成
Docker镜像构建已完成
容器启动已完成
腾讯云安全组放行8080端口已完成
浏览器访问验证已完成
在线模型预览测试已完成
STEP专项加载验证待确认具体测试格式

已成功生成的Docker镜像:

online3dviewer:local

构建结果:

Successfully built c79a5b0b02de
Successfully tagged online3dviewer:local

最终上线结果:Docker镜像构建成功,容器正常运行,腾讯云安全组端口已经放行,公网浏览器可以打开Online3DViewer并完成在线预览测试。

3. 服务器环境

项目配置
云服务商腾讯云
操作系统OpenCloudOS 9.4
架构x86_64
CPU4核
内存3.6 GiB
当时可用内存约618 MiB
Swap6.0 GiB
系统盘60 GB
已使用空间35 GB,约58%
Docker26.1.4
Docker Compose未安装
firewalldinactive
已占用端口80、443,由宝塔Nginx占用
Online3DViewer计划端口8080

由于服务器80和443端口已经由宝塔Nginx使用,本次验证不修改现有Nginx配置,先通过公网IP加8080端口访问。

4. 环境检查命令

cat /etc/os-release
uname -m
nproc
free -h
df -h /
docker --version
docker compose version
sudo systemctl is-active firewalld
sudo ss -lntp | awk 'NR == 1 || /:8080|:8081|:80|:443/'

检查结果表明Docker已安装,但没有Docker Compose插件。本项目只需要单个容器,因此直接使用 docker builddocker run,不依赖Compose。

5. 获取官方源码

5.1 安装或升级Git

sudo dnf install -y git

最初尝试直接从GitHub克隆:

sudo mkdir -p /opt/online3dviewer
sudo git clone --depth 1 https://github.com/kovacsv/Online3DViewer.git /opt/online3dviewer/source

由于腾讯云服务器访问GitHub速度较慢,克隆长时间停留在:

Cloning into '/opt/online3dviewer/source'...

因此终止直接克隆,改用GitHub归档代理下载公开仓库压缩包。

5.2 使用加速代理下载源码归档

curl -fL \
  --connect-timeout 20 \
  --retry 3 \
  --retry-delay 3 \
  "https://gh-proxy.com/https://github.com/kovacsv/Online3DViewer/archive/refs/heads/master.tar.gz" \
  -o /opt/online3dviewer/online3dviewer-master.tar.gz

ls -lh /opt/online3dviewer/online3dviewer-master.tar.gz
tar -tzf /opt/online3dviewer/online3dviewer-master.tar.gz | head

实际下载文件约26 MB,压缩包结构检查正常。

解压并整理目录:

tar -xzf /opt/online3dviewer/online3dviewer-master.tar.gz \
  -C /opt/online3dviewer

mv /opt/online3dviewer/Online3DViewer-master \
  /opt/online3dviewer/source

最终源码目录:

/opt/online3dviewer/source

6. 官方构建流程确认

项目官方CI配置使用Node.js 18和20,并依次执行:

npm install
npm run create_dist

项目完整打包脚本会:

  1. 生成项目文档;
  2. 构建三维引擎;
  3. 构建ES Module版本;
  4. 构建网站JavaScript、CSS、字体和SVG资源;
  5. 将网站入口、静态资源和构建产物复制到发布目录。

最终可发布的网站目录为:

build/package/website

不能只复制源代码中的 website 目录,否则可能缺少编译后的JavaScript、CSS、字体或模型解析相关资源。

7. 构建Docker镜像

本次采用多阶段Docker构建:

  • 构建阶段使用Node.js 20和Python 3;
  • 通过国内npm镜像安装依赖;
  • 执行官方完整打包脚本;
  • 运行阶段只保留Nginx和构建后的静态文件;
  • Node.js、Python和源码不会进入最终运行镜像。

实际执行命令:

cd /opt/online3dviewer/source

docker build \
  --tag online3dviewer:local \
  --file - \
  . <<'DOCKERFILE'
FROM node:20-bookworm-slim AS builder

WORKDIR /app

RUN apt-get update \
    && apt-get install -y --no-install-recommends python3 ca-certificates \
    && rm -rf /var/lib/apt/lists/*

COPY package.json package-lock.json ./

RUN npm config set registry https://registry.npmmirror.com \
    && npm ci

COPY . .

ENV NODE_OPTIONS=--max-old-space-size=2048

RUN npm run create_package

FROM nginx:1.27-alpine

COPY --from=builder /app/build/package/website /usr/share/nginx/html

EXPOSE 80
DOCKERFILE

构建过程中完成了三维引擎、模块版本及网站资源编译,最终镜像构建成功。

检查镜像和内存:

docker image ls online3dviewer:local
free -h

8. 启动容器

容器已经成功启动,并配置为服务器或Docker重启后自动恢复运行。

启动容器:

docker run -d \
  --name online3dviewer \
  --restart unless-stopped \
  --publish 8080:80 \
  online3dviewer:local

参数说明:

参数作用
--name online3dviewer将容器命名为online3dviewer
--restart unless-stoppedDocker或服务器重启后自动恢复,除非人工停止
--publish 8080:80将服务器8080端口映射到容器Nginx的80端口

9. 本机验证

docker ps --filter name=online3dviewer
curl -I http://127.0.0.1:8080
docker logs --tail 30 online3dviewer

本机及浏览器访问已经完成验证。正常HTTP检查应返回:

HTTP/1.1 200 OK

如果容器启动失败,可以执行:

docker ps -a --filter name=online3dviewer
docker logs online3dviewer
sudo ss -lntp | grep ':8080'

10. 腾讯云安全组配置

腾讯云安全组的8080端口已经完成放行,外部浏览器能够访问服务。配置方法如下:

配置项建议值
协议TCP
端口8080
来源优先填写管理员当前公网IP
策略允许

临时测试时可以将来源设置为:

0.0.0.0/0

但这表示互联网上任何人都可以尝试访问8080端口。测试结束后应立即收紧来源地址,或者关闭8080端口。

由于当前 firewalld 为inactive状态,本机没有额外开放firewalld端口的步骤,但仍需以实际服务器安全策略为准。

11. 浏览器访问

服务已经上线,并通过个人电脑浏览器打开测试。访问形式为:

http://腾讯云服务器公网IP:8080

已经完成基础在线打开及模型预览测试。后续仍建议补充并记录以下专项验证结果:

  1. 首页是否正常显示;
  2. 官方示例模型能否加载;
  3. 小型STL或OBJ文件能否加载;
  4. 非核心STEP文件能否加载;
  5. 旋转、缩放、剖切及装配结构树是否正常;
  6. 浏览器刷新后是否恢复正常;
  7. 服务器重启后容器是否自动启动。

12. 常用运维命令

查看运行状态:

docker ps --filter name=online3dviewer

查看日志:

docker logs --tail 100 online3dviewer

停止容器:

docker stop online3dviewer

启动已存在的容器:

docker start online3dviewer

重启容器:

docker restart online3dviewer

检查8080端口:

sudo ss -lntp | grep ':8080'

13. 更新源码与重建思路

由于本次使用GitHub归档压缩包而不是Git仓库,更新时建议:

  1. 下载新的master归档;
  2. 解压到新的版本目录;
  3. 保留旧镜像作为回退版本;
  4. 使用新的镜像标签构建;
  5. 启动临时容器验证;
  6. 验证成功后再替换正式容器。

不要直接覆盖正在运行版本后立刻删除旧镜像,以免更新失败时无法快速回退。

14. 安全边界

当前部署只解决“在自己的服务器上运行Online3DViewer”,不等于已经实现图纸防外流。

Online3DViewer的主要安全限制:

  • 模型在访问者浏览器中解析和渲染;
  • 原始文件或转换后的几何数据可能进入浏览器;
  • 隐藏下载按钮无法阻止技术人员抓取网络响应;
  • 当前实例没有登录认证;
  • 当前实例没有有效期、访问次数或指定人员权限;
  • 当前实例没有动态水印;
  • 当前实例没有完整的访问审计;
  • 当前使用HTTP和公网端口,不具备HTTPS传输保护。

因此当前环境只能用于:

  • 功能验证;
  • 内部普通模型预览;
  • 非核心、已脱敏模型测试。

暂时不应用于:

  • 核心设备完整装配体;
  • 可直接加工的精确STEP模型;
  • 包含内部结构、BOM或专有尺寸的图纸;
  • 需要对外正式分享的高保密资料。

15. 后续改进计划

建议按以下顺序逐步改进:

  1. 完成容器启动和本机HTTP验证;
  2. 临时放行8080并完成浏览器测试;
  3. 使用宝塔Nginx建立独立域名反向代理;
  4. 配置HTTPS证书;
  5. 增加账号或Basic Authentication;
  6. 禁止匿名公开访问;
  7. 增加访问日志和动态水印;
  8. 设计图纸上传、审批和脱敏流程;
  9. 评估服务器转换为降精度GLB的方案;
  10. 与图纸通、SView等商业平台进行安全性和成本对比。

16. 相关项目

THE END

喜欢就支持一下吧