修改配置

This commit is contained in:
vet
2026-04-13 20:55:50 +07:00
parent ad326b7500
commit 90c36c525d
2 changed files with 126 additions and 9 deletions

View File

@@ -129,6 +129,8 @@ vim .env.deploy-test
> **pcElectron依赖安装**:在跑 `06-install-frontend.sh` 前,裸机请先执行 **`00-init-tools.sh`**(见上文「步骤 0」含 GitHub SSH→HTTPS 重写。仍报错见下文「pc 前端 yarn install 失败」。`pc` 建议仅用 **Yarn**;可删除 `package-lock.json` 消除混用锁文件警告。
> **`07-start-frontend.sh`**:启动前会读取 `.env.deploy-test`(若存在),文末「访问地址」等处使用 `DEPLOY_TEST_IP`;未设置时默认为 `127.0.0.1`,避免脚本在 `set -u` 下因未定义变量退出。
---
## 配置文件(`.env.deploy-test`
@@ -182,9 +184,11 @@ TENCENT_SDK_SECRET_KEY=xxx
### 后端服务
| 服务 | 端口 |
|------|------|
| openim-server | :10002 (HTTP) / :10001 (WS) |
| 服务 | 端口 / 说明 |
|------|-------------|
| openim-server | :10002HTTP API、:10001MsgGateway WebSocket**同一进程上两个监听端口**,不是两个独立后端 |
| chat-rpc | 对内 RPC注册到 Etcd无单独对外 HTTP 端口) |
| admin-rpc | 同上 |
| chat-api | :10008 |
| admin-api | :10009 |
| meetingmsg | :8000 (WS) |
@@ -192,6 +196,21 @@ TENCENT_SDK_SECRET_KEY=xxx
| livestream | :8081 |
| build-server | :8281 |
> **进程数量**`05-start.sh` 会拉起 **9 个独立操作系统进程**(上表 9 行)。其中 `openim-server` 是 **一个** OpenIM 单二进制,内部包含用户/群组/消息等 RPC 与 API、网关等模块官方文档或 K8s 部署里常把其中一部分拆成多个 Pod看起来像「十几个服务」在本仓库的**单机单进程**模式下合并进同一个 `openim-server`,因此只看到 **1 个 PID**、**2 个对客户端暴露的端口**10002 + 10001
### 架构说明:`openim-server` 内部 RPC 与 `chat` 四进程
#### `openim-server`:单进程里模块之间怎么调 RPC
- 单二进制在 `main` 里依次启动多个子模块(如 auth、user、group、msg、API、MsgGateway 等)。模块之间**仍然是 gRPC**:各模块在本机 **TCP** 上起 gRPC Server端口可在配置里固定或由 `autoSetPorts` 分配),客户端通过 **`GetConn(服务名)`** 去连。
- 服务发现使用 **`discovery/standalone`**`config.SetStandalone()`):在**当前进程内**维护「服务名 → 地址」的注册表,**不经过**本机 Docker 里的 **Etcd**。部署里的 **Etcd** 主要给 **chat** 与其它独立进程做发现;与 `openim-server` **内部** RPC 是两套机制。
#### `chat` 为何是 `chat-rpc` / `admin-rpc` / `chat-api` / `admin-api` 四个进程?
- **源码即四个独立 `main` 包**`chat/cmd/rpc/...``chat/cmd/api/...`),与上游 OpenIM Chat 一致,编译为四个二进制,由 `04-build.sh` / `05-start.sh` 分别拉起。
- **职责拆分****RPC**(给其它服务 gRPC 调用)与 **HTTP API**(对外 REST分开**业务侧chat** 与 **管理侧admin** 分开,便于鉴权、独立重启、按负载分别扩容,生产环境也可分机器部署。
- **能否合并成一个进程(像 `openim-server` 那样)?** **理论上可以**:新增统一入口、在同一进程内启动四套逻辑并处理端口与 Etcd 注册即可。但本仓库 **当前未提供**该单进程模式,需要额外开发与测试;**默认与推荐**仍是 **4 进程** 部署。
### 前端开发服务器(可选)
| 项目 | 端口 | 说明 |
@@ -316,12 +335,27 @@ TENCENT_SDK_SECRET_KEY=xxx
cd pc && rm -rf node_modules && yarn install
```
### `check-conn.sh`MongoDB / S3
`.env.deploy-test` 检查远程 MongoDB 与两个 S3 Bucket。
| 项目 | 说明 |
|------|------|
| **完整校验** | 安装 **mongosh** 可测认证与库访问;安装 **AWS CLI**(命令 `aws`)可列桶与读写探测。 |
| **未安装工具时** | MongoDB 可用 **nc** 仅测端口连通S3 会跳过并打印手动验证命令。 |
| **安装提示** | 脚本按系统给出命令macOS 为 `brew`Debian/Ubuntu 为 `apt-get`Amazon/RHEL 为 `dnf`/`yum`),不会在 Linux 上误导为 `brew`。 |
| **可选自动安装** | 以 **root** 执行且设置 `CHECK_CONN_AUTO_INSTALL=1` 时,会尝试用 `apt`/`dnf`/`yum` 安装缺失的 `awscli``mongodb-mongosh`;失败仅告警,可按屏幕提示手动安装。 |
```bash
./deploy-test/check-conn.sh
CHECK_CONN_AUTO_INSTALL=1 ./deploy-test/check-conn.sh # root可选自动安装 CLI
./deploy-test/check-conn.sh mongo
./deploy-test/check-conn.sh s3
```
### 其他
```bash
# 验证 MongoDB / S3 连接
./deploy-test/check-conn.sh
# 查看 LiveKit 日志WebRTC 不通时)
./deploy-test/logs.sh livekit --last

View File

@@ -6,6 +6,9 @@
# ./check-conn.sh # 同时检查 MongoDB 和 S3
# ./check-conn.sh mongo # 只检查 MongoDB
# ./check-conn.sh s3 # 只检查 S3
#
# 环境:
# CHECK_CONN_AUTO_INSTALL=1 以 root 运行时尝试用 apt/dnf/yum 安装 awscli、mongosh可选
# =============================================================================
set -euo pipefail
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common.sh"
@@ -14,12 +17,90 @@ init_script_log # ← 脚本执行日志
TARGET="${1:-all}"
# ── 按系统给出安装提示(避免在 Linux 服务器上误导为 brew──────────────────────
_hint_install_mongosh() {
if [[ "$(uname -s)" == "Darwin" ]]; then
echo "brew install mongosh"
elif command -v apt-get &>/dev/null; then
echo "sudo apt-get update && sudo apt-get install -y mongodb-mongosh"
elif command -v dnf &>/dev/null; then
echo "sudo dnf install -y mongodb-mongosh"
else
echo "https://www.mongodb.com/docs/mongodb-shell/install/"
fi
}
_hint_install_awscli() {
if [[ "$(uname -s)" == "Darwin" ]]; then
echo "brew install awscli"
elif command -v apt-get &>/dev/null; then
echo "sudo apt-get update && sudo apt-get install -y awscli"
elif command -v dnf &>/dev/null; then
echo "sudo dnf install -y aws-cli"
elif command -v yum &>/dev/null; then
echo "sudo yum install -y aws-cli"
else
echo "https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html"
fi
}
# root + CHECK_CONN_AUTO_INSTALL=1 时尝试安装(失败则仅告警,不退出)
_try_install_mongosh() {
[[ "${CHECK_CONN_AUTO_INSTALL:-0}" == "1" ]] || return 0
command -v mongosh &>/dev/null && return 0
[[ "$(id -u)" -eq 0 ]] || {
info "CHECK_CONN_AUTO_INSTALL=1 但非 root跳过 mongosh 自动安装"
return 0
}
info "CHECK_CONN_AUTO_INSTALL尝试安装 mongosh ..."
if command -v apt-get &>/dev/null; then
if DEBIAN_FRONTEND=noninteractive apt-get update -qq \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y mongodb-mongosh; then
command -v mongosh &>/dev/null && success "mongosh 已可用" && return 0
fi
elif command -v dnf &>/dev/null; then
if dnf install -y mongodb-mongosh; then
command -v mongosh &>/dev/null && success "mongosh 已可用" && return 0
fi
fi
warn "mongosh 自动安装未成功,请手动: $(_hint_install_mongosh)"
return 0
}
_try_install_awscli() {
[[ "${CHECK_CONN_AUTO_INSTALL:-0}" == "1" ]] || return 0
command -v aws &>/dev/null && return 0
[[ "$(id -u)" -eq 0 ]] || {
info "CHECK_CONN_AUTO_INSTALL=1 但非 root跳过 awscli 自动安装"
return 0
}
info "CHECK_CONN_AUTO_INSTALL尝试安装 awscli ..."
if command -v apt-get &>/dev/null; then
if DEBIAN_FRONTEND=noninteractive apt-get update -qq \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y awscli; then
command -v aws &>/dev/null && success "awscli 已可用" && return 0
fi
elif command -v dnf &>/dev/null; then
if dnf install -y aws-cli; then
command -v aws &>/dev/null && success "awscli 已可用" && return 0
fi
elif command -v yum &>/dev/null; then
if yum install -y aws-cli; then
command -v aws &>/dev/null && success "awscli 已可用" && return 0
fi
fi
warn "awscli 自动安装未成功,请手动: $(_hint_install_awscli)"
return 0
}
header "远程服务连接检查"
# ──────────────────────────────────────────────────────────────────────────────
# MongoDB
# ──────────────────────────────────────────────────────────────────────────────
check_mongo() {
_try_install_mongosh
step "MongoDB: ${MONGO_HOST}:${MONGO_PORT}/${MONGO_DATABASE}"
echo -e " Host: ${MONGO_HOST}"
@@ -52,7 +133,7 @@ check_mongo() {
info "mongosh 未安装,使用 nc 检查端口..."
if nc -z -w5 "${MONGO_HOST}" "${MONGO_PORT}" 2>/dev/null; then
success "MongoDB 端口 ${MONGO_HOST}:${MONGO_PORT} 可达 ✓"
warn "(未验证认证,安装 mongosh 可做完整测试"
warn "(未验证认证,安装 mongosh 可做完整测试: $(_hint_install_mongosh)"
else
error "MongoDB 端口不可达: ${MONGO_HOST}:${MONGO_PORT}"
fi
@@ -73,7 +154,7 @@ except Exception as e:
PYEOF
[[ $? -eq 0 ]] && success "MongoDB 连接正常" || error "MongoDB 连接失败"
else
warn "跳过 MongoDB 连接验证(请安装 mongosh: brew install mongosh"
warn "跳过 MongoDB 连接验证(请安装 mongosh: $(_hint_install_mongosh)"
echo -e " 手动验证: mongosh \"${MONGO_URI}\""
fi
}
@@ -138,12 +219,14 @@ _check_s3_bucket() {
warn "S3 写入测试失败Bucket 可读但可能无写权限)"
fi
else
warn "awscli 未安装,跳过验证(brew install awscli"
warn "awscli 未安装,跳过验证($(_hint_install_awscli)"
echo " 手动验证: AWS_ACCESS_KEY_ID=${key_id} aws s3 ls s3://${bucket}"
fi
}
check_s3() {
_try_install_awscli
step "S3 (open-im-server) — IM 文件存储"
_check_s3_bucket \
"openim" \