前言

突发奇想想搭建一个Rocket.chat,看了一些blog和官方文档,因为vps架构限制,只尝试过docker和手动搭建,但是都有很多问题。
官方文档

过程

docker(不推荐)

docker方法我尝试过,但是并没有成功,有兴趣的可以试一下

安装docker docker-compose

apt install docker.io docker-compose -y # ubuntu

docker-compose.yml

version: "3.7"
 
services:
  rocketchat:
    image: registry.rocket.chat/rocketchat/rocket.chat:${RELEASE:-latest}
    restart: always
    labels:
      traefik.enable: "true"
      traefik.http.routers.rocketchat.rule: Host(`${DOMAIN}`)
      traefik.http.routers.rocketchat.tls: "true"
      traefik.http.routers.rocketchat.entrypoints: https
      traefik.http.routers.rocketchat.tls.certresolver: le
    environment:
      MONGO_URL: "${MONGO_URL:-\
        mongodb://${MONGODB_ADVERTISED_HOSTNAME:-mongodb}:${MONGODB_INITIAL_PRIMARY_PORT_NUMBER:-27017}/\
        ${MONGODB_DATABASE:-rocketchat}?replicaSet=${MONGODB_REPLICA_SET_NAME:-rs0}}"
      MONGO_OPLOG_URL: "${MONGO_OPLOG_URL:\
        -mongodb://${MONGODB_ADVERTISED_HOSTNAME:-mongodb}:${MONGODB_INITIAL_PRIMARY_PORT_NUMBER:-27017}/\
        local?replicaSet=${MONGODB_REPLICA_SET_NAME:-rs0}}"
      ROOT_URL: ${ROOT_URL:-http://localhost:${HOST_PORT:-3000}}
      PORT: ${PORT:-3000}
      DEPLOY_METHOD: docker
      DEPLOY_PLATFORM: ${DEPLOY_PLATFORM}
    depends_on:
      - mongodb
    expose:
      - ${PORT:-3000}
    ports:
      - "${BIND_IP:-127.0.0.1}:${HOST_PORT:-3000}:${PORT:-3000}"
 
  mongodb:
    image: docker.io/bitnami/mongodb:${MONGODB_VERSION:-4.4}
    restart: always
    volumes:
      - ./mongodb_data:/bitnami/mongodb
    environment:
      MONGODB_REPLICA_SET_MODE: primary
      MONGODB_REPLICA_SET_NAME: ${MONGODB_REPLICA_SET_NAME:-rs0}
      MONGODB_PORT_NUMBER: ${MONGODB_PORT_NUMBER:-27017}
      MONGODB_INITIAL_PRIMARY_HOST: ${MONGODB_INITIAL_PRIMARY_HOST:-mongodb}
      MONGODB_INITIAL_PRIMARY_PORT_NUMBER: ${MONGODB_INITIAL_PRIMARY_PORT_NUMBER:-27017}
      MONGODB_ADVERTISED_HOSTNAME: ${MONGODB_ADVERTISED_HOSTNAME:-mongodb}
      MONGODB_ENABLE_JOURNAL: ${MONGODB_ENABLE_JOURNAL:-true}
      ALLOW_EMPTY_PASSWORD: ${ALLOW_EMPTY_PASSWORD:-yes}

version: '2'

services:
  rocketchat:
    image: rocketchat/rocket.chat:latest
    command: >
      bash -c
        "for i in `seq 1 30`; do
          node main.js &&
          s=$$? && break || s=$$?;
          echo \"Tried $$i times. Waiting 5 secs...\";
          sleep 5;
        done; (exit $$s)"
    restart: unless-stopped
    volumes:
      - ./uploads:/app/uploads
    environment:
      - PORT=3000
      - ROOT_URL=http://localhost:3000
      - MONGO_URL=mongodb://mongo:27017/rocketchat
      - MONGO_OPLOG_URL=mongodb://mongo:27017/local
      - MAIL_URL=smtp://smtp.email
#       - HTTP_PROXY=http://proxy.domain.com
#       - HTTPS_PROXY=http://proxy.domain.com
    depends_on:
      - mongo
    ports:
      - 3000:3000               # 只需要改这一个地方,把左边的3000改掉就好啦
  mongo:
    image: mongo:4.0
    restart: unless-stopped
    volumes:
     - ./data/db:/data/db
     #- ./data/dump:/dump
    command: mongod --smallfiles --oplogSize 128 --replSet rs0 --storageEngine=mmapv1

  # this container's job is just run the command to initialize the replica set.
  # it will run the command and remove himself (it will not stay running)
  mongo-init-replica:
    image: mongo:4.0
    command: >
      bash -c
        "for i in `seq 1 30`; do 
            mongo mongo/rocketchat --eval \"
            rs.initiate({
              _id: 'rs0',
              members: [ { _id: 0, host: 'localhost:27017' } ]})\" &&
          s=$$? && break || s=$$?;
          echo \"Tried $$i times. Waiting 5 secs...\";
          sleep 5;
        done; (exit $$s)"
    depends_on:
      - mongo

运行

docker-compose up -d

snap(未尝试)

贴一个官方文档链接

sudo snap install rocketchat-server
snap get rocketchat-server

手动安装

安装node

mkdir /usr/local/nodejs
cd /usr/local/nodejs

下载node v14.9.0

wget https://nodejs.org/dist/v14.9.0/node-v14.9.0-linux-x64.tar.gz #可以更换其他版本,但要保证version>=v14.9.0

解压&删除压缩包

tar -zxvf node-v14.9.0-linux-x64.tar.gz
rm -rf node-v14.9.0-linux-x64.tar.gz
mv node-v14.9.0-linux-x64/* /usr/local/nodejs

设置软链接

ln -s /usr/local/nodejs/bin/node /usr/local/bin
ln -s /usr/local/nodejs/bin/npm /usr/local/bin

测试

node -v
npm -v

安装mongodb

安装gnupg

apt install gnupg

导入公钥

wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
# 这里可以将`server-4.4.asc`改为`server-x.x.asc`,需要哪个版本就改为哪个版本,例如:5.0 4.0

导入源

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
# 如果在上一步更改了版本号,这里也需要更改,而且要更改两处,不要忘记了 
apt update

安装mongo

apt install mongodb-org -y
sudo systemctl start mongod.service
sudo systemctl enable mongod

修改mongo配置文件

vim /etc/mongod.conf

配置文件改成这样

storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true
  engine: wiredTiger

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

net:
  port: 27017
  bindIp: 127.0.0.1

processManagement:
  fork: true
  timeZoneInfo: /usr/share/zoneinfo

replication:
  replSetName: rs01
sudo systemctl restart mongod.service

安装rocketchat

安装必要软件

apt install curl build-essential graphicsmagick

下载源码

curl -L https://releases.rocket.chat/latest/download -o rocket.chat.tgz
tar -zxvf rocket.chat.tgz -C /tmp
cd /tmp/bundle/programs/server && npm install --production
sudo mv /tmp/bundle /opt/Rocket.Chat

新建rocketchat用户,配置权限

sudo useradd -M rocketchat && sudo usermod -L rocketchat
sudo chown -R rocketchat:rocketchat /opt/Rocket.Chat

设置版本

NODE_PATH=$(which node)

写入systemd service文件

cat << EOF |sudo tee -a /lib/systemd/system/rocketchat.service
[Unit]
Description=The Rocket.Chat server
After=network.target remote-fs.target nss-lookup.target nginx.service mongod.service
[Service]
ExecStart=$NODE_PATH /opt/Rocket.Chat/main.js
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=rocketchat
User=rocketchat
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl edit rocketchat # 这里一般是vim

填入

[Service]
Environment=ROOT_URL=http://localhost:3000
Environment=PORT=3000
Environment=MONGO_URL=mongodb://localhost:27017/rocketchat?replicaSet=rs01
Environment=MONGO_OPLOG_URL=mongodb://localhost:27017/local?replicaSet=rs01

创建副本集

mongo --eval "printjson(rs.initiate())"

启动rocket.chat

sudo systemctl enable --now rocketchat

等待一段时间查看日志

sudo systemctl status rocketchat

显示如下图就是启动好了
2022-12-15T09:25:45.png
浏览器打开 http://{ip}:3000即可访问
(因为我的vps是ipv6 only,但是rocketchat监听了ipv4地址,所以无法访问,我也没解决,大佬可以帮忙分析一下怎么解决)

解决方法——rocketchatCTL

rocketchatCTL官方文档
仅支持以下系统
2022-12-15T08:54:33.png

bash -c "$(curl https://install.rocket.chat)"

按照提示填入必要的信息
2022-12-15T08:57:37.png
然后静静等待完成,注意,它这里用的node版本是v12.x mongodb使用的是v4.0
2022-12-15T08:59:22.png
2022-12-15T09:04:15.png
但是,rocketchat不支持这个版本的node和mongodb
2022-12-15T09:05:39.png
2022-12-15T09:06:51.png
那么只能更换node和mongodb了
卸载nodejs和mongodb

apt remove nodejs npm
apt remove mongodb-org mongodb-org-mongos mongodb-org-server mongodb-org-shell mongodb-org-tools
sudo rm -fr /var/lib/mongodb/* # 清除旧版本缓存

接着按照上文的方法安装nodejsmongodb

systemctl restart rocketchat
systemctl status rocketchat

caddy

前面选择了caddy,但是因为ubuntu有可能有Apache2的存在,导致80端口被占用

lsof -i:80

2022-12-15T09:17:57.png

kill -9 PID

启动caddy

systemctl start caddy
systemctl status caddy

2022-12-15T09:19:16.png
输入netstat -plunt后输出如下图所示就是启动成功了,可以在浏览器输入域名访问了
2022-12-15T09:21:24.png

教程

  • 教程正式开始 *
    重新看了一遍rocket.chat的文档,发现了rocketchatctl有可选选项

    rocketchatctl command line tool to install and update Rocket.Chat server
    
    Usage: rocketchatctl [options] [--root-url=ROOT_URL --port=PORT --letsencrypt-email=EMAIL --webserver=WEBSERVER  --version=VERSION --install-node --use-mongo]
    Installs node, mongo, Rocket.Chat server and optionally a webserver (Caddy or Traefik), sets up directories and permissions to use Let's Encrypt certificates.
    In case node or mongo already installed, it uses already installed versions though confirmation is required.
    For node it set v8.11.4 as default in your system, for mongo mmapv1 storage engine and no authentication enabled is required during installation.
    If you wish this script to run unattended, provide extra flags to the install option, server URL is required (--root-url).
    
    OPTIONS
    -h help                   Display this message
    install                   Install latest Rocket.Chat server version
    update                    Update Rocket.Chat server from current version to latest version
    check-updates             Check for updates of Rocket.Chat server
    upgrade-rocketchatctl     Upgrade the rocketchatctl command line tool.
    
    FOR UNATTENDED INSTALLATION
    --root-url=ROOT_URL       the public URL where Rocket.Chat server will be accessible on the Internet (REQUIRED)
    --port=PORT               port for the Rocket.Chat server, default value 3000
    --webserver=WEBSERVER     webserver to install as reverse proxy for Rocket.Chat server, options are caddy/traefik/none (REQUIRED)
    --letsencrypt-email=EMAIL e-mail address to use for SSL certificates (REQUIRED if webserver is not none)
    --version=VERSION         Rocket.Chat server version to install, default latest
    --install-node            in case node installed, sets node to Rocket.Chat server recommended version, default behavoir cancel Rocket.Chat server installation
    --use-mongo               in case mongo installed, and storage engine configured is mmapv1, skip mongo installation but uses systems mongo for Rocket.Chat server database, default database name rocketchat

    也就是说可以不用它的nodejsmongodb
    先行安装nodejsmongodb
    依旧是按照上文方法安装nodejsmongodb

    bash -c "$(curl https://install.rocket.chat)" --root-url=https://www.example.com --webserver=caddy --use-mongo --install-node --port=3000

    等待完成,检查80端口是否有占用,caddy mongod rocketchat服务是否在运行,检查完成后浏览器直接输入域名访问。