记录 HTTPS 服务器发布过程
This commit is contained in:
@@ -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.<timestamp>`。
|
||||
- 将临时目录切换为 `/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`,包含:
|
||||
- `<main id="app" data-app="gmoccapy-5axis-shell"></main>`
|
||||
- `<script type="module" src="./src/main.js"></script>`
|
||||
|
||||
- 命令:`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 方案未使用,失败残留已清理。
|
||||
|
||||
Reference in New Issue
Block a user