Rocket.Chat小火箭IM安装配置

目录

  1. 环境准备
  2. Docker环境安装
  3. Rocket.Chat部署
  4. 初始化配置
  5. 管理员设置
  6. 端到端加密配置
  7. 存储配置
  8. 用户管理
  9. 客户端配置
  10. 管理脚本使用

环境准备

系统要求

  • 操作系统: Ubuntu 22.04 LTS (推荐) 或 CentOS 7+
  • 内存: 最低 2GB,推荐 4GB+
  • 存储: 最低 20GB,推荐 50GB+
  • 网络: 公网IP,开放端口 80, 443
  • 域名: 已解析到服务器IP的域名

域名配置

域名作用:

  • SSL证书自动申请和续期
  • 客户端连接地址
  • 邮件通知中的链接地址

配置要求:

# DNS A记录配置示例
your-domain.com    A    47.239.250.165

Docker环境安装

安装Docker

点击查看教程


Rocket.Chat部署

部署脚本

#!/usr/bin/env bash
# Rocket.Chat 完整管理脚本 (部署 / 启动 / 停止 / 重启 / 状态 / 卸载)
# 适用: Alibaba Cloud Linux / CentOS 7+ (Docker & docker compose 已预装)
# 作者: Enhanced Version  日期: 2025-06-24
set -uo pipefail

WORKDIR="/home/rocketchat"
COMPOSE_URL="https://go.rocket.chat/i/docker-compose.yml"
ENV_URL="https://raw.githubusercontent.com/RocketChat/Docker.Official.Image/main/env.example"
TRAEFIK_URL="https://raw.githubusercontent.com/RocketChat/Docker.Official.Image/main/traefik.yml"

#--- 工具函数 -------------------------------------------------
pause() { read -rp ">> 按回车键继续..." _; }
need_root() { [[ $EUID -ne 0 ]] && { echo "请以 root 或 sudo 方式执行"; exit 1; }; }
check_cmd() { 
  if [[ "$1" == "docker compose" ]]; then
    docker compose version &>/dev/null || { echo "未安装 docker compose,请先安装后重试"; exit 1; }
  else
    command -v "$1" &>/dev/null || { echo "未安装 $1,请先安装后重试"; exit 1; }
  fi
}

check_installation() {
  if [[ ! -d "$WORKDIR" ]] || [[ ! -f "$WORKDIR/compose.yml" ]]; then
    echo "❌ 未发现 Rocket.Chat 安装,请先执行部署操作"
    return 1
  fi
  return 0
}

#--- 1) 部署 / 升级 ------------------------------------------
deploy() {
  echo "=== 部署 / 升级 Rocket.Chat ==="
  read -rp "访问域名 (chat.example.com): " DOMAIN
  read -rp "管理员邮箱 (用于 Let's Encrypt): " EMAIL
  read -rp "指定 Rocket.Chat 版本 (回车=latest): " RELEASE
  RELEASE=${RELEASE:-latest}
  
  mkdir -p "$WORKDIR" && cd "$WORKDIR"
  curl -fsSL "$COMPOSE_URL"  -o compose.yml
  curl -fsSL "$ENV_URL"      -o .env
  curl -fsSL "$TRAEFIK_URL"  -o traefik.yml
  
  # 修改 .env 关键字段
  sed -Ei "s|^#?(RELEASE=).*|\1${RELEASE}|" .env
  sed -Ei "s|^#?(ROOT_URL=).*|\1https://${DOMAIN}|" .env
  sed -Ei "s|^#?(DOMAIN=).*|\1${DOMAIN}|" .env
  sed -Ei "s|^#?(LETSENCRYPT_EMAIL=).*|\1${EMAIL}|" .env
  sed -Ei "s|^HOST_PORT=.*|HOST_PORT=|" .env        # 让 Traefik 接管 80/443
  
  echo "生成的核心配置:"
  grep -E '^(RELEASE|ROOT_URL|DOMAIN|LETSENCRYPT_EMAIL|HOST_PORT)' .env
  pause
  
  docker compose -f compose.yml -f traefik.yml up -d
  echo -e "\n✅ 部署/升级完成!几分钟后浏览器访问 https://${DOMAIN}。"
  pause
}

#--- 2) 启动服务 ------------------------------------------
start_service() {
  echo "=== 启动 Rocket.Chat 服务 ==="
  if ! check_installation; then
    pause
    return
  fi
  
  cd "$WORKDIR"
  echo "正在启动服务..."
  docker compose -f compose.yml -f traefik.yml up -d
  echo "✅ Rocket.Chat 服务已启动"
  show_status
  pause
}

#--- 3) 停止服务 ------------------------------------------
stop_service() {
  echo "=== 停止 Rocket.Chat 服务 ==="
  if ! check_installation; then
    pause
    return
  fi
  
  cd "$WORKDIR"
  echo "正在停止服务..."
  docker compose -f compose.yml -f traefik.yml stop
  echo "✅ Rocket.Chat 服务已停止"
  pause
}

#--- 4) 重启服务 ------------------------------------------
restart_service() {
  echo "=== 重启 Rocket.Chat 服务 ==="
  if ! check_installation; then
    pause
    return
  fi
  
  cd "$WORKDIR"
  echo "正在重启服务..."
  docker compose -f compose.yml -f traefik.yml restart
  echo "✅ Rocket.Chat 服务已重启"
  show_status
  pause
}

#--- 5) 查看状态 ------------------------------------------
show_status() {
  echo "=== Rocket.Chat 服务状态 ==="
  if ! check_installation; then
    pause
    return
  fi
  
  cd "$WORKDIR"
  echo "Docker 容器状态:"
  docker compose -f compose.yml -f traefik.yml ps
  echo ""
  echo "系统资源使用:"
  docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}" $(docker compose -f compose.yml -f traefik.yml ps -q) 2>/dev/null || echo "无法获取资源使用情况"
  echo ""
  if [[ -f .env ]]; then
    DOMAIN=$(grep "^DOMAIN=" .env | cut -d'=' -f2)
    if [[ -n "$DOMAIN" ]]; then
      echo "访问地址: https://$DOMAIN"
    fi
  fi
  pause
}

#--- 6) 查看日志 ------------------------------------------
show_logs() {
  echo "=== Rocket.Chat 服务日志 ==="
  if ! check_installation; then
    pause
    return
  fi
  
  cd "$WORKDIR"
  echo "选择要查看的服务日志:"
  echo "1) Rocket.Chat 主服务"
  echo "2) MongoDB 数据库"
  echo "3) Traefik 代理"
  echo "4) 所有服务"
  read -rp "请选择 [1-4]: " log_choice
  
  case "$log_choice" in
    1) docker compose logs --tail=50 -f rocketchat ;;
    2) docker compose logs --tail=50 -f mongodb ;;
    3) docker compose logs --tail=50 -f traefik ;;
    4) docker compose logs --tail=50 -f ;;
    *) echo "无效选择"; pause; return ;;
  esac
}

#--- 7) 卸载 --------------------------------------------------
uninstall() {
  echo "=== 卸载 Rocket.Chat ==="
  if ! check_installation; then
    pause
    return
  fi
  
  cd "$WORKDIR"
  echo "⚠️  警告:此操作将完全移除 Rocket.Chat 服务"
  read -rp "确认继续卸载?(y/N): " confirm
  if [[ ${confirm,,} != y ]]; then
    echo "已取消卸载操作"
    pause
    return
  fi
  
  docker compose -f compose.yml -f traefik.yml down --remove-orphans
  read -rp "是否删除持久化数据卷与镜像?(y/N): " ans
  if [[ ${ans,,} == y ]]; then
    docker volume rm $(docker volume ls -q | grep rocketchat) 2>/dev/null || true
    docker image prune -af
    echo "数据卷与镜像已删除"
  else
    echo "已保留数据卷,可后续复用"
  fi
  
  read -rp "是否删除安装目录 $WORKDIR?(y/N): " del_dir
  if [[ ${del_dir,,} == y ]]; then
    rm -rf "$WORKDIR"
    echo "安装目录已删除"
  fi
  
  echo "✅ 卸载完成"
  pause
}

#--- 主菜单 ---------------------------------------------------
main_menu() {
  clear
  echo "============ Rocket.Chat 完整管理脚本 ============"
  echo " 1) 部署 / 升级"
  echo " 2) 启动服务"
  echo " 3) 停止服务"
  echo " 4) 重启服务"
  echo " 5) 查看状态"
  echo " 6) 查看日志"
  echo " 7) 卸载 (可选删除数据)"
  echo " 0) 退出"
  echo "================================================"
  read -rp "请选择 [0-7]: " choice
  case "$choice" in
    1) deploy ;;
    2) start_service ;;
    3) stop_service ;;
    4) restart_service ;;
    5) show_status ;;
    6) show_logs ;;
    7) uninstall ;;
    0) exit 0 ;;
    *) echo "无效输入"; pause ;;
  esac
}

#--- 执行入口 -------------------------------------------------
need_root
check_cmd docker
check_cmd "docker compose"

while true; do 
  main_menu
done

验证部署

# 检查容器状态
docker ps

# 检查端口监听
sudo netstat -tlnp | grep :80
sudo netstat -tlnp | grep :443

# 测试域名访问
curl -I https://your-domain.com

初始化配置

访问Web界面

  1. 打开浏览器访问: https://your-domain.com
  2. 等待初始化完成 (可能需要几分钟)

设置向导

第1步: 管理员信息

全名: 管理员姓名
用户名: admin (建议使用复杂用户名)
邮箱: [email protected]
密码: 强密码 (至少8位,包含大小写字母、数字、特殊字符)

第2步: 组织信息

组织名称: 你的组织名称
行业类型: 选择相应行业
组织规模: 选择人员规模
国家: 选择所在国家

国家选择影响:

  • 时区设置
  • 语言本地化
  • 法规合规 (如GDPR)
  • 服务器推荐

第3步: 服务器信息

服务器名称: 工作区显示名称
服务器类型: 
  - Community: 社区版 (免费)
  - Enterprise: 企业版 (付费)

第4步: 注册服务器 (可选)

  • 选择是否注册到Rocket.Chat云服务
  • 注册后可获得推送通知等服务
  • 可以跳过,后续在设置中配置

管理员设置

访问管理面板

  1. 点击右上角头像
  2. 选择 "管理" 或直接访问: https://your-domain.com/admin

基础设置

工作区设置

路径: 管理工作区

站点名称: 显示在浏览器标题栏的名称
站点URL: https://your-domain.com
默认语言: 中文 (简体)
时区: Asia/Shanghai

账户设置

路径: 管理设置 → 搜索 "accounts"

允许用户注册: 
  - 启用: 任何人都可以注册
  - 禁用: 只能通过邀请注册

注册表单:
  - 需要姓名: 启用
  - 需要邮箱验证: 启用
  - 手动批准新用户: 根据需要

默认用户角色: user (普通用户)

邮件设置

路径: 管理邮件

SMTP服务器: smtp.gmail.com (Gmail示例)
端口: 587
用户名: [email protected]
密码: 应用专用密码
发件人邮箱: [email protected]
发件人名称: Rocket.Chat

邮件作用:

  • 用户注册验证
  • 密码重置
  • 系统通知
  • 邀请链接

端到端加密配置

启用E2EE

路径: 管理设置 → 搜索 "E2E" → End-to-end encryption

基础配置

端到端加密: 启用
允许未加密消息: 禁用 (推荐)
加密直接消息: 启用
加密私人房间: 启用
加密文件: 启用
提及功能: 启用

重要提醒

  • 启用后会生成E2EE密码 (如: effect liquid oliver monkey arnold)
  • 必须安全保存此密码
  • 每个用户在每个设备上都需要输入此密码
  • 丢失密码将无法恢复加密内容

E2EE密码管理

获取密码

  1. 启用E2EE后,系统会显示密码
  2. 点击 "Save your encryption password" 查看
  3. 复制并安全保存密码

分发密码

  • 通过安全渠道分发给团队成员
  • 建议使用密码管理器存储
  • 定期更换密码提高安全性

重置密码

路径: 管理设置End-to-end encryptionRestore defaults

注意: 重置后历史加密内容将无法解密


存储配置

文件存储类型

路径: 管理设置 → 搜索 "storage"

GridFS存储 (默认)

存储类型: GridFS
位置: MongoDB数据库内
优点: 数据一致性好,备份简单
缺点: 可能影响数据库性能
适用: 小到中等规模部署

文件系统存储

存储类型: FileSystem
系统路径: /app/uploads (容器内路径)
优点: 性能更好,便于直接访问
缺点: 需要额外配置持久化存储
适用: 大规模部署或高性能需求

配置文件系统存储

修改存储类型

  1. 管理设置 → 搜索 "Custom Emoji Filesystem"
  2. Storage Type: 选择 "FileSystem"
  3. System Path: 设置存储路径
  4. 保存设置

配置持久化存储

编辑 compose.yml:

services:
  rocketchat:
    volumes:
      - ./uploads:/app/uploads  # 添加文件存储卷
      - ./data:/app/data        # 添加数据存储卷

重启服务:

docker compose down
docker compose -f compose.yml -f traefik.yml up -d

存储限制配置

路径: 管理设置File Upload

文件上传: 启用
最大文件大小: 100MB (根据需要调整)
接受的文件类型: 留空 (允许所有类型)
被阻止的文件类型: image/svg+xml (安全考虑)
文件保护: 启用 (只有认证用户可访问)

用户管理

创建用户

路径: 管理用户新用户

姓名: 用户真实姓名
用户名: 登录用户名 (唯一)
邮箱: 用户邮箱地址
密码: 
  - 随机生成并邮件发送
  - 手动设置
角色: 
  - user: 普通用户
  - admin: 管理员
  - moderator: 版主

用户角色权限

普通用户 (user)

  • 发送消息
  • 创建频道
  • 上传文件
  • 使用基础功能

管理员 (admin)

  • 所有用户权限
  • 管理用户和频道
  • 修改系统设置
  • 查看统计信息

版主 (moderator)

  • 普通用户权限
  • 管理指定频道
  • 删除消息
  • 禁言用户

批量用户管理

导入用户

路径: 管理导入

支持格式:

  • CSV文件
  • Slack导出
  • HipChat导出

CSV格式示例:

name,username,email,password
张三,zhangsan,[email protected],password123
李四,lisi,[email protected],password456

用户状态管理

  • 活跃: 正常使用
  • 停用: 暂时禁用,保留数据
  • 删除: 永久删除用户和数据

客户端配置

移动端配置

下载应用

  • iOS: App Store搜索 "Rocket.Chat"
  • Android: Google Play搜索 "Rocket.Chat"

连接配置

服务器URL: https://your-domain.com
用户名: 注册的用户名
密码: 用户密码

E2EE配置

  1. 登录后会提示输入E2EE密码
  2. 输入管理员提供的E2EE密码
  3. 点击 "Enable encryption"
  4. 验证加密功能正常

桌面端配置

下载客户端

  • Windows: 从官网下载 .exe 安装包
  • macOS: 从官网下载 .dmg 安装包
  • Linux: 从官网下载 .AppImage 或使用包管理器

连接配置

与移动端相同,输入服务器URL和登录凭据

网页端配置

直接访问: https://your-domain.com

浏览器要求

  • Chrome 70+
  • Firefox 65+
  • Safari 12+
  • Edge 79+

管理脚本使用

脚本功能

管理脚本位置: /home/rocketchat_manager.sh

# 运行管理脚本
/home/rocketchat_manager.sh

功能菜单

1) 部署/升级 - 首次安装或版本升级
2) 启动服务 - 启动已停止的服务
3) 停止服务 - 停止运行中的服务
4) 重启服务 - 重启服务 (故障恢复)
5) 查看状态 - 检查服务运行状态
6) 查看日志 - 排查问题时查看日志
7) 卸载 - 完全移除 (谨慎使用)
0) 退出

常用操作

查看服务状态

cd /home/rocketchat
docker compose ps

查看日志

# 查看所有服务日志
docker compose logs

# 查看特定服务日志
docker compose logs rocketchat
docker compose logs mongodb
docker compose logs traefik

# 实时查看日志
docker compose logs -f rocketchat

故障排除

常见问题

1. 服务无法启动

症状: 容器启动失败或反复重启

排查步骤:

# 查看容器状态
docker compose ps

# 查看错误日志
docker compose logs rocketchat

# 检查端口占用
sudo netstat -tlnp | grep :80
sudo netstat -tlnp | grep :443

常见原因:

  • 端口被占用
  • 域名未正确解析
  • 内存不足
  • 磁盘空间不足

2. SSL证书申请失败

症状: 无法通过HTTPS访问,证书错误

排查步骤:

# 查看Traefik日志
docker compose logs traefik

# 检查域名解析
nslookup your-domain.com
dig your-domain.com

# 检查Let's Encrypt限制
# 每个域名每周最多50个证书

解决方案:

  • 确认域名正确解析到服务器IP
  • 检查防火墙是否开放80/443端口
  • 等待DNS传播完成 (最多48小时)

3. 数据库连接失败

症状: Rocket.Chat无法连接MongoDB

排查步骤:

# 检查MongoDB状态
docker compose logs mongodb

# 进入MongoDB容器
docker exec -it rocketchat-mongodb-1 mongosh

# 检查副本集状态
rs.status()

解决方案:

  • 重启MongoDB服务
  • 检查副本集配置
  • 清理损坏的数据文件

4. 用户无法登录

症状: 登录时提示用户名或密码错误

排查步骤:

# 检查用户状态
# 在管理面板 → 用户 中查看用户状态

# 重置用户密码
# 在用户编辑页面重置密码

解决方案:

  • 确认用户账户未被停用
  • 重置用户密码
  • 检查邮箱验证状态

5. E2EE无法使用

症状: 无法启用端到端加密或无法解密消息

排查步骤:

  • 确认E2EE在服务器端已启用
  • 检查客户端是否输入正确的E2EE密码
  • 验证客户端版本支持E2EE

解决方案:

  • 重新输入E2EE密码
  • 更新客户端到最新版本
  • 重置E2EE设置 (会丢失历史加密数据)

附录

A. 端口说明

端口服务说明
80HTTP自动重定向到HTTPS
443HTTPS主要访问端口
3000Rocket.Chat容器内部端口
27017MongoDB数据库端口 (内部)

B. 目录结构

/home/rocketchat/
├── compose.yml          # Docker Compose配置
├── traefik.yml         # Traefik配置
├── .env                # 环境变量
├── uploads/            # 文件上传目录 (可选)
└── backups/            # 备份目录 (可选)

C. 环境变量参考

变量名默认值说明
RELEASElatestRocket.Chat版本
DOMAINlocalhost域名
ROOT_URLhttp://localhost完整URL
HOST_PORT80HTTP端口
LETSENCRYPT_EMAIL-SSL证书邮箱
MONGODB_REPLICA_SET_NAMErs0MongoDB副本集名

D. 有用的命令

# 查看所有容器
docker ps -a

# 查看容器资源使用
docker stats

# 进入容器
docker exec -it rocketchat-rocketchat-1 bash

# 查看容器日志
docker logs rocketchat-rocketchat-1

# 重启特定服务
docker compose restart rocketchat

# 更新镜像
docker compose pull && docker compose up -d

高级配置

频道和房间管理

频道类型说明

公共频道 (#channel)

  • 标识: 以 # 开头
  • 可见性: 所有工作区成员可见
  • 加入方式: 自由加入或邀请
  • 用途: 团队公告、部门讨论、项目协作
  • 搜索: 消息内容可被搜索

私人频道 (🔒private)

  • 标识: 锁图标标识
  • 可见性: 仅邀请成员可见
  • 加入方式: 仅通过邀请
  • 用途: 机密讨论、小组协作
  • 搜索: 仅成员可搜索内容

直接消息 (DM)

  • 类型: 一对一私人聊天
  • 可见性: 仅参与者可见
  • 加密: 支持端到端加密
  • 用途: 私人沟通、敏感信息交流

创建和管理频道

创建频道:

1. 点击左侧边栏 "+" 按钮
2. 选择 "频道" 或 "私人群组"
3. 填写频道信息:
   - 名称: 频道标识符 (不可包含空格)
   - 显示名称: 用户看到的名称
   - 描述: 频道用途说明
   - 主题: 当前讨论主题
4. 设置权限和选项
5. 邀请初始成员

频道设置选项:

  • 只读频道: 仅管理员可发言
  • 广播频道: 仅授权用户可发言,其他人只能查看
  • 加密频道: 启用端到端加密 (私人频道)
  • 存档频道: 保留历史但停止新消息

频道权限管理

路径: 频道设置 → 权限

角色权限:

所有者 (Owner):
- 删除频道
- 修改频道设置
- 管理所有成员
- 设置其他管理员

管理员 (Admin):
- 修改频道信息
- 邀请/移除成员
- 删除消息
- 设置版主

版主 (Moderator):
- 删除消息
- 禁言用户
- 管理消息

成员 (Member):
- 发送消息
- 上传文件
- 查看历史消息