系统:Ubuntu 22.04 / 24.04 架构:单机,Mongo / Redis / ETCD / Kafka / MinIO / OpenIM Server / OpenIM Chat / Web 前端 / Admin 后台 特点:MinIO 镜像手动拉取华为云镜像,规避 Docker Hub 限流

【0. 系统前置:更新系统 + 安装 Docker】

apt update && apt upgrade -y
# 添加 docker 官方密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加 docker 源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 docker + compose 插件
apt update
apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
# 可选:当前用户加入 docker 免 sudo(root 用户可跳过)
usermod -aG docker $USER
newgrp docker

【1. 创建项目目录并进入】

mkdir -p /www/openim-docker
cd /www/openim-docker

【2. 创建 .env 环境变量文件】

cat > .env <<'EOF'
# 基础配置
DATA_DIR=/www/openim-docker
OPENIM_SECRET=openim123456
LOG_IS_STDOUT=true
LOG_LEVEL=3

# MongoDB
MONGO_IMAGE=mongo:7.0.28
MONGO_ADDRESS=mongo:27017
MONGO_USERNAME=openim
MONGO_PASSWORD=openim123456

# Redis
REDIS_IMAGE=redis:7.0.0
REDIS_ADDRESS=redis:6379
REDIS_PASSWORD=openim123456

# ETCD
ETCD_IMAGE=bitnamilegacy/etcd:3.5.13
ETCD_ADDRESS=etcd:2379

# Kafka
KAFKA_IMAGE=apache/kafka:3.7.2
KAFKA_ADDRESS=kafka:9092
KAFKA_USERNAME=
KAFKA_PASSWORD=

# MinIO
MINIO_IMAGE=minio/minio:RELEASE.2024-01-01T16-36-33Z
MINIO_PORT=9000
MINIO_CONSOLE_PORT=9090
MINIO_ACCESS_KEY=admin
MINIO_SECRET_KEY=admin123456
MINIO_INTERNAL_ADDRESS=http://minio:9000
MINIO_EXTERNAL_ADDRESS=http://192.168.0.106:9000

# OpenIM 端口
OPENIM_MSG_GATEWAY_PORT=10001
OPENIM_API_PORT=10002
CHAT_API_PORT=10008
ADMIN_API_PORT=10009
OPENIM_WEB_FRONT_PORT=8080
OPENIM_ADMIN_FRONT_PORT=8081

# OpenIM 镜像
OPENIM_SERVER_IMAGE=openim/openim-server:v3.8.3-patch.15
OPENIM_CHAT_IMAGE=openim/openim-chat:v1.8.4-patch.5
OPENIM_WEB_FRONT_IMAGE=openim/openim-web:release-v3.8.3
OPENIM_ADMIN_FRONT_IMAGE=openim/openim-admin:release-v3.8.3

# 监控(暂时不用)
PROMETHEUS_IMAGE=prom/prometheus:v2.47.0
ALERTMANAGER_IMAGE=prom/alertmanager:v0.26.0
GRAFANA_IMAGE=grafana/grafana:10.1.0
NODE_EXPORTER_IMAGE=prom/node-exporter:v1.6.0
PROMETHEUS_PORT=9090
ALERTMANAGER_PORT=9093
GRAFANA_PORT=3000
NODE_EXPORTER_PORT=9100
GRAFANA_URL=http://127.0.0.1:3000
API_URL=http://openim-server:10002
EOF

✅ 修改提示:MINIO_EXTERNAL_ADDRESS 替换为你的服务器公网 IP

【3. 创建 docker-compose.yaml 完整编排文件(重点:mongo 脚本内置自动创建 imAdmin)】

cat > docker-compose.yaml <<'EOF'


EOF

✅ 修改提示:kafka 内 KAFKA_ADVERTISED_LISTENERS 的 IP 替换为你的服务器公网 IP

【4. 创建数据持久化目录】

mkdir -p components/mongodb/data/{db,logs,conf} components/redis/data components/etcd components/kafka components/mnt/{data,config}

【5. 预下载所有镜像(重点:MinIO 手动拉取华为云镜像,规避 Docker Hub 限流)】

# 拉取除 minio 以外所有镜像
docker compose pull
# 华为云镜像源拉 minio
docker pull swr.cn-east-2.myhuaweicloud.com/minio/minio:RELEASE.2024-01-01T16-36-33Z
# 打标签,让 compose 识别
docker tag swr.cn-east-2.myhuaweicloud.com/minio/minio:RELEASE.2024-01-01T16-36-33Z minio/minio:RELEASE.2024-01-01T16-36-33Z
# 删除冗余镜像
docker rmi swr.cn-east-2.myhuaweicloud.com/minio/minio:RELEASE.2024-01-01T16-36-33Z

【6. 校验 yaml 语法(必做,提前排查错误)】

docker compose config

✅ 成功:输出完整配置无报错;有报错不能继续部署

【7. 启动全部容器】

docker compose up -d

【8. 查看容器状态,等待健康检查通过】

docker compose ps

openim-server /openim-chat 初始状态 health: starting,等待 30 秒~2 分钟,状态变为 Up (healthy)✅ 原理:Mongo 容器初始化时自动创建 imAdmin IM 管理员用户,不再需要 mage 命令

【9. 查看日志排查错误】

# 查看全部日志
docker compose logs -f
# 单独查看 openim-server / openim-chat 日志
docker compose logs -f openim-server openim-chat

Ctrl+C 退出日志查看

【10. 防火墙放行端口(公网访问必需)】

ufw allow 8080,8081,10001,10002,10008,10009,9000,9090/tcp
ufw reload

访问地址清单

表格

服务地址账号 / 密码说明
Web 聊天前端http:// 服务器 IP:8080自行注册用户聊天页面
Admin 管理后台http:// 服务器 IP:8081imAdmin / 123456管理员后台页面
MinIO 控制台http:// 服务器 IP:9090admin / admin123456对象存储后台

常用运维命令

# 停止所有容器
docker compose down
# 停止并清空全部数据卷(危险!重装才用)
docker compose down -v
# 重启全部容器
docker compose restart
# 重启单个容器示例
docker compose restart openim-server

重要备注

  1. 日志警告:ETCD_USERNAME / ETCD_PASSWORD 未设置为空,可忽略,不影响业务。

  2. Kafka 监听 IP 务必修改为公网 IP,否则外部无法连接。

  3. 所有持久化数据目录:/www/openim-docker/components,备份直接备份该目录。

  4. 密码说明:imAdmin 密码 123456,在 mongo 脚本内使用 bcrypt 哈希写入,不能直接写明文密码。

附录:已启动环境补救命令(不执行 down -v,手动插入 imAdmin)

如果你已经启动容器,不想清空数据卷,直接宿主机执行:

docker compose exec mongo mongosh -u root -p openIM123 --authenticationDatabase admin --eval "
db = db.getSiblingDB('openim_v3');
var imUser = db.user.findOne({userID:'imAdmin'});
if(!imUser){
  db.user.insertOne({
    userID:'imAdmin',
    nickname:'imAdmin',
    password:'$2a$10$zXw63SegwCpcowMB43M1hupnreFirYwuQsnWJIpi5XEd/3bsZ42CS',
    faceURL:'',
    createTime:ISODate(),
    appMangerLevel:1
  });
  print('==== imAdmin IM管理员用户已创建 ====');
}
db.user.find();
"

现在你直接复制这份全文替换你原来那份文档即可。

如果你现在要直接在当前服务器部署:

cd /www/openim-docker
docker compose down -v
# 复制上面第3步的 cat > docker-compose.yaml ... 整条执行,覆盖旧 yaml
docker compose up -d

写一个完整的文档

如何规避Docker Hub限流?

如何拉取华为云镜像?

注意:

docker compose logs -f openim-server

查看日志,要成功后再查看

docker compose logs -f openim-chat

有无报错


image.png

样子就是这样子吧,如果你有业务需要可以基于这个再次开发,目前开源的肯定没有成本能运营的表征那么完整的生态。这个只是框架底子,并不是说这个项目就是拿来搭建就能运营上架的标准哦,根据业务拿来二开是个不错的选择