ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

OpenIM 离线部署完整指南:内网环境镜像准备、传输与 Docker Compose 落地

OpenIM 离线部署完整指南:内网环境镜像准备、传输与 Docker Compose 落地 OpenIM 离线部署完整指南内网环境镜像准备、传输与 Docker Compose 落地【免费下载链接】open-im-serverIM Chat OpenClaw项目地址: https://gitcode.com/gh_mirrors/op/open-im-server本指南以 OpenIMopen-im-server官方离线部署设计文档docs/contrib/offline-deployment.md为核心骨架完整讲解在无外网/受限网络中部署 OpenIM 的全过程从基础依赖镜像与 OpenIM 业务镜像的选型、拉取、导出到代码获取、scp传输、镜像导入最后通过 Docker Compose 一键启动整套 IM 服务。读完本文你将掌握一套可复制的离线部署 SOP并理解 OpenIM 的镜像版本管理、仓库源选择与组件版本兼容策略。1. 离线部署总体思路OpenIM 是一套由多个微服务构成的即时通讯服务器官方推荐通过 Docker 镜像完成部署。离线部署的核心思想只有一句话在有外网的机器上把所需镜像全部拉取并导出为 tar 包连同部署代码一起拷入内网再在内网机器上导入镜像并启动容器。整个流程可分为四个阶段镜像准备按需拉取基础组件镜像Kafka、Redis、MongoDB、ZooKeeper、MinIO 等与 OpenIM 业务镜像server、chat、web、admin可选拉取监控组件镜像导出与传输将镜像docker save为 tar 文件把部署仓库代码一并通过scp、U 盘、移动硬盘等方式送入内网导入在内网服务器上docker load导入所有镜像部署使用 openim-docker 仓库的make init初始化配置docker compose up -d启动全部服务并验证。[!NOTE] 官方文档特别提示由于 Windows 与 Linux 换行符的差异请不要在 Windows 上 clone 仓库后再用 scp 同步到 Linux否则可能导致脚本执行异常应在 Linux 环境直接 clone 或下载 Release 压缩包。2. 基础镜像清单与拉取2.1 必需的基础镜像及版本离线部署至少需要准备以下基础镜像版本号来自官方离线部署文档请与部署目标版本保持一致镜像版本bitnami/kafka3.5.1redis7.0.0mongo6.0.2bitnami/zookeeper3.8minio/minioRELEASE.2024-01-11T07-46-16Z[!IMPORTANT]关于 MySQL 的重要说明OpenIM 自 v3.5.0release-v3.5 分支起已移除 MySQL 组件因此 v3.5.0 及以上版本的离线部署不再需要 MySQL。官方文档给出的命令中虽保留了mariadb:10.6的拉取项但这仅面向更早版本的部署需求使用 v3.5.0 时无需准备。2.2 拉取基础镜像命令在外网机器上执行docker pull bitnami/kafka:3.5.1 docker pull redis:7.0.0 docker pull mongo:6.0.2 docker pull mariadb:10.6 docker pull bitnami/zookeeper:3.8 docker pull minio/minio:2024-01-11T07-46-16Z2.3 可选的 OpenIM 业务镜像如果还需要安装更多 IM 组件可准备以下镜像version-name替换为目标版本版本策略详见本文第 4 节及 docs/contrib/images.mdghcr.io/openimsdk/openim-web:version-nameghcr.io/openimsdk/openim-admin:version-nameghcr.io/openimsdk/openim-chat:version-nameghcr.io/openimsdk/openim-server:version-name2.4 可选的监控组件镜像如需在内网同时部署监控告警体系Prometheus Alertmanager Grafana Node Exporter准备以下镜像镜像版本prom/prometheusv2.48.1prom/alertmanagerv0.23.0grafana/grafana10.2.2bitnami/node-exporter1.7.0拉取命令docker pull prom/prometheus:v2.48.1 docker pull prom/alertmanager:v0.23.0 docker pull grafana/grafana:10.2.2 docker pull bitnami/node-exporter:1.7.03. OpenIM 业务镜像的拉取OpenIM 的 Docker 镜像与 GitHub 上的 tag 版本一一对应每发布一个新版本并打 tagCI 自动化流程就会把对应镜像推送到多个镜像平台。官方强烈推荐使用ghcr.io作为部署镜像源。按镜像类别分别执行# OpenIM ServerIM 服务端核心 docker pull ghcr.io/openimsdk/openim-server:version-name # OpenIM Chat聊天业务层 docker pull ghcr.io/openimsdk/openim-chat:version-name # OpenIM WebWeb 前端 docker pull ghcr.io/openimsdk/openim-web:version-name # OpenIM Admin管理后台前端 docker pull ghcr.io/openimsdk/openim-admin:version-name[!TIP] 关于 OpenIM 镜像版本管理与存储策略的详细说明含 server/chat 版本对应关系可查阅 docs/contrib/version.md。3.1 镜像版本命名规则以 openim-server 为例依据 docs/contrib/images.md镜像遵循语义化版本 2.0.0 策略。例如给仓库打上v3.5.0tag 后CI 会自动发布以下镜像 tagopenim-server:3openim-server:3.5openim-server:3.5.0openim-server:v3.5.0openim-server:latestopenim-server:sha-e0244d9基于 commit SHA 的唯一 tag其中只有sha-commit形式的 tag 是绝对唯一的v3.5.0与3.5.0也保持相对唯一性。部分镜像还提供多架构multi-arch支持可按OS / Arch选择适合当前服务器架构的镜像。4. 镜像仓库源与版本选择4.1 可选的镜像仓库源OpenIM 镜像托管在三个平台可根据网络环境选择仓库源地址适用场景GitHub Container Registryghcr.io/openimsdk/openim-server官方推荐与源码仓库 CI/CD 集成最好阿里云容器镜像服务registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-server中国大陆用户拉取速度快Docker Hubopenim/openim-server全球开发者通用平台例如从不同源拉取openim-server:latest# GitHub docker pull ghcr.io/openimsdk/openim-server:latest # 阿里云大陆推荐 docker pull registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-server:latest # Docker Hub docker pull docker.io/openim/openim-server:latest4.2 版本类型选择部署前需要确定镜像版本官方提供三类选择稳定版Stable如release-v3.2也可以是 3.1、3.3 等 release 分支适合生产环境最新版Latestlatest跟随最新发布main 分支最新版main对应主分支最新代码更新频繁、可能包含不稳定特性。依据 docs/contrib/version.mdOpenIM 采用MAJOR.MINOR.PATCH语义化版本MAJOR表示不兼容的 API 变更MINOR表示向后兼容的新功能PATCH表示向后兼容的缺陷修复。main分支承载最新特性可能不稳定每次重大发布都会派生出如release-v3.1这样的稳定分支tag如v3.1.0则用于锁定不可变的具体版本。4.3 组件版本兼容Version Skew策略离线部署时若混合使用不同版本组件请参考以下兼容约束详见 docs/contrib/version.mdHA 集群中最新与最旧的openim-api实例必须处于同一个 minor 版本内例如同为 v3.3 与 v3.2不能跨两个 minor所有openim-rpc-*组件不得新于 openim-api最多可比 openim-api 旧一个 minor 版本其他服务openim-msggateway、openim-cmdutils、openim-crontask等同样不得新于 openim-api建议与 openim-api 的 minor 版本保持一致最多允许旧一个 minor 以便滚动升级。因此离线环境准备镜像时建议整套组件server、chat、web、admin统一选取同一版本线避免因版本错配导致服务间通信异常。5. 离线部署七步走第 1 步拉取全部所需镜像在外网机器上按第 2、3 节命令逐一docker pull所有需要的镜像基础组件 OpenIM 业务镜像 可选监控镜像。第 2 步导出镜像为 tar 文件# 导出单个镜像 docker save -o tar-file-name.tar image-name # 一次性导出当前机器上的所有镜像 docker save -o tar-file-name.tar $(docker images -q)导出的 tar 包即离线介质建议按镜像分别命名以便内网逐个导入与校验。第 3 步获取部署代码克隆 OpenIM 的 Docker 部署仓库git clone https://github.com/openimsdk/openim-docker.git也可以直接下载 openim-docker 的 Releases 版本压缩包。再次提醒避免在 Windows 上 clone 后 scp 到 Linux换行符差异会导致脚本运行异常。第 4 步传输文件到内网将镜像 tar 包与部署代码通过scp传送到内网服务器scp tar-file-name.tar userremote-ip:/path/on/remote/server也可选择移动硬盘、U 盘等物理介质拷贝具体以目标机器的可达性为准。第 5 步在内网导入镜像# 导入单个镜像包 docker load -i tar-file-name.tar如果一次性拷贝了多个 tar 包可用快捷命令循环导入当前目录下所有包for i in ls ./; do docker load -i $i; done导入完成后可执行docker images确认镜像已就绪。第 6 步进入部署目录并初始化进入openim-docker仓库目录先按仓库 README 的说明准备部署环境。第 7 步使用 Docker Compose 启动export OPENIM_IPyour ip # 设置本机 IP make init # 初始化配置生成 .env 与 config 文件 docker compose up -d # 后台启动全部服务 docker compose ps # 验证各服务运行状态Note如果使用 Docker 20 之前的旧版本请先自行安装docker-compose独立工具并相应调整命令为docker-compose。6. 部署配置关键点内网环境必读6.1OPENIM_IP环境变量export OPENIM_IPyour ip用于指定 API 服务对外地址。依据 docs/contrib/environment.md如果服务器有公网 IP会自动获取内网部署时应显式设置内网 IP。客户端App / Web正是通过该地址访问 API 与 WebSocket 服务的务必设置为客户端可达的地址。6.2 镜像源切换.env中的IMAGE_REGISTRY执行make init后会生成.env文件其中包含镜像仓库源配置默认ghcr.io/openimsdk。内网或大陆环境部署时可注释掉当前IMAGE_REGISTRY并切换为阿里云源以匹配离线镜像包的来源或提升拉取速度# 选择镜像地址GitHub (ghcr.io/openimsdk)、Docker Hub (openim) # 或阿里云 (registry.cn-hangzhou.aliyuncs.com/openimsdk) # 取消下面三项中一项的注释。中国用户推荐阿里云。 # IMAGE_REGISTRYghcr.io/openimsdk # IMAGE_REGISTRYopenim IMAGE_REGISTRYregistry.cn-hangzhou.aliyuncs.com/openimsdk[!IMPORTANT]离线部署中IMAGE_REGISTRY的值必须与内网docker load的镜像实际来源保持一致。例如你用阿里云源拉取并导出了镜像.env中应保持阿里云源配置避免 Compose 启动时去不存在的仓库重新拉取。6.3 Compose 服务构成与默认凭据open-im-server 仓库根目录的 docker-compose.yml 展示了 OpenIM 依赖的完整服务栈mongodb、redis、etcd、kafka、minio、openim-web-front以及可选 profilem下的 prometheus、alertmanager、grafana、node-exporter。各基础组件的镜像均通过环境变量注入如${MONGO_IMAGE}、${REDIS_IMAGE}、${KAFKA_IMAGE}、${MINIO_IMAGE}这些变量在make init生成的.env中定义。Compose 中的默认凭据生产环境务必修改且密码至少 8 位、不允许特殊字符参见 docs/contrib/environment.md组件默认用户名默认密码MongoDBroot / openIMopenIM123Redis-openIM123MinIOrootopenIM123组件统一变量PASSWORDopenIM123常用端口映射示例见 docker-compose.yml服务宿主机端口容器内端口mongodb3701727017redis163796379etcd12379 / 123802379 / 2380kafka190949094minio10005 / 190909000 / 9090openim-web-front11001806.4 配置文件初始化机制make init实际执行的是scripts/init_config.sh相关说明见 docs/contrib/init-config.md它会基于模板渲染生成.env与config.yaml等配置文件。open-im-server 仓库还提供了各服务的配置模板目录 config/例如 config/openim-api.yml、config/kafka.yml、config/minio.yml、config/mongodb.yml 等服务二进制文件清单见 start-config.yml。在离线环境中这些模板同样可随部署代码一并拷入内网按需调整后再启动。7. 部署验证与常见问题7.1 验证手段docker compose ps确认所有容器状态为Updocker images确认全部镜像已导入通过OPENIM_IP对应端口访问 OpenIM Web11001与 API 服务验证链路连通。7.2 常见问题速查现象可能原因与对策Compose 启动时提示拉取镜像失败.env中IMAGE_REGISTRY与离线导入的镜像源不一致确认docker load已成功且 tag 匹配容器启动后服务间无法通信OPENIM_IP未设置为内网可达地址检查 compose 网络与防火墙端口脚本执行报错、格式异常部署代码从 Windows 拷贝导致换行符问题应在 Linux 下 clone 或使用 Releases 压缩包版本混用导致 RPC 通信异常未遵循 version skew 策略整套组件应保持同一 minor 版本线使用旧版 Docker 命令不可用Docker 20 之前需安装独立docker-compose工具7.3 参考与延伸阅读本指南对应的官方设计文档docs/contrib/offline-deployment.md镜像管理策略与多源拉取指南docs/contrib/images.md版本、分支与 tag 管理策略docs/contrib/version.md环境变量与配置项总表docs/contrib/environment.md配置初始化机制docs/contrib/init-config.md官方离线部署文档中还引用了 openimsdk 社区关于离线部署相关议题issue #432、#474的讨论记录可在社区中查阅以获得更丰富的实践反馈。按照上述七个步骤即可在完全隔离的内网环境中完成 OpenIM 全栈部署在此基础上可将镜像包与配置模板固化为一套内部标准件实现多次、批量、可复现的离线交付。【免费下载链接】open-im-serverIM Chat OpenClaw项目地址: https://gitcode.com/gh_mirrors/op/open-im-server创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表