Rocket.Chat 部署教程(Docker + Nginx 反向代理 + SSL 证书)
Rocket.Chat 部署教程(Docker + Nginx 反向代理 + SSL 证书)
本教程详细介绍如何在 VPS 上使用 Docker 和 Nginx 反向代理部署 Rocket.Chat,并通过 Cloudflare 的 DNS-01 方式申请 SSL 证书以启用 HTTPS。
前置条件
- 域名:
rocket.abc.xyz(已托管到 Cloudflare,未开启代理模式/小黄云,若启用需另行测试)。 - VPS 配置:至少 1 CPU,1GB 内存。
- 操作系统:推荐 Ubuntu(本教程基于 Ubuntu)。
- 工具:需安装
micro或其他文本编辑器(可替换为nano或vim)。
步骤 1:增加虚拟内存
由于 Rocket.Chat 对内存要求较高,低配 VPS 可能需要添加虚拟内存以确保稳定运行。
检查当前虚拟内存状态:
1
sudo swapon --show创建 2GB 虚拟内存文件:
1
2
3
4sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile使虚拟内存永久生效:
1
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab重启系统以应用更改:
1
sudo reboot
步骤 2:通过 DNS-01 申请 SSL 证书
使用 Certbot 和 Cloudflare 的 DNS-01 验证方式为 rocket.abc.xyz 申请 Let’s Encrypt SSL 证书。
更新系统并安装 Certbot 和 Cloudflare 插件:
1
2
3sudo apt update
sudo apt upgrade -y
sudo apt install -y certbot python3-certbot-dns-cloudflare创建 Cloudflare API 令牌配置文件:
1
2sudo mkdir -p /etc/cloudflare
sudo micro /etc/cloudflare/cloudflare.ini在 Cloudflare 控制面板创建 API 令牌:
- 权限:
Zone -> DNS -> Edit - 区域资源:选择
Include -> Specific zone -> abc.xyz - (可选)设置 IP 地址过滤
- 获取 API 令牌,例如:
AI42a07MRtNJIOYT2FqfASjV9HQagtReCloGbfoe
- 权限:
编辑
/etc/cloudflare/cloudflare.ini,内容如下:1
dns_cloudflare_api_token = AI42a07MRtNJIOYT2FqfASjV9HQagtReCloGbfoe设置文件权限:
1
sudo chmod 600 /etc/cloudflare/cloudflare.ini申请 SSL 证书:
1
2
3
4
5
6
7sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /etc/cloudflare/cloudflare.ini \
-d rocket.abc.xyz \
--agree-tos \
--email [email protected] \
-n注意:将
[email protected]替换为实际邮箱地址。检查证书文件位置:
- 证书文件:
/etc/letsencrypt/live/rocket.abc.xyz/fullchain.pem - 私钥文件:
/etc/letsencrypt/live/rocket.abc.xyz/privkey.pem
- 证书文件:
步骤 3:安装 Docker
更新系统并安装依赖:
1
2sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release添加 Docker 官方 GPG 密钥:
1
2sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg添加 Docker 官方源:
1
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null安装 Docker Engine 和 Compose 插件:
1
2sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin启动 Docker 并设置开机自启:
1
sudo systemctl enable --now docker验证安装:
1
2docker --version
docker compose version(可选)允许当前用户无
sudo使用 Docker:1
sudo usermod -aG docker $USER注意:需注销并重新登录以生效。
步骤 4:配置 Rocket.Chat 项目
创建 Rocket.Chat 项目目录:
1
2sudo mkdir -p /opt/rocketchat
cd /opt/rocketchat创建并编辑
docker-compose.yml文件:1
2sudo touch docker-compose.yml
sudo micro docker-compose.yml添加以下内容到
docker-compose.yml:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27version: '3.8'
services:
rocketchat:
image: rocketchat/rocket.chat:7.9.3
container_name: rocketchat
restart: unless-stopped
volumes:
- ./uploads:/app/uploads
environment:
- PORT=3000
- ROOT_URL=https://rocket.abc.xyz
- MONGO_URL=mongodb://mongo:27017/rocketchat?replicaSet=rs0
- MONGO_OPLOG_URL=mongodb://mongo:27017/local?replicaSet=rs0
- BROKER_TRANSPORTER=none
depends_on:
- mongo
ports:
- "127.0.0.1:3000:3000"
mongo:
image: mongo:6.0
container_name: mongo
restart: unless-stopped
volumes:
- ./data/db:/data/db
command: mongod --replSet rs0 --oplogSize 128注意:不要随意删除
/opt/rocketchat/data或/opt/rocketchat/uploads,否则会导致数据丢失。
步骤 5:安装并配置 Nginx
安装 Nginx:
1
sudo apt install nginx -y创建 Nginx 配置文件:
1
2sudo touch /etc/nginx/sites-available/rocketchat
sudo micro /etc/nginx/sites-available/rocketchat添加以下内容到
/etc/nginx/sites-available/rocketchat:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64upstream rocketchat_backend {
server 127.0.0.1:3000;
keepalive 32;
}
# HTTP -> HTTPS
server {
listen 80;
listen [::]:80;
server_name rocket.abc.xyz;
return 301 https://$host$request_uri;
}
# HTTPS 配置
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name rocket.abc.xyz;
ssl_certificate /etc/letsencrypt/live/rocket.abc.xyz/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/rocket.abc.xyz/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "strict-origin-when-cross-origin";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
access_log /var/log/nginx/rocketchat.access.log;
error_log /var/log/nginx/rocketchat.error.log;
location / {
proxy_pass http://rocketchat_backend/;
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;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_read_timeout 90;
client_max_body_size 100M;
}
location ~* \.(?:ico|css|js|gif|jpe?g|png|woff2?|eot|ttf|svg)$ {
proxy_pass http://rocketchat_backend;
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;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
expires 30d;
add_header Cache-Control "public";
}
}启用 Nginx 配置:
1
sudo ln -s /etc/nginx/sites-available/rocketchat /etc/nginx/sites-enabled/测试 Nginx 配置语法:
1
sudo nginx -t重启 Nginx:
1
2sudo systemctl restart nginx
sudo systemctl status nginx设置证书自动续期:
1
sudo crontab -e添加以下内容:
1
0 3 * * * certbot renew --quiet && systemctl reload nginx
步骤 6:启动服务并初始化数据库
启动 Rocket.Chat 和 MongoDB 容器:
1
2cd /opt/rocketchat
sudo docker compose up -d初始化 MongoDB 副本集(仅需执行一次):
等待 MongoDB 容器完全启动(约 30-60 秒):
1
2sleep 60
sudo docker compose logs -f mongo检查日志,确认出现类似以下输出:
1
mongo | {"t":{"$date":"2025-08-27T01:33:46.331+00:00"},"s":"I", "c":"NETWORK", "id":23016, "ctx":"listener","msg":"Waiting for connections","attr":{"port":27017,"ssl":"off"}}执行初始化命令:
1
sudo docker compose exec mongo mongosh --eval "rs.initiate({ _id: 'rs0', members: [ { _id: 0, host: 'mongo:27017' } ] })"检查副本集状态:
1
sudo docker compose exec mongo mongosh --eval "rs.status()"确认输出包含
{ "ok" : 1 },表示初始化成功。
检查容器运行状态:
1
sudo docker compose ps
步骤 7:完成 Rocket.Chat 设置
- 访问
https://rocket.abc.xyz。 - 根据页面提示完成管理员账号注册。
注意事项
- 确保 VPS 防火墙开放 80 和 443 端口。
- 定期备份
/opt/rocketchat/data和/opt/rocketchat/uploads目录。 - 如果遇到问题,检查 Nginx 日志(
/var/log/nginx/rocketchat.*.log)和 Docker 容器日志(sudo docker compose logs)。 - 如果需要升级 Rocket.Chat,修改
docker-compose.yml中的版本号,并执行sudo docker compose up -d --force-recreate。