Rocket.Chat小火箭IM安装配置
目录
环境准备
系统要求
- 操作系统: 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界面
- 打开浏览器访问:
https://your-domain.com - 等待初始化完成 (可能需要几分钟)
设置向导
第1步: 管理员信息
全名: 管理员姓名
用户名: admin (建议使用复杂用户名)
邮箱: [email protected]
密码: 强密码 (至少8位,包含大小写字母、数字、特殊字符)
第2步: 组织信息
组织名称: 你的组织名称
行业类型: 选择相应行业
组织规模: 选择人员规模
国家: 选择所在国家
国家选择影响:
- 时区设置
- 语言本地化
- 法规合规 (如GDPR)
- 服务器推荐
第3步: 服务器信息
服务器名称: 工作区显示名称
服务器类型:
- Community: 社区版 (免费)
- Enterprise: 企业版 (付费)
第4步: 注册服务器 (可选)
- 选择是否注册到Rocket.Chat云服务
- 注册后可获得推送通知等服务
- 可以跳过,后续在设置中配置
管理员设置
访问管理面板
- 点击右上角头像
- 选择 "管理" 或直接访问:
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密码管理
获取密码
- 启用E2EE后,系统会显示密码
- 点击 "Save your encryption password" 查看
- 复制并安全保存密码
分发密码
- 通过安全渠道分发给团队成员
- 建议使用密码管理器存储
- 定期更换密码提高安全性
重置密码
路径: 管理 → 设置 → End-to-end encryption → Restore defaults
注意: 重置后历史加密内容将无法解密
存储配置
文件存储类型
路径: 管理 → 设置 → 搜索 "storage"
GridFS存储 (默认)
存储类型: GridFS
位置: MongoDB数据库内
优点: 数据一致性好,备份简单
缺点: 可能影响数据库性能
适用: 小到中等规模部署
文件系统存储
存储类型: FileSystem
系统路径: /app/uploads (容器内路径)
优点: 性能更好,便于直接访问
缺点: 需要额外配置持久化存储
适用: 大规模部署或高性能需求
配置文件系统存储
修改存储类型
管理→设置→ 搜索 "Custom Emoji Filesystem"- Storage Type: 选择 "FileSystem"
- System Path: 设置存储路径
- 保存设置
配置持久化存储
编辑 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配置
- 登录后会提示输入E2EE密码
- 输入管理员提供的E2EE密码
- 点击 "Enable encryption"
- 验证加密功能正常
桌面端配置
下载客户端
- 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. 端口说明
| 端口 | 服务 | 说明 |
|---|---|---|
| 80 | HTTP | 自动重定向到HTTPS |
| 443 | HTTPS | 主要访问端口 |
| 3000 | Rocket.Chat | 容器内部端口 |
| 27017 | MongoDB | 数据库端口 (内部) |
B. 目录结构
/home/rocketchat/
├── compose.yml # Docker Compose配置
├── traefik.yml # Traefik配置
├── .env # 环境变量
├── uploads/ # 文件上传目录 (可选)
└── backups/ # 备份目录 (可选)
C. 环境变量参考
| 变量名 | 默认值 | 说明 |
|---|---|---|
| RELEASE | latest | Rocket.Chat版本 |
| DOMAIN | localhost | 域名 |
| ROOT_URL | http://localhost | 完整URL |
| HOST_PORT | 80 | HTTP端口 |
| LETSENCRYPT_EMAIL | - | SSL证书邮箱 |
| MONGODB_REPLICA_SET_NAME | rs0 | MongoDB副本集名 |
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):
- 发送消息
- 上传文件
- 查看历史消息