1. 环境准备从零搭建Docker运行环境作为一个刚接触服务器部署的新手第一次看到Docker这个词可能会觉得高大上。其实简单来说Docker就像是一个集装箱把应用程序和它需要的所有依赖打包在一起这样在任何地方运行都能保持环境一致。我在第一次部署Rocket.Chat时发现用Docker比直接安装简单太多了完全避开了各种依赖冲突的坑。首先你需要一台CentOS 7的服务器建议内存至少2GB。我刚开始用1GB内存的机器结果跑起来特别卡后来升级配置才顺畅。如果你想让外网访问服务器必须要有公网IP。购买云服务器时记得在安全组里开放3000端口这是Rocket.Chat的默认访问端口。安装Docker其实就几条命令# 卸载旧版本如果有 sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine # 安装必要工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加Docker仓库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安装Docker引擎 sudo yum install -y docker-ce docker-ce-cli containerd.io # 启动Docker并设置开机自启 sudo systemctl start docker sudo systemctl enable docker安装完成后可以运行docker version检查是否成功。我第一次安装时因为没开selinux导致启动失败后来执行setenforce 0临时关闭才解决。建议新手也先关闭selinux等熟悉后再配置安全策略。2. Docker Compose安装与配置Docker Compose是一个管理多容器应用的神器用YAML文件定义各个服务的关系。在部署Rocket.Chat时我们需要同时运行MongoDB数据库和Rocket.Chat应用Compose能帮我们自动处理好这些依赖关系。安装Docker Compose推荐用官方方法比yum安装的版本更新sudo curl -L https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose验证安装是否成功docker-compose --version # 应该输出类似Docker Compose version v2.20.3我遇到过权限问题导致Compose命令无法执行这时候需要检查/usr/local/bin目录的权限。还有个常见问题是下载速度慢可以尝试更换国内镜像源mkdir -p ~/.docker/cli-plugins curl -SL https://mirror.ghproxy.com/https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose chmod x ~/.docker/cli-plugins/docker-compose3. 部署Rocket.Chat核心服务现在来到最关键的部署环节。Rocket.Chat官方提供了标准的docker-compose.yml模板我们可以直接使用。建议新建一个专用目录来存放配置文件mkdir ~/rocketchat cd ~/rocketchat创建docker-compose.yml文件内容如下version: 3.8 services: rocketchat: image: registry.rocket.chat/rocketchat/rocket.chat:latest restart: unless-stopped volumes: - ./uploads:/app/uploads environment: - PORT3000 - ROOT_URLhttp://你的公网IP:3000 - MONGO_URLmongodb://mongo:27017/rocketchat - MONGO_OPLOG_URLmongodb://mongo:27017/local ports: - 3000:3000 depends_on: - mongo mongo: image: mongo:5.0 restart: unless-stopped volumes: - ./data/db:/data/db command: mongod --replSet rs0 --storageEnginewiredTiger mongo-init-replica: image: mongo:5.0 depends_on: - mongo command: bash -c for i in seq 1 30; do mongo mongo/rocketchat --eval rs.initiate({ _id: \rs0\, members: [{ _id: 0, host: \mongo:27017\ }] }) s$$? break || s$$?; echo \Tried $$i times. Waiting 5 secs...\; sleep 5; done; (exit $$s)这里有几个关键点需要注意ROOT_URL必须改成你的公网IP或域名否则后续功能会有问题MongoDB现在推荐使用5.0版本老教程里的4.0已经过时存储引擎改用wiredTiger比原来的mmapv1性能更好启动服务只需一条命令docker-compose up -d第一次运行会下载所有镜像可能需要几分钟时间。我遇到过下载卡住的情况这时候可以尝试更换Docker镜像源sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json -EOF { registry-mirrors: [https://docker.mirrors.ustc.edu.cn] } EOF sudo systemctl restart docker4. 安全配置与优化建议服务跑起来后千万别急着庆祝安全配置才是重中之重。我刚开始部署时就因为没做安全设置结果被挖矿程序入侵了。首先检查防火墙设置sudo firewall-cmd --permanent --add-port3000/tcp sudo firewall-cmd --reload如果是云服务器还需要在控制台的安全组中开放3000端口。记得不要开放不必要的端口我就因为开了22端口用默认密码服务器被人暴力破解过。Rocket.Chat的默认配置有几个需要优化的地方建议启用HTTPS可以用Lets Encrypt免费证书修改默认的管理员密码设置合理的用户权限要启用HTTPS可以修改docker-compose.ymlenvironment: - ROOT_URLhttps://你的域名 - PORT3000 - MONGO_URLmongodb://mongo:27017/rocketchat - MONGO_OPLOG_URLmongodb://mongo:27017/local - HTTPS_ENABLEDtrue对于生产环境建议使用Nginx做反向代理和负载均衡。这里有个简单的Nginx配置示例server { listen 80; server_name your.domain.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name your.domain.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }5. 初始化设置与日常维护当你在浏览器访问http://服务器IP:3000时会看到初始化向导。这里有几个容易踩坑的地方管理员用户名不能有特殊字符我刚开始用中文名就报错了组织邮箱要填真实的否则找回密码会有问题服务类型选择要慎重公共社区和私人社区权限区别很大初始化完成后建议立即去管理-设置里配置邮件服务器用于密码找回文件上传限制第三方登录集成消息保留策略日常维护主要包括# 查看容器状态 docker-compose ps # 查看日志 docker-compose logs -f rocketchat # 备份数据 docker-compose exec mongo mongodump --archive --dbrocketchat | gzip backup.gz # 恢复数据 gunzip -c backup.gz | docker-compose exec -T mongo mongorestore --archive --drop # 更新版本 docker-compose pull docker-compose up -d我每周都会做一次完整备份避免数据丢失。有一次服务器硬盘坏了幸亏有备份才没造成损失。6. 常见问题排查部署过程中难免会遇到各种问题这里分享几个我遇到的典型问题及解决方法问题1MongoDB副本集初始化失败MongoNetworkError: failed to connect to server [mongo:27017] on first connect解决方法给mongo服务增加健康检查确保完全启动后再初始化mongo: healthcheck: test: [CMD, mongo, --eval, db.adminCommand(ping)] interval: 10s timeout: 5s retries: 5问题2Rocket.Chat启动时卡住通常是内存不足导致可以尝试增加服务器内存调整MongoDB缓存大小environment: - MONGO_OPTIONS--wiredTigerCacheSizeGB0.5问题3上传文件失败检查uploads目录权限chown -R 1000:1000 ./uploads问题4无法外网访问检查防火墙规则确认安全组设置测试telnet 公网IP 3000是否能通遇到其他问题时查看日志是最快的方法docker-compose logs rocketchat | grep -i error7. 高级功能扩展基础功能稳定后可以考虑添加这些增强功能邮件通知配置在docker-compose.yml中添加environment: - MAIL_URLsmtp://smtp.example.com:587 - MAIL_FROMnotificationsexample.com - MAIL_USERusername - MAIL_PASSpassword集成Hubot聊天机器人在docker-compose.yml中取消注释hubot部分并配置hubot: environment: - ROCKETCHAT_USERbot - ROCKETCHAT_PASSWORDbotpassword - BOT_NAMEMyBot - EXTERNAL_SCRIPTShubot-help,hubot-diagnostics启用消息加密在管理面板中开启消息加密功能所有消息会在客户端加密后再传输。性能监控添加Prometheus监控environment: - PROMETHEUS_ENABLEDtrue - PROMETHEUS_PORT9458部署完成后可以通过http://服务器IP:9458/metrics查看监控指标。8. 移动端使用技巧Rocket.Chat官方提供了iOS和Android客户端配置起来很简单在应用商店搜索Rocket.Chat下载安装打开应用输入服务器地址http://你的域名或IP:3000使用网页版创建的账号登录如果启用了HTTPS记得地址要改成https://开头。我遇到过证书问题导致移动端无法连接需要在服务器上配置正确的证书链。对于企业用户可以考虑自己打包定制版APP下载官方开源客户端代码修改配置指向自己的服务器重新编译打包这样员工使用时就不需要手动输入服务器地址了还能加入企业自己的品牌标识。