在一次 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-Host header
  • 批量更新上传文件 URL,确保历史链接可用
  • 同步修改 Jitsi 配置,保证视频会议功能正常

Leave a Reply

Your email address will not be published. Required fields are marked *