- docker-compose: openim-server v3.8.3-patch.12 + mongo/redis/etcd/kafka/minio + livekit v1.13.5 - 按约束移除 openim-chat(GPLv3) 及依赖它的 web/admin 前端; 监控组件收进 profile m - scripts/deploy.sh 一键部署, scripts/selftest.sh 自测(注册/登录/文字/语音/文件/一对一通话), scripts/restart.sh 重启 - README: 部署记录(服务器要求/端口表/运维/接入参数)
53 lines
1.7 KiB
Bash
Executable File
53 lines
1.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# OpenIM + LiveKit 内网测试环境一键部署
|
|
# 用法: ./scripts/deploy.sh [服务器内网IP] (不传则自动探测)
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")/.."
|
|
|
|
# 1. 首次运行从模板生成 .env
|
|
if [ ! -f .env ]; then
|
|
cp .env.example .env
|
|
echo "已从 .env.example 生成 .env"
|
|
fi
|
|
|
|
# 2. 确定服务器内网 IP
|
|
IP="${1:-}"
|
|
if [ -z "$IP" ]; then
|
|
IP=$(hostname -I 2>/dev/null | awk '{print $1}')
|
|
fi
|
|
if [ -z "$IP" ]; then
|
|
echo "无法自动获取内网 IP,请手动传入: ./scripts/deploy.sh <服务器IP>"
|
|
exit 1
|
|
fi
|
|
echo "使用服务器 IP: $IP"
|
|
|
|
# 3. 把 IP 写进 .env(MinIO 外链地址必须是客户端能访问的地址)
|
|
sed -i "s|^SERVER_IP=.*|SERVER_IP=${IP}|" .env
|
|
sed -i "s|^MINIO_EXTERNAL_ADDRESS=.*|MINIO_EXTERNAL_ADDRESS=\"http://${IP}:10005\"|" .env
|
|
sed -i "s|^GRAFANA_URL=.*|GRAFANA_URL=\"http://${IP}:13000/\"|" .env
|
|
|
|
# 4. 预创建挂载目录(避免 docker 把文件路径自动建成目录)
|
|
mkdir -p components/redis/config components/mnt/data components/mongodb components/etcd components/kafka
|
|
touch components/redis/config/redis.conf
|
|
|
|
# 5. 拉镜像并启动
|
|
docker compose pull
|
|
docker compose up -d
|
|
|
|
# 6. 等待 openim-server 健康(首次启动约 30-60 秒)
|
|
echo "等待 openim-server 就绪(最长约 2 分钟)..."
|
|
status="unknown"
|
|
for _ in $(seq 1 24); do
|
|
status=$(docker inspect -f '{{.State.Health.Status}}' openim-server 2>/dev/null || echo "unknown")
|
|
[ "$status" = "healthy" ] && break
|
|
sleep 5
|
|
done
|
|
|
|
docker compose ps
|
|
echo
|
|
if [ "$status" = "healthy" ]; then
|
|
echo "部署完成。下一步运行自测: ./scripts/selftest.sh ${IP}"
|
|
else
|
|
echo "openim-server 尚未 healthy(当前: ${status})。可执行 docker compose logs -f openim-server 查看日志。"
|
|
fi
|