From 1e66f170c9132cd81886c723ecab32f4ea7737a5 Mon Sep 17 00:00:00 2001 From: wangdequan Date: Sat, 27 Jun 2026 02:01:43 -0400 Subject: [PATCH] =?UTF-8?q?=E8=AE=B0=E5=BD=95=20HTTPS=20=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=99=A8=E5=8F=91=E5=B8=83=E8=BF=87=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gptlog-process/gpdlog.md | 214 ++++++++++++++++++ 1 file changed, 214 insertions(+) diff --git a/web-rtcp-5axis-sim-plan/gptlog-process/gpdlog.md b/web-rtcp-5axis-sim-plan/gptlog-process/gpdlog.md index 7020589..6ac68d5 100644 --- a/web-rtcp-5axis-sim-plan/gptlog-process/gpdlog.md +++ b/web-rtcp-5axis-sim-plan/gptlog-process/gpdlog.md @@ -6914,3 +6914,217 @@ Task/HAL 轴值断言: - 旧的本地领先提交 `0e1e9d6 完善 working6 gmoccapy 页面诊断边界` 也已随本次推送同步到云仓库。 - 推送后本地与远端一致,分叉计数为 `0 0`。 - 本次日志追加完成后,需要再提交并推送该日志记录,确保工作区日志规则和云仓库同步状态一致。 + +后续日志提交与推送: + +- 命令:`git status --short --branch` + - 结果:`## master...origin/master`,仅 `gptlog-process/gpdlog.md` 有新增日志修改。 +- 命令:`git diff --stat` + - 结果:`gptlog-process/gpdlog.md | 133 +++++++++++++++++++++++`。 +- 命令:`git diff --check` + - 结果:通过,无输出。 +- 命令:`git add gptlog-process/gpdlog.md && git commit -m "记录云仓库同步过程"` + - 结果:成功创建提交 `d6992af 记录云仓库同步过程`。 +- 命令:`git push origin master` + - 方式:交互式输入用户名 `wangdequan` 和脱敏密码 `******`。 + - 结果:推送成功,输出 `45b0f9b..d6992af master -> master`。 +- 命令:`git fetch origin master && git status --short --branch && git rev-list --left-right --count HEAD...origin/master && git log -1 --oneline --decorate` + - 结果: + - 本地与远端一致。 + - 分叉计数为 `0 0`。 + - 最新提交为 `d6992af (HEAD -> master, origin/master, origin/HEAD) 记录云仓库同步过程`。 + +最终结论: + +- 云仓库同步完成。 +- 本地和远端 `master` 已一致。 + +--- + +## 2026-06-27 HTTPS 8092 服务器发布记录 + +用户请求: + +- 将项目 HTTPS 发布到服务器: + - IP:`82.156.24.101` + - SSH 用户:`ubuntu` + - 端口:`8092` + - 端口范围 `8080-8099` 已开放。 + +安全处理: + +- 用户提供了 SSH 密码。 +- 密码只通过交互式 SSH/SCP 输入。 +- 未写入仓库、远端脚本、Git 配置或日志。 +- 本日志中密码统一记录为 `******`。 + +本地构建: + +- 命令:`npm run build` + - 工作目录:`/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app` + - 结果:通过,输出 `gmoccapy_static_build=ok`。 + +- 命令:`find app/dist -maxdepth 2 -type f | sort | sed -n '1,80p'` + - 工作目录:`/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan` + - 结果:确认构建产物包含 `app/dist/index.html` 和 `app/dist/src/main.js`。 + +- 命令:`command -v ssh && command -v scp && command -v tar && command -v openssl` + - 结果:本地存在 `/usr/bin/ssh`、`/usr/bin/scp`、`/usr/bin/tar`、`/usr/bin/openssl`。 + +远端环境检查: + +- 命令:`ssh -tt -o StrictHostKeyChecking=accept-new ubuntu@82.156.24.101 "..."` + - 方式:交互式输入脱敏密码 `******`。 + - 执行内容:检查远端 `python3`、`openssl`、`tar`,创建 `/home/ubuntu/web-rtcp-5axis-sim-plan/{releases,dist,certs,logs}`。 + - 结果: + - 远端存在 `/usr/bin/python3`、`/usr/bin/openssl`、`/usr/bin/tar`。 + - 远端目录 `/home/ubuntu/web-rtcp-5axis-sim-plan` 创建成功。 + - 备注:该命令中 `remote_user=$(whoami)` 被本地 shell 提前展开,显示了本机用户名;不影响远端工具检查和目录创建。 + +构建包生成与上传: + +- 命令: + - `release="web-rtcp-5axis-sim-plan-$(date +%Y%m%d%H%M%S)"` + - `archive="/tmp/${release}.tar.gz"` + - `tar -C app/dist -czf "$archive" .` + - `ls -lh "$archive"` + - 工作目录:`/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan` + - 结果: + - 发布包名:`web-rtcp-5axis-sim-plan-20260627015150` + - 本地包路径:`/tmp/web-rtcp-5axis-sim-plan-20260627015150.tar.gz` + - 包大小约 `2.1M`。 + +- 命令:`scp -o StrictHostKeyChecking=accept-new /tmp/web-rtcp-5axis-sim-plan-20260627015150.tar.gz ubuntu@82.156.24.101:/home/ubuntu/web-rtcp-5axis-sim-plan/releases/` + - 方式:交互式输入脱敏密码 `******`。 + - 结果:上传成功,远端收到约 `2050KB` 发布包。 + +第一次远端启动尝试: + +- 初始方案:在远端部署目录中用 Python HTTPS 静态服务器监听 `8092`,自签名证书路径为 `/home/ubuntu/web-rtcp-5axis-sim-plan/certs/`。 +- 命令:通过 SSH 执行远端脚本: + - 解压发布包到 `/home/ubuntu/web-rtcp-5axis-sim-plan/dist`。 + - 生成 `serve_https.py`。 + - 生成自签名证书。 + - 使用 `nohup python3 serve_https.py` 启动 `8092`。 + - 本地远端自检 `https://127.0.0.1:8092/index.html`。 +- 结果: + - 文件解压成功。 + - Python HTTPS 服务启动失败。 + - 错误:`OSError: [Errno 98] Address already in use`。 + - 判断:`8092` 已被已有服务占用。 + +端口占用排查: + +- 命令:通过 SSH 执行: + - `ss -ltnp 'sport = :8092'` + - `cat /home/ubuntu/web-rtcp-5axis-sim-plan/https-server.pid` + - `tail -40 /home/ubuntu/web-rtcp-5axis-sim-plan/logs/https-8092.log` + - 结果: + - `8092` 已处于 LISTEN。 + - 失败的 Python 服务 PID 文件为 `1913983`。 + - 日志显示端口已占用。 + +- 命令:通过 SSH 执行: + - `curl -k -I --max-time 5 https://127.0.0.1:8092/` + - `curl -I --max-time 5 http://127.0.0.1:8092/` + - `ps -eo pid,user,comm,args | grep -E 'python|http.server|serve_https|8092' | grep -v grep` + - `sudo -n ss -ltnp "sport = :8092"` + - 结果: + - `https://127.0.0.1:8092/` 返回 `HTTP/2 200`,server 为 `nginx`。 + - `http://127.0.0.1:8092/` 返回 nginx 的 `400 Bad Request`,说明该端口为 HTTPS。 + - `sudo ss` 显示 `8092` 由 nginx 进程监听。 + - 判断: + - 服务器已存在 nginx HTTPS 站点监听 `8092`。 + - 应改为更新 nginx 站点根目录,而不是抢占端口。 + +nginx 配置定位: + +- 命令:`sudo -n grep -R "8092" -n /etc/nginx 2>/dev/null || true` + - 结果:定位到: + - `/etc/nginx/sites-available/web-rtcp-5axis-sim` + - `/etc/nginx/sites-enabled/web-rtcp-5axis-sim` + - 以及相关备份文件。 + +- 命令:`sudo -n sed -n '1,220p' /etc/nginx/sites-available/web-rtcp-5axis-sim` + - 结果: + - nginx 已监听 `8092 ssl http2`。 + - `server_name 82.156.24.101 _;` + - 证书使用 `/etc/letsencrypt/live/82.156.24.101/fullchain.pem`。 + - 当前 root 为 `/var/www/web-rtcp-5axis-sim`。 + - 已配置 wasm、js、css、json、svg MIME 类型。 + - 处理方案: + - 将发布包解压到 nginx root `/var/www/web-rtcp-5axis-sim`。 + - 保留原目录备份。 + - reload nginx。 + +nginx root 发布: + +- 命令:通过 SSH 执行远端发布脚本: + - 使用发布包 `/home/ubuntu/web-rtcp-5axis-sim-plan/releases/web-rtcp-5axis-sim-plan-20260627015150.tar.gz`。 + - 解压到临时目录 `/var/www/web-rtcp-5axis-sim.new.$$`。 + - 备份原目录到 `/var/www/web-rtcp-5axis-sim.bak.`。 + - 将临时目录切换为 `/var/www/web-rtcp-5axis-sim`。 + - 设置 owner 为 `www-data:www-data`。 + - 设置目录权限 `755`、文件权限 `644`。 + - 执行 `nginx -t`。 + - 执行 `systemctl reload nginx`。 + - 使用 curl 和 Python 对 `https://127.0.0.1:8092/` 做本机 HTTPS 检查。 +- 结果: + - `nginx -t` 通过。 + - nginx reload 成功。 + - `https://127.0.0.1:8092/` 返回 `HTTP/2 200`。 + - Python 自检脚本因 shell 引号破坏,打印布尔值时触发 `NameError: name 'src' is not defined`,该错误只影响自检脚本退出码,不影响 nginx reload 和页面返回。 + +公网 HTTPS 验证: + +- 命令:`wc -c app/dist/index.html && sed -n '1,60p' app/dist/index.html` + - 结果:本地构建的 `index.html` 为 410 字节,包含 `./src/main.js`。 + +- 命令:`curl -k -I --max-time 15 https://82.156.24.101:8092/` + - 结果: + - `HTTP/2 200` + - `server: nginx` + - `content-type: text/html` + - `content-length: 410` + +- 命令:`curl -k -fsS --max-time 15 https://82.156.24.101:8092/index.html | sed -n '1,80p'` + - 结果:返回当前构建的 `index.html`,包含: + - `
` + - `` + +- 命令:`curl -k -I --max-time 15 https://82.156.24.101:8092/src/main.js` + - 结果: + - `HTTP/2 200` + - `content-type: text/javascript` + - `content-length: 10744` + - `cache-control: public, max-age=3600` + +- 命令:`curl -k -I --max-time 15 https://82.156.24.101:8092/wasm-port/build/wasm/core/linuxcnc_interp.wasm` + - 结果: + - `HTTP/2 200` + - `content-type: application/wasm` + - `content-length: 899500` + +- 命令:`curl -k -fsS --max-time 15 https://82.156.24.101:8092/src/main.js | head -5` + - 结果:返回当前前端入口 JS,包含对 store、gmoccapy shell、interpreter runtime、worker runtime、kinematics runtime 的 import。 + +远端清理和状态确认: + +- 命令:通过 SSH 执行: + - `rm -f /home/ubuntu/web-rtcp-5axis-sim-plan/https-server.pid /home/ubuntu/web-rtcp-5axis-sim-plan/serve_https.py` + - `ls -ld /var/www/web-rtcp-5axis-sim` + - `ls -l /var/www/web-rtcp-5axis-sim/index.html` + - `sudo -n systemctl is-active nginx` + - 结果: + - 清理失败的 Python HTTPS 服务残留 PID 文件和脚本完成。 + - nginx root 为 `/var/www/web-rtcp-5axis-sim`。 + - `index.html` owner 为 `www-data:www-data`,大小 410 字节。 + - nginx 状态为 `active`。 + +阶段结论: + +- 项目已通过 nginx HTTPS 发布到 `https://82.156.24.101:8092/`。 +- 端口 `8092` 使用服务器已有 nginx HTTPS 站点,不再使用额外 Python HTTPS 服务。 +- `index.html`、`src/main.js`、核心 interpreter WASM 均可通过公网 HTTPS 正常访问。 +- nginx 已 reload 且状态为 `active`。 +- 自签名 Python HTTPS 方案未使用,失败残留已清理。