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 或其他文本编辑器(可替换为 nanovim)。

步骤 1:增加虚拟内存

由于 Rocket.Chat 对内存要求较高,低配 VPS 可能需要添加虚拟内存以确保稳定运行。

  1. 检查当前虚拟内存状态:

    1
    sudo swapon --show
  2. 创建 2GB 虚拟内存文件:

    1
    2
    3
    4
    sudo fallocate -l 2G /swapfile
    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile
  3. 使虚拟内存永久生效:

    1
    echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
  4. 重启系统以应用更改:

    1
    sudo reboot

步骤 2:通过 DNS-01 申请 SSL 证书

使用 Certbot 和 Cloudflare 的 DNS-01 验证方式为 rocket.abc.xyz 申请 Let’s Encrypt SSL 证书。

  1. 更新系统并安装 Certbot 和 Cloudflare 插件:

    1
    2
    3
    sudo apt update
    sudo apt upgrade -y
    sudo apt install -y certbot python3-certbot-dns-cloudflare
  2. 创建 Cloudflare API 令牌配置文件:

    1
    2
    sudo mkdir -p /etc/cloudflare
    sudo micro /etc/cloudflare/cloudflare.ini
  3. 在 Cloudflare 控制面板创建 API 令牌:

    • 权限:Zone -> DNS -> Edit
    • 区域资源:选择 Include -> Specific zone -> abc.xyz
    • (可选)设置 IP 地址过滤
    • 获取 API 令牌,例如:AI42a07MRtNJIOYT2FqfASjV9HQagtReCloGbfoe
  4. 编辑 /etc/cloudflare/cloudflare.ini,内容如下:

    1
    dns_cloudflare_api_token = AI42a07MRtNJIOYT2FqfASjV9HQagtReCloGbfoe
  5. 设置文件权限:

    1
    sudo chmod 600 /etc/cloudflare/cloudflare.ini
  6. 申请 SSL 证书:

    1
    2
    3
    4
    5
    6
    7
    sudo certbot certonly \
    --dns-cloudflare \
    --dns-cloudflare-credentials /etc/cloudflare/cloudflare.ini \
    -d rocket.abc.xyz \
    --agree-tos \
    --email [email protected] \
    -n

    注意:将 [email protected] 替换为实际邮箱地址。

  7. 检查证书文件位置:

    • 证书文件:/etc/letsencrypt/live/rocket.abc.xyz/fullchain.pem
    • 私钥文件:/etc/letsencrypt/live/rocket.abc.xyz/privkey.pem

步骤 3:安装 Docker

  1. 更新系统并安装依赖:

    1
    2
    sudo apt update
    sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
  2. 添加 Docker 官方 GPG 密钥:

    1
    2
    sudo mkdir -p /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  3. 添加 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
  4. 安装 Docker Engine 和 Compose 插件:

    1
    2
    sudo apt update
    sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  5. 启动 Docker 并设置开机自启:

    1
    sudo systemctl enable --now docker
  6. 验证安装:

    1
    2
    docker --version
    docker compose version
  7. (可选)允许当前用户无 sudo 使用 Docker:

    1
    sudo usermod -aG docker $USER

    注意:需注销并重新登录以生效。


步骤 4:配置 Rocket.Chat 项目

  1. 创建 Rocket.Chat 项目目录:

    1
    2
    sudo mkdir -p /opt/rocketchat
    cd /opt/rocketchat
  2. 创建并编辑 docker-compose.yml 文件:

    1
    2
    sudo touch docker-compose.yml
    sudo micro docker-compose.yml
  3. 添加以下内容到 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
    27
    version: '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

  1. 安装 Nginx:

    1
    sudo apt install nginx -y
  2. 创建 Nginx 配置文件:

    1
    2
    sudo touch /etc/nginx/sites-available/rocketchat
    sudo micro /etc/nginx/sites-available/rocketchat
  3. 添加以下内容到 /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
    64
    upstream 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";
    }
    }
  4. 启用 Nginx 配置:

    1
    sudo ln -s /etc/nginx/sites-available/rocketchat /etc/nginx/sites-enabled/
  5. 测试 Nginx 配置语法:

    1
    sudo nginx -t
  6. 重启 Nginx:

    1
    2
    sudo systemctl restart nginx
    sudo systemctl status nginx
  7. 设置证书自动续期:

    1
    sudo crontab -e

    添加以下内容:

    1
    0 3 * * * certbot renew --quiet && systemctl reload nginx

步骤 6:启动服务并初始化数据库

  1. 启动 Rocket.Chat 和 MongoDB 容器:

    1
    2
    cd /opt/rocketchat
    sudo docker compose up -d
  2. 初始化 MongoDB 副本集(仅需执行一次):

    • 等待 MongoDB 容器完全启动(约 30-60 秒):

      1
      2
      sleep 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 },表示初始化成功。

  3. 检查容器运行状态:

    1
    sudo docker compose ps

步骤 7:完成 Rocket.Chat 设置

  1. 访问 https://rocket.abc.xyz
  2. 根据页面提示完成管理员账号注册。

注意事项

  • 确保 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

Rocket.Chat 部署教程(Docker + Nginx 反向代理 + SSL 证书)
http://example.com/2025/08/27/Rocket.Chat 部署教程(Docker + Nginx 反向代理 + SSL 证书)/
Author
John Doe
Posted on
August 27, 2025
Licensed under