
鉴于上一篇的步骤繁多,设计复杂,且大概率不会真正地搭建好,因为在搭建的路上,各种各样的错误、bug以及未完全设置其中的配置而导致的RocketChat的功能不完全发展,实在是很难蚌了这样。

因此经过了几天的“优化”,实际上是折腾这个RocketChat的乱七八糟的内容,太他妈的折磨了!日你妈,我草泥马的。
听说 RocketChat 是由阿三团队编写的,我只能说,阿三制造,没一个是好用的,非人类操作方法,超级屎山代码,死硬不变通的僵化思路。用一下就三高了。
这还被 霉痢奸妖众国联邦政府陆军部队、联邦政府空军部队 所采用,呵,该不会是史密斯专员‘极力推荐’的?


这篇是综合了上一篇和本人摸索出来的可靠方法,来为各位制作新的比较靠谱的 RocketChat 安装教程重制版。这里就先做个 Linux 版的示范,Windows 版因为一些原因暂时搁置,但是也应该可以做得好的。
大概要做的步骤有:
- 先决条件
- 安装 Docker
- 安装 RocketChat
- 配置 SSL 证书并进行有效的反向代理
- 后续步骤
- 疑问与解法
一. 先决条件
经过各专家的探究,实际上是本人发现 Docker 是真的能吃空间,预期搭配 30GB 分区空间,结果一开 RocketChat 就直逼 105MB 剩余空间,好家伙!吃相超级难看。故此建议使用128GB及以上的可用分区空间来使用。
还有的是,本人之前使用了 Apache 的反代配置,结果前期可以正常访问,几分钟之后就突然无限加载,或者就是400报错,还有的是如果你直接更换 site URL,那就是gg,只能清除全部容器数据再重新搭建,很大原因是没有完全做好 Apache 反代配置,在本人研究出来并重新修改配置文件之前,暂时先用 Nginx,为了避免与原有的 Apache的端口冲突,建议另开虚拟机专用于 RocketChat。
不能访问的还有一个原因,Cloudflare 也是罪魁祸首之一,CF的连接策略导致了我正确搭建了rocketchat但使用域名却无限加载,F12发现报404文件未找到错误,用IP(v4v6都有)访问却可以正常加载,只要把代理关闭之后便恢复了正常访问。原因未知待深究。
总结来说,您需要做的是:
- 一台高性能的虚拟机,配置可以是:2H 8G 128G,操作系统可以是桌面也可以是命令行,本次使用桌面方便管理 RocketChat 容器。
- 如果您的虚拟机网络方式是NAT,需要把80、443端口对接到nginx上面,在 Cloudflare 上面把相关的IPv4、IPv6设置为“仅DNS”。本人还是建议另买新的ipv4专用于此服务器。
先决条件做好之后便可以进行下一步。

二. 安装 Docker
在您的需要安装 RocketChat 的服务器上,可选两种方法:
- Docker Desktop
- Docker Compose
一. Docker Desktop:
老生常谈的安装方法,同时也是容易出现高占用率的安装方法,请保持着耐心地做即可。
首先在您的服务器安装好 Ubuntu Desktop 版,先安装好:vim,openssh-server,curl。
sudo apt update
sudo apt upgrade
sudo apt install vim
sudo apt install openssh-server
sudo apt install curl
安装好之后,我们进入 Docker Desktop 版安装步骤:
1.配置 apt 存储库:
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
2.下载 Docker Desktop 安装包并上传至您的服务器上的 root 目录:
下载来源:Docker Desktop 发行说明
请下载此(最新)版本:docker-desktop-amd64.deb
将下载的 deb 包上传至该服务器的目录

3.在服务器上进入上传 deb 的目录,打开终端以安装:
sudo apt-get update
sudo apt-get install ./docker-desktop-amd64.deb
安装好后会弹出一个提示,请忽略。
4.启用 Docker Desktop。

5.自启动设置:

二. Docker Compose:
1.设置 apt 存储库:
打开终端,输入以下内容:
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
2.安装 Docker:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
3.启动 Docker:
sudo systemctl start docker
4.设置 Docker 自启动:
打开终端,输入以下内容即可激活:
sudo systemctl enable docker
sudo systemctl status docker #检查 Docker 情况

三. 安装 RocketChat
1. 设置当前用户添加进 Docker 组以使用 Docker 命令:
检查当前用户组:
whoami
添加用户进入 Docker 组:
sudo usermod -aG docker $USER #“$USER” 替换为 上面得出的当前用户名称,如“bsx06”
sudo reboot
2.获取 Compose 文件:
进入您想要安装 RocketChat 的目录,例如:/www/Chat

临时将其目录下的权限设置为 777:
sudo chmod 777 ./

然后此处新建 Compose 文件:

创建之后请先 :wq
以保存文件:

然后请打开Rocket.Chat for github 上的 Docker official image里面的compose.yml示范文件,复制其代码到此新建文件中:


:wq
以保存文件。
或者在此处目录打开终端:

输入此命令以下载示范文件到此目录:
curl -L https://raw.githubusercontent.com/RocketChat/Docker.Official.Image/master/compose.yml -O

3.创建 .env 文件:
同样在此目录下,新建 .env 文件:
vim .env
从Rocket.Chat for github 上的 Docker official image上的 .env 示范文件上复制并粘贴到此文件中:


:wq
以保存文件。
3. 修改 .env 文件里面的变量:
- 将 RELEASE 变量设置为您想要的 Rocket.Chat 版本。如:RELEASE=7.5.1。RocketChat 建议不用 latest 版本,详细可参阅 releases page 和 available docker images。
- 如果您要部署带有域的生产工作区,请
.env
使用以下详细信息更新您的文件: - ###
ROOT_URL
:指定工作区的预期 URL。例如,http://<your-domain>
。 - ###
HOST_PORT
:将其设置为80
。确认端口上没有其他服务正在运行,80
并且防火墙允许此端口上的流量。 - ### 如果您要在本地主机上部署测试工作区,请跳过此步骤。
- ### 如果您计划为工作区域启用 HTTPS,请跳过此处的设置并继续通过 Enable HTTPS for Docker 来启动 Rocket.Chat 容器。
- 如果你收到了 registration token ,您可以从我们的销售团队或 Rocket.Chat Cloud 使用它来自动注册您的工作区。为此,请将令牌添加到
.env
文件中,如下所示: - ### REG_TOKEN=your_token_here
- ### 注:将注册令牌添加到
.env
文件是可选的。您还可以注册您的工作区during configuration部署后。 - ### 注册完成后(服务器启动时确认),令牌将不再需要。如果存储在
.env
文件中,则可以将其移除,因为注册信息存储在数据库云设置中。 - 如果您使用现有的 MongoDB 安装(例如 MongoDB Atlas)作为数据库提供程序,请
MONGO_URL
按照以下格式将变量的值编辑为连接字符串: - ### MONGO_URL=mongodb://:@host1:27017,host2:27017,host3:27017/?replicaSet=&ssl=true&authSource=admin
下列是本服务的 .env 的示例:

4.启动 Rocketchat
docker compose up -d

当完全启动之后,请通过在游览器上输入 http://localhost:3000 即可访问您的 RockerChat !如果你之前设置了域名访问,则可以通过指定的 ROOT_URL
访问您的 RockerChat 。


四. 配置 SSL 证书并进行有效的反向代理

这个步骤最容易出错的,搞得本人折腾很久才找到看起来很好的解决方法,使用 NGINX 版本:
1.安装 Certbot 脚本申请证书:
使用适用于你的 Linux 版本的软件包管理器进行安装 certbot 。对于基于 Debian 的发行版(例如 Debian 和 Ubuntu),请使用:
sudo apt update
sudo apt install certbot
2.通过运行此命令从 Let’s Encrypt 获取证书:
# 泛域名:
certbot certonly -d *.使用自己的域名替换.com --manual --preferred-challenges dns
# 主域名:
certbot certonly -d 使用自己的域名替换.com --manual --preferred-challenges dns
# 示例:
certbot certonly -d chat.123.com --manual --preferred-challenges dns
会提示你输入邮箱,用来作为证书申请成功和续订证书通知,请使用自己的邮箱:

一直点 y 同意使用协议,同意邮箱接收信息什么的,然后如下图会需要你配置 DNS TXT 解析记录:
记录以下内容:
_acme-challenge.chat.123.com ,其中 _acme-challenge.chat 是主机记录。
下面的一串字符串是 TXT 记录。

打开您的 DNS 解析提供商,如 Cloudflare:

如上图,保存之后回到刚才的命令行,回车等待结果:

2. Nginx 配置反向代理:
安装 Nginx:
sudo apt-get install nginx
进入 Nginx 的安装目录,如果您不知道请输入以下命令以查看:
whereis nginx

我们选择 /etc/nginx ,进入之后 ls -al 检查目录文件:

查看 ngixn.conf,我们知道它的网站配置文件的读取路径如下:

现在我们进入 sites-enabled,新建一个网站配置文件:
vim chat ###名称随意

### nginx 配置 ###
#必须要加上这段,否则Nginx不支持websocket
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 443 ssl;
access_log logs/wordpress.log combinediox;
error_log logs/wordpress.error.log;
server_name zgao.top; #填写您的证书绑定的域名,例如:cloud.tencent.com
ssl_certificate 1_zgao.top_bundle.crt; #填写您的证书文件名称,例如:1_cloud.tencent.com_bundle.crt
ssl_certificate_key 2_zgao.top.key; #填写您的私钥文件名称,例如:2_cloud.tencent.com.key
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 可参考此 SSL 协议进行配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost:3000; #反向代理到本地rokcet.chat监听的端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
示例:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name chat.123.com; #replace <ABC.DOMAIN.COM> with your domain name
ssl_certificate /etc/letsencrypt/live/chat.123.com/fullchain.pem; #replace <ABC.DOMAIN.COM> with your domain name
ssl_certificate_key /etc/letsencrypt/live/chat.123.com/privkey.pem; #replace <ABC.DOMAIN.COM> with your domain name
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
root /usr/share/nginx/html;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name localhost;
location / {
proxy_pass http://127.0.0.1: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-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto http;
proxy_set_header X-Nginx-Proxy true;
proxy_redirect off;
}
}
server {
listen 80;
server_name chat.123.com; #replace <ABC.DOMAIN.COM> with your domain name
return 301 https://$host$request_uri;
}
:wq 以保存文件,输入以下内容以检查配置文件是否正确:
sudo nginx -t

文件正确,然后请重启:
sudo nginx -s reload
之后使用游览器登录 https://chat.123.com ,立刻享受 HTTPS 安全访问!

五. 后续步骤
1. 安装 hubot 机器人
待开发……
2. 设置文件上传方式
默认的 GridFS 虽然简便快速,但是有个缺点,一旦文件上传出现了错误会重复上传,这导致了无用文件快速占领了容器的分区空间进而占用了系统空间,麻烦的是他不会自动删除错误文件,就一直堆在这里的。
为保证容器空间是有依据地使用,而不是像垃圾一样堆满了整个无效空间,本次采用 FileSystem 方式来进行存储文件。
要执行此步骤,请先打开 RocketChat 容器内部空间,在 Docker Desktop 上,打开 容器的详细情况,进入此界面,再点击 Exec 容器终端,出现下列画面:

输入以下内容:
mkdir upload
chmod 755 upload
ls -al

然后在 rockchat 设置的文件上传中选择“FileSystem”并在下面的路径输入此upload文件夹所在路径:

这样您可以方便上传了各种各样的文件。

六. 疑问与解法
1. 无法访问,且无限加载:
此种情况一般重启 docker 和 nginx 即可,但是仍旧复现的话请进入 cloudflare,将以下的 chat 相关记录取消代理,再重新登录查看。

2. 无法上传超过1MB的文件,例如:图片、视频、压缩包。
这是未设置指定的上传数据限制值,Nginx是默认的1024KB的限制,这导致了上传大文件通常会被刷掉的原因。
打开您的网站配置文件,在下列的内容插入如下:
client_max_body_size 512M; ###大小请参考您的分区空间和网络情况进行适当修改。
client_body_buffer_size 512M;

保存并重启 nginx,现在您的 RocketChat 可以上传了大文件!
