feat: SaaS架构改造 - 后端部署到服务器, 数据库留本机用frp隧道连接
- 新增 deploy-server.sh: 后端部署脚本(rsync + npm install + pm2) - frp 隧道从暴露API(3333→13333)改为暴露PostgreSQL(5432→15432) - 后端部署到服务器 /opt/sbrain-server, pm2管理, 端口9333 - Nginx /api/ 从 127.0.0.1:13333 改为 127.0.0.1:9333 - 服务器 .env: DB_PORT=15432 连接frp隧道 - run.md 全面更新为新架构说明 - 新增 docs/20260802-SaaS+本地数据库.md 架构方案文档 - 移除本机后端 launchd 服务(后端已上服务器)
This commit is contained in:
@@ -9,44 +9,87 @@
|
||||
| 潘家园店长 | 123 | store |
|
||||
| 商品部 | 123 | dept |
|
||||
|
||||
## 本地开发启动
|
||||
## 架构(2026-08-02 更新:SaaS + 本地数据库)
|
||||
|
||||
后端服务和 frp 隧道已配置为 macOS launchd 系统级服务,开机自动启动,崩溃自动重启,与 IDE 无关。
|
||||
```
|
||||
浏览器 → https://dm.all8ai.top
|
||||
→ Nginx(服务器) → /api/ → 127.0.0.1:9333 (服务器后端, pm2管理)
|
||||
→ frp隧道 127.0.0.1:15432 → 本机PostgreSQL:5432
|
||||
```
|
||||
|
||||
### 系统级服务(launchd)
|
||||
- **前端**:服务器 Nginx 静态文件 `/var/www/dm.all8ai.top`
|
||||
- **后端**:服务器 `/opt/sbrain-server`,pm2 管理,端口 9333
|
||||
- **数据库**:本机 PostgreSQL 15,端口 5432,数据库 bill_query
|
||||
- **frp 隧道**:暴露 PostgreSQL(5432→15432),服务器后端通过 15432 连接本机数据库
|
||||
|
||||
已创建两个 LaunchAgent:
|
||||
## 部署流程
|
||||
|
||||
### 前端部署
|
||||
|
||||
```bash
|
||||
bash deploy.sh
|
||||
```
|
||||
|
||||
构建前端 + scp 上传到服务器 `/var/www/dm.all8ai.top`。
|
||||
|
||||
### 后端部署
|
||||
|
||||
```bash
|
||||
bash deploy-server.sh
|
||||
```
|
||||
|
||||
rsync 同步代码到服务器 `/opt/sbrain-server` + npm install + pm2 重启。
|
||||
|
||||
### 本机 frp 隧道(launchd 系统级服务)
|
||||
|
||||
frpc 配置(`/Users/freedak/frp/frpc.toml`):
|
||||
|
||||
```toml
|
||||
serverAddr = "152.136.182.184"
|
||||
serverPort = 7000
|
||||
loginFailExit = false
|
||||
auth.token = "frp_gitea_2026"
|
||||
|
||||
[[proxies]]
|
||||
name = "dm-db"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 5432
|
||||
remotePort = 15432
|
||||
```
|
||||
|
||||
已配置为 macOS launchd 系统级服务,开机自动启动,崩溃自动重启,与 IDE 无关。
|
||||
|
||||
| 服务 | plist | 日志 |
|
||||
|------|-------|------|
|
||||
| 后端 (localhost:3333) | `~/Library/LaunchAgents/com.sbrain.backend.plist` | `~/Library/Logs/sbrain-backend.log` |
|
||||
| frp 隧道 (13333→3333) | `~/Library/LaunchAgents/com.frp.client.plist` | `~/Library/Logs/frpc.log` |
|
||||
|
||||
两个服务均配置了 `KeepAlive: true`,崩溃后自动重启。开机/登录后自动启动,关闭 IDE 和终端不影响运行。
|
||||
| frp 隧道 (5432→15432) | `~/Library/LaunchAgents/com.frp.client.plist` | `~/Library/Logs/frpc.log` |
|
||||
|
||||
#### 管理命令
|
||||
|
||||
```bash
|
||||
# 停止服务
|
||||
launchctl unload ~/Library/LaunchAgents/com.sbrain.backend.plist
|
||||
launchctl unload ~/Library/LaunchAgents/com.frp.client.plist
|
||||
# 停止 frpc
|
||||
launchctl bootout gui/$(id -u)/com.frp.client
|
||||
|
||||
# 启动服务
|
||||
launchctl load ~/Library/LaunchAgents/com.sbrain.backend.plist
|
||||
# 启动 frpc
|
||||
launchctl load ~/Library/LaunchAgents/com.frp.client.plist
|
||||
|
||||
# 查看日志
|
||||
tail -f ~/Library/Logs/sbrain-backend.log
|
||||
tail -f ~/Library/Logs/frpc.log
|
||||
|
||||
# 检查状态
|
||||
curl -s http://localhost:3333/api/health
|
||||
pgrep -l frpc
|
||||
curl -s https://dm.all8ai.top/api/health
|
||||
```
|
||||
|
||||
### 手动启动(备用,launchd 未运行时)
|
||||
#### 手动启动 frpc(备用,launchd 未运行时)
|
||||
|
||||
#### 1. 启动后端服务
|
||||
```bash
|
||||
cd /Users/freedak/frp && ./frpc -c frpc.toml &
|
||||
```
|
||||
|
||||
## 本地开发
|
||||
|
||||
### 后端开发
|
||||
|
||||
```bash
|
||||
cd server && npm run dev
|
||||
@@ -54,35 +97,38 @@ cd server && npm run dev
|
||||
|
||||
后端运行在 `http://localhost:3333`,连接本地 PostgreSQL(`localhost:5432`,数据库 `bill_query`)。
|
||||
|
||||
#### 2. 启动 frp 隧道
|
||||
|
||||
线上 Nginx 将 `/api/` 代理到远程 `127.0.0.1:13333`,通过 frp tcp 代理转发到本地后端 3333 端口:
|
||||
|
||||
frpc 配置(`/Users/freedak/frp/frpc.toml`)中已包含 dm-api 代理:
|
||||
|
||||
```toml
|
||||
[[proxies]]
|
||||
name = "dm-api"
|
||||
type = "tcp"
|
||||
localIP = "127.0.0.1"
|
||||
localPort = 3333
|
||||
remotePort = 13333
|
||||
```
|
||||
|
||||
重启 frpc:
|
||||
### 前端开发
|
||||
|
||||
```bash
|
||||
kill -9 $(pgrep frpc); cd /Users/freedak/frp && ./frpc -c frpc.toml &
|
||||
cd client && npm run dev
|
||||
```
|
||||
|
||||
### 访问
|
||||
访问 `http://localhost:5173`(Vite proxy 自动转发 `/api` 到 `localhost:3333`)。
|
||||
|
||||
- **线上前端**:`https://dm.all8ai.top`(API请求通过 frp 隧道转发到本地后端)
|
||||
- **本地前端开发**:`cd client && npm run dev`,访问 `http://localhost:5173`(Vite proxy 自动转发 `/api` 到 `localhost:3333`)
|
||||
## 服务器后端管理
|
||||
|
||||
### 注意事项
|
||||
```bash
|
||||
# 查看后端状态
|
||||
ssh ubuntu@152.136.182.184 'pm2 status sbrain-server'
|
||||
|
||||
- 本地 PostgreSQL 端口 5432 被 Homebrew PostgreSQL 占用,数据库 `bill_query` 在本地
|
||||
- frp 隧道将远程 13333 映射到本地 3333,服务器 Nginx 配置 `/api/` → `127.0.0.1:13333`
|
||||
- launchd 服务开机自启,关闭 IDE/终端不影响;仅注销/关机时停止,下次登录/开机自动恢复
|
||||
- `server/.env` 中 `DB_PORT=5432` 连接本地数据库,不要改为 5433
|
||||
# 查看后端日志
|
||||
ssh ubuntu@152.136.182.184 'pm2 logs sbrain-server --lines 50'
|
||||
|
||||
# 重启后端
|
||||
ssh ubuntu@152.136.182.184 'pm2 restart sbrain-server'
|
||||
|
||||
# 查看后端 .env
|
||||
ssh ubuntu@152.136.182.184 'cat /opt/sbrain-server/.env'
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 本机 PostgreSQL 端口 5432 被 Homebrew PostgreSQL 占用,数据库 `bill_query` 在本地
|
||||
- frp 隧道将远程 15432 映射到本地 5432,服务器后端通过 15432 连接本机数据库
|
||||
- 本机只需运行 frpc(launchd 自启),后端已部署到服务器
|
||||
- 修改后端代码后执行 `bash deploy-server.sh` 部署到服务器
|
||||
- 修改前端代码后执行 `bash deploy.sh` 部署到服务器
|
||||
- `server/.env`(本机开发用)中 `DB_PORT=5432` 连接本地数据库,不要改为 5433
|
||||
- 服务器 `/opt/sbrain-server/.env` 中 `DB_PORT=15432` 连接 frp 隧道端口
|
||||
- frpc 断开后线上前端 API 会失效,需重新启动 frpc
|
||||
- launchd 服务开机自启,关闭 IDE/终端不影响;仅注销/关机时停止,下次登录/开机自动恢复
|
||||
Reference in New Issue
Block a user