在一次 Rocket.Chat 生产环境的维护中,需要将服务域名从旧地址迁移到新的子域名,同时更新文件上传链接和 Jitsi 视频会议配置。这篇文章总结了整个过程中遇到的问题、解决方案以及关键操作步骤,供有类似需求的用户参考。
💡 背景
- Rocket.Chat 使用 Docker Compose 部署
- MongoDB 由 Bitnami 镜像提供
- 通过 Nginx 进行 HTTPS 反向代理
- 同时集成了 Jitsi 视频会议
🟢 域名迁移
修改 docker-compose.yml
首先需要在 docker-compose.yml 中更新 Rocket.Chat 服务的 ROOT_URL 环境变量,例如:
environment:
ROOT_URL: https://chat.example.com
修改后执行以下命令重新启动容器,使修改生效:
docker-compose down
docker-compose up -d
更新数据库中的 Site URL
Rocket.Chat 会在数据库中保存一个 Site_Url 配置,优先级高于自动推断。当域名变更时,需要同步更新此值。
进入 MongoDB 容器:
docker exec -it <mongodb-container-name> mongosh
切换数据库:
use rocketchat
更新 Site_Url:
db.rocketchat_settings.updateOne(
{ _id: "Site_Url" },
{ $set: { value: "https://chat.example.com" } }
)
也可以通过 Rocket.Chat 管理后台 → Administration → General → Site URL 进行修改,效果相同。
修改 Nginx 配置
Rocket.Chat 会根据请求头推断最终的站点 URL。为了确保传递正确的域名,需要在 Nginx 配置中增加:
proxy_set_header X-Forwarded-Host $host;
最终 location 配置示例如下:
location / {
proxy_pass http://192.168.x.x:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Nginx-Proxy true;
proxy_redirect off;
}
修改完成后,重新加载 Nginx:
nginx -s reload
🟢 批量更新文件上传 URL
历史上传的文件中,如果 URL 使用了旧域名,需要批量替换。
在 MongoDB 中执行以下命令:
db.rocketchat_uploads.updateMany(
{
url: {
$regex: "localhost|old\\.domain\\.com|another\\.domain"
}
},
[
{
$set: {
url: {
$function: {
body: function(url) {
return url.replace(
/^(http:\/\/localhost(:3000)?|https:\/\/(www\.)?old\.domain\.com(:3000)?|https:\/\/(www\.)?another\.domain(:3000)?)/,
"https://chat.example.com"
);
},
args: ["$url"],
lang: "js"
}
}
}
}
]
)
这样,历史文件链接即可统一替换为新域名。
🟢 Jitsi 配置更新
如果集成了 Jitsi 视频会议,域名变更后也需要同步修改。
修改 .env
如果通过 .env 文件管理 Jitsi 配置,可修改:
JITSI_DOMAIN=meet.jit.si
保存后,重新启动 Rocket.Chat:
docker-compose down
docker-compose up -d
Rocket.Chat 后台设置
进入后台 → Administration → Video Conference → Jitsi,修改 Domain 字段,保存后生效。
✅ 总结
- 正确更新
ROOT_URL环境变量及数据库中Site_Url - 确认 Nginx 配置中正确传递
X-Forwarded-Hostheader - 批量更新上传文件 URL,确保历史链接可用
- 同步修改 Jitsi 配置,保证视频会议功能正常