系统: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:8081 | imAdmin / 123456 | 管理员后台页面 |
| MinIO 控制台 | http:// 服务器 IP:9090 | admin / admin123456 | 对象存储后台 |
常用运维命令
# 停止所有容器 docker compose down # 停止并清空全部数据卷(危险!重装才用) docker compose down -v # 重启全部容器 docker compose restart # 重启单个容器示例 docker compose restart openim-server
重要备注
日志警告:
ETCD_USERNAME/ETCD_PASSWORD未设置为空,可忽略,不影响业务。Kafka 监听 IP 务必修改为公网 IP,否则外部无法连接。
所有持久化数据目录:
/www/openim-docker/components,备份直接备份该目录。密码说明:
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
有无报错

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