# opsx-licence 部署与环境 > 本文汇总本机仓库可确认信息 + 业务侧口述的线上部署事实。 > **带「待远程核实」的条目:本轮未 SSH、未登录管理后台,仅按口述与仓内既有说明记录。** > **禁止**:把管理后台密码、JWT、Waffo 私钥等写入本文件或提交仓库。 ## 用途(一句话) 通用许可证(License)管理服务器:为 Web / PC / 移动等多端产品提供在线/离线授权、座位激活、订单与 Waffo 支付对账、管理后台。 线上示例(README):`https://l123.91ai.io/` ## 本机仓库 | 项 | 值 | |----|-----| | 路径 | `/Users/logan/devops/opsx-licence` | | Remote | `https://gitea.91ai.io/rlwj-lab/opsx-licence.git`(origin;原 Gitee `opsx-tools/opsx-licence` 已弃用为主远程) | | 默认分支 | `master`(与 `origin/master` 对齐;本轮摸仓时工作区干净) | ## 技术栈(本机确认) | 层 | 技术 | |----|------| | 后端 | Go(`go.mod` 标 1.25)+ Gin + GORM;默认 SQLite,可 MySQL / PostgreSQL | | 前端 | Vue 3.4 + Vite + Element Plus + ECharts + Pinia | | 打包 | 前端 `dist` 经 `//go:embed` 打进单二进制;Docker 多阶段构建 | | 认证 | JWT + bcrypt;管理端单 Admin | | 默认服务端口 | 后端 / 生产单体 **9001**;开发前端 Vite **5181** | 详细授权模型见 [licensing-model.md](./licensing-model.md);支付闭环见 [waffo-integration.md](./waffo-integration.md)。开发约定见仓库根目录 `AGENTS.md`。 ## 本地如何跑(本机确认) ```bash cd /Users/logan/devops/opsx-licence cp .env.example .env # 按需改 JWT_SECRET 等;勿把真实密钥提交仓库 ./run.sh start # 或 make dev # 开发:前端 http://localhost:5181 ,后端 http://localhost:9001 # 默认管理账号见 README / AGENTS.md(生产必须改密;密码勿写入文档) ``` 其它常用: | 命令 | 说明 | |------|------| | `./run.sh stop` / `status` / `restart` | 停 / 查 / 重启开发进程 | | `./run.sh build` 后 `./run.sh binary start` | 嵌入前端的单二进制 | | `./run.sh docker up`(或 `make docker-up`) | Docker Compose;宿主机映射 `${HOST_PORT:-9001}` → 容器 9001 | | `make install` | `go mod download` + `npm install` | 健康检查(Docker):`GET http://127.0.0.1:9001/readyz` ## 关键配置路径(本机确认) | 路径 | 作用 | |------|------| | 仓库根 `.env` / `.env.example` | 后端主配置模板与本地覆盖(`PORT`、`GIN_MODE`、`JWT_SECRET`、DB、Waffo、CORS 等) | | `frontend/.env.development` | 开发:`VITE_API_BASE_URL=/api`(经 Vite 代理) | | `frontend/.env.production` | 生产构建:同源相对路径 `/api` | | `backend/config/config.go` | 读环境变量、默认值(含 CORS 本地 5181) | | `backend/router/router.go` | `/api` 路由注册 | | `docker-compose.yml` | 单容器 `opsx-licence` + SQLite 备份 sidecar;数据卷 `licence_data` → `/data/db.sqlite3` | | `Dockerfile` | Node 打前端 → Go embed → debian 运行时,`PORT=9001` | | `run.sh` / `Makefile` | 本地启停与构建入口 | | `docs/` | 授权模型、Waffo、本文 | 客户端公开 API 前缀:`/api/v1`(激活/心跳/checkout/webhook 等,见 README)。 管理端登录接口:`POST /api/auth/login`(限流 + 锁定,勿频繁打)。 ## 线上部署事实(待远程核实) 以下为业务侧口述;**本轮未登录服务器核实 nginx / 进程 / 目录。** ### `l123.91ai.io`(待远程核实) | 项 | 口述内容 | |----|----------| | 入口 | 公网域名 `l123.91ai.io` | | 反代 | **nginx** 反代到内网 **`192.168.14.7:9001`** | | 应用代码路径 | **`/srv/opsx-licence`** | | 应用端口 | 与仓内默认一致时为 **9001**(待在应用机确认容器/进程绑定) | 仓内 `AGENTS.md`「服务器环境」另记:香港机 nginx 反代该域名 → `http://192.168.14.7:9001`,内网应用机容器绑 `0.0.0.0:9001`。与口述方向一致,**仍待远程再核一次**。 Webhook / 支付回跳示例(`.env.example`,非本次核实): `https://l123.91ai.io/api/v1/webhooks/waffo`、`SUCCESS_URL=https://l123.91ai.io/api/v1/purchase/success` ### `licence.rlwj.cn`(国内 · 待远程核实) | 项 | 口述内容 | |----|----------| | 入口 | 公网域名 `licence.rlwj.cn`(国内) | | 部署形态 | **nginx 与后端服务同机** | | 应用代码路径 | **`/srv/opsx-licence`** | | 应用端口 | 预期容器/进程 **9001**,常由本机 nginx 反代对外 HTTPS(待远程确认监听与 `proxy_pass`) | 仓内 `AGENTS.md` 另记该域名为国内应用服务器角色、容器绑 `127.0.0.1:9001`。与「同机 nginx+服务」口述一致,**仍待远程再核一次**。 ### 两套环境共性(待远程核实 + 仓内约定) - 部署路径统一口述为 **`/srv/opsx-licence`** - 管理后台两套地址:`https://l123.91ai.io` 与 `https://licence.rlwj.cn` - 两套环境的 `JWT_SECRET` 等应各自独立(见 `AGENTS.md`);勿混用 token - 密码与密钥:**不写入仓库**;向负责人索取或查密码管理器;泄露/遗忘时在服务器侧重置 ## 本轮未做 / 仍缺 - [ ] SSH 登录应用机 / 反代机,核对 nginx `server_name`、`proxy_pass`、证书 - [ ] 核对 `/srv/opsx-licence` 是否存在、与本机仓是否同版本、Docker Compose / 单二进制哪种在跑 - [ ] 核对容器端口绑定(`127.0.0.1:9001` vs `0.0.0.0:9001`)与健康检查 - [ ] 在 1:1(非群聊)用管理员账号验后台(**勿在群内贴密码、勿把密码写入本文件**) - [ ] 确认两套环境 Waffo / webhook 公网 URL 是否都指向对应域名 远程摸机请在与全栈工程师的 **1:1** 进行(群聊不便做登录类操作)。 ## 修订记录 | 日期 | 说明 | |------|------| | 2026-10-15 | 本机摸仓新建本文;写入用户口述两套部署并标「待远程核实」;补用途、本地跑法、关键配置路径。未 commit / 未 push。 |