修改配置
This commit is contained in:
46
README.md
46
README.md
@@ -129,6 +129,8 @@ vim .env.deploy-test
|
|||||||
|
|
||||||
> **pc(Electron)依赖安装**:在跑 `06-install-frontend.sh` 前,裸机请先执行 **`00-init-tools.sh`**(见上文「步骤 0」,含 GitHub SSH→HTTPS 重写)。仍报错见下文「pc 前端 yarn install 失败」。`pc` 建议仅用 **Yarn**;可删除 `package-lock.json` 消除混用锁文件警告。
|
> **pc(Electron)依赖安装**:在跑 `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`)
|
## 配置文件(`.env.deploy-test`)
|
||||||
@@ -182,9 +184,11 @@ TENCENT_SDK_SECRET_KEY=xxx
|
|||||||
|
|
||||||
### 后端服务
|
### 后端服务
|
||||||
|
|
||||||
| 服务 | 端口 |
|
| 服务 | 端口 / 说明 |
|
||||||
|------|------|
|
|------|-------------|
|
||||||
| openim-server | :10002 (HTTP) / :10001 (WS) |
|
| openim-server | :10002(HTTP API)、:10001(MsgGateway WebSocket)— **同一进程上两个监听端口**,不是两个独立后端 |
|
||||||
|
| chat-rpc | 对内 RPC(注册到 Etcd,无单独对外 HTTP 端口) |
|
||||||
|
| admin-rpc | 同上 |
|
||||||
| chat-api | :10008 |
|
| chat-api | :10008 |
|
||||||
| admin-api | :10009 |
|
| admin-api | :10009 |
|
||||||
| meetingmsg | :8000 (WS) |
|
| meetingmsg | :8000 (WS) |
|
||||||
@@ -192,6 +196,21 @@ TENCENT_SDK_SECRET_KEY=xxx
|
|||||||
| livestream | :8081 |
|
| livestream | :8081 |
|
||||||
| build-server | :8281 |
|
| 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
|
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
|
```bash
|
||||||
# 验证 MongoDB / S3 连接
|
|
||||||
./deploy-test/check-conn.sh
|
|
||||||
|
|
||||||
# 查看 LiveKit 日志(WebRTC 不通时)
|
# 查看 LiveKit 日志(WebRTC 不通时)
|
||||||
./deploy-test/logs.sh livekit --last
|
./deploy-test/logs.sh livekit --last
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,9 @@
|
|||||||
# ./check-conn.sh # 同时检查 MongoDB 和 S3
|
# ./check-conn.sh # 同时检查 MongoDB 和 S3
|
||||||
# ./check-conn.sh mongo # 只检查 MongoDB
|
# ./check-conn.sh mongo # 只检查 MongoDB
|
||||||
# ./check-conn.sh s3 # 只检查 S3
|
# ./check-conn.sh s3 # 只检查 S3
|
||||||
|
#
|
||||||
|
# 环境:
|
||||||
|
# CHECK_CONN_AUTO_INSTALL=1 以 root 运行时尝试用 apt/dnf/yum 安装 awscli、mongosh(可选)
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common.sh"
|
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common.sh"
|
||||||
@@ -14,12 +17,90 @@ init_script_log # ← 脚本执行日志
|
|||||||
|
|
||||||
TARGET="${1:-all}"
|
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 "远程服务连接检查"
|
header "远程服务连接检查"
|
||||||
|
|
||||||
# ──────────────────────────────────────────────────────────────────────────────
|
# ──────────────────────────────────────────────────────────────────────────────
|
||||||
# MongoDB
|
# MongoDB
|
||||||
# ──────────────────────────────────────────────────────────────────────────────
|
# ──────────────────────────────────────────────────────────────────────────────
|
||||||
check_mongo() {
|
check_mongo() {
|
||||||
|
_try_install_mongosh
|
||||||
|
|
||||||
step "MongoDB: ${MONGO_HOST}:${MONGO_PORT}/${MONGO_DATABASE}"
|
step "MongoDB: ${MONGO_HOST}:${MONGO_PORT}/${MONGO_DATABASE}"
|
||||||
|
|
||||||
echo -e " Host: ${MONGO_HOST}"
|
echo -e " Host: ${MONGO_HOST}"
|
||||||
@@ -52,7 +133,7 @@ check_mongo() {
|
|||||||
info "mongosh 未安装,使用 nc 检查端口..."
|
info "mongosh 未安装,使用 nc 检查端口..."
|
||||||
if nc -z -w5 "${MONGO_HOST}" "${MONGO_PORT}" 2>/dev/null; then
|
if nc -z -w5 "${MONGO_HOST}" "${MONGO_PORT}" 2>/dev/null; then
|
||||||
success "MongoDB 端口 ${MONGO_HOST}:${MONGO_PORT} 可达 ✓"
|
success "MongoDB 端口 ${MONGO_HOST}:${MONGO_PORT} 可达 ✓"
|
||||||
warn "(未验证认证,安装 mongosh 可做完整测试)"
|
warn "(未验证认证,安装 mongosh 可做完整测试: $(_hint_install_mongosh))"
|
||||||
else
|
else
|
||||||
error "MongoDB 端口不可达: ${MONGO_HOST}:${MONGO_PORT}"
|
error "MongoDB 端口不可达: ${MONGO_HOST}:${MONGO_PORT}"
|
||||||
fi
|
fi
|
||||||
@@ -73,7 +154,7 @@ except Exception as e:
|
|||||||
PYEOF
|
PYEOF
|
||||||
[[ $? -eq 0 ]] && success "MongoDB 连接正常" || error "MongoDB 连接失败"
|
[[ $? -eq 0 ]] && success "MongoDB 连接正常" || error "MongoDB 连接失败"
|
||||||
else
|
else
|
||||||
warn "跳过 MongoDB 连接验证(请安装 mongosh: brew install mongosh)"
|
warn "跳过 MongoDB 连接验证(请安装 mongosh: $(_hint_install_mongosh))"
|
||||||
echo -e " 手动验证: mongosh \"${MONGO_URI}\""
|
echo -e " 手动验证: mongosh \"${MONGO_URI}\""
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -138,12 +219,14 @@ _check_s3_bucket() {
|
|||||||
warn "S3 写入测试失败(Bucket 可读但可能无写权限)"
|
warn "S3 写入测试失败(Bucket 可读但可能无写权限)"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
warn "awscli 未安装,跳过验证(brew install awscli)"
|
warn "awscli 未安装,跳过验证($(_hint_install_awscli))"
|
||||||
echo " 手动验证: AWS_ACCESS_KEY_ID=${key_id} aws s3 ls s3://${bucket}"
|
echo " 手动验证: AWS_ACCESS_KEY_ID=${key_id} aws s3 ls s3://${bucket}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
check_s3() {
|
check_s3() {
|
||||||
|
_try_install_awscli
|
||||||
|
|
||||||
step "S3 (open-im-server) — IM 文件存储"
|
step "S3 (open-im-server) — IM 文件存储"
|
||||||
_check_s3_bucket \
|
_check_s3_bucket \
|
||||||
"openim" \
|
"openim" \
|
||||||
|
|||||||
Reference in New Issue
Block a user