[學習筆記] Rocket.Chat 安裝與設置啟動項


這篇文章主要介紹手動安裝的方式來安裝Rocket.Chat,在Rocket.Chat官方有三種安裝方式,

  1. 面向開發人員的直接使用meteor部署
  2. 傳統的源碼編譯安裝
  3. Docker方式部署

接下來分別介紹:

使用Meteor方式部署

Meteor是一種Web應用構建平台(官網https://meteor.com/),已經包含了nodejs,mongodb等環境,所以我們只需要安裝Meteor和對應的rocketchat工具即可

安裝Rocket.Chat

下載對應的Release版本,這里以2.4.14為例

https://codeload.github.com/RocketChat/Rocket.Chat/tar.gz/refs/tags/2.4.14

根據文檔安裝和配置

Linux - Rocket.Chat Developer

配置Service

在/etc/systemd/system/目錄下新建名稱為rocketchat.service的文件,填寫如下內容 

[Unit]
Description=The Rocket.Chat server running on Linux
After=network.target remote-fs.target nss-lookup.target nginx.service mongod.service
[Service]
WorkingDirectory=/home/xamarin/web/Rocket.Chat-2.4.14/
ExecStart=/usr/local/bin/meteor npm start
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=rocketchat
User=xamarin
Environment=ROOT_URL=http://localhost:3000/ PORT=3000
[Install]
WantedBy=multi-user.target

保存文件后執行:

 sudo systemctl daemon-reload

接下來測試服務:

sudo systemctl start rocketchat.service

如果服務啟動Ok沒有問題 ,我們把這個服務設置成自啟動

sudo systemctl enable rocketchat.service

.Net5 的后台接口程序也設置成自動啟動

在/etc/systemd/system/目錄下新建名稱為kestrel-cah.service的文件

鍵入如下內容

[Unit]
Description=CAH Web API App running on Linux

[Service]
WorkingDirectory=/home/xamarin/web/[dll所在地址]
ExecStart=/usr/local/dotnet/dotnet XXX.Web.Host.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-cah
User=xamarin
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

用同樣的方法執行systemctl 的幾個步驟

完成!

Troubleshooting:

如果systemd有報錯,可以通過如下命令查看

sudo systemctl status kestrel-cah.service
sudo journalctl -fu  kestrel-cah.service

 默認情況下日志記錄在syslog,如果看報錯詳細,可以通過如下命令查看

 sudo cat /var/log/messages

 

使用傳統方式部署

確定版本

首先下載對應的Release版本,這里以2.4.14為例

Release 2.4.14 · RocketChat/Rocket.Chat (github.com)

根據文檔安裝和配置

Manual Installation - Rocket.Chat Docs

 


注意我們待會要安裝合適版本的Nodejs和Mongodb

安裝Nodejs 8.17.0

先下載二進制包

https://nodejs.org/dist/v8.17.0/node-v8.17.0-linux-x64.tar.gz

將二進制包上傳至目標機器的臨時目錄中(~/下載)

解壓至/usr/local/nodejs安裝目錄

sudo mkdir /usr/local/nodejs sudo tar -zxvf node-v8.17.0-linux-x64.tar.gz -C /usr/local/nodejs

 打開.bashrc,設置環境變量NODE_PATH,並將它添加至PATH

# Nodejs export NODE_PATH=/usr/local/nodejs/node-v8.17.0-linux-x64 export PATH=$PATH:$NODE_PATH/bin

重新載入.bashrc 

source ~/.bashrc

 查看node版本,已經可以顯示,安裝完成

node -version


 

安裝MongoDB

從官網下載二進制包 

MongoDB Community Download | MongoDB

 將二進制包上傳至目標機器的臨時目錄中(~/下載)

解壓至cd /opt/mongodb/安裝目錄

sudo mkdir cd /opt/mongodb/ sudo tar -zxvf mongodb-linux-x86_64-rhel80-4.4.12.tgz -C cd /opt/mongodb/

 打開.bashrc,設置環境變量NODE_PATH,並將它添加至PATH

# Mongodb export MONGODB_HOME=/opt/mongodb/mongodb-linux-x86_64-rhel80-4.4.12 export PATH=$PATH:$MONGODB_HOME/bin

重新載入.bashrc 

source ~/.bashrc

建立配置文件

sudo nano ~/mongod.conf

鍵入以下內容

storage:
  journal:
    enabled: true
  engine: wiredTiger

net:
  port: 27017
  bindIpAll: true

processManagement:
  timeZoneInfo: /usr/share/zoneinfo

replication:
  replSetName: rs01

 建立數據庫存儲目錄

sudo mkdir /data/db sudo chmod 777 /data/db/

注意,rocketchat需要開啟分布式

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

啟動mongod,數據庫已運行成功 

mongod -f /home/xamarin/mongod.config 

添加啟動項
 

sudo nano /etc/systemd/system/mongod.service

鍵入以下內容 

[Unit]
Description=mongod running on Linux
After=network.target remote-fs.target nss-lookup.target nginx.service
[Service]
ExecStart=/opt/mongodb/mongodb-linux-x86_64-rhel80-4.4.12/bin/mongod -f /home/xamarin/mongod.conf
User=xamarin
[Install]
WantedBy=multi-user.target

 [可選]如果在宿主機上使用數據庫管理工具,則需要打開27017端口,以便外部訪問

sudo firewall-cmd --zone=public --add-port=27017/tcp --permanent 
sudo firewall-cmd --reload
sudo semanage port -a -t http_port_t  -p tcp 27017

安裝Rocket.Chat服務

下載二進制包至目標機器的臨時目錄中(~/下載)

curl -L https://releases.rocket.chat/2.4.14/download -o ~/下載/rocket.chat-2.4.14.tgz

在網速不好的環境也可用迅雷下載后,將二進制包上傳至臨時目錄中(~/下載)

解壓至安裝目錄

sudo mkdir /opt/rocketchat sudo tar -zxvf rocket.chat-2.4.14.tgz -C /opt/rocketchat

安裝編譯服務工具

sudo yum install gcc-c++
sudo yum groupinstall 'Development Tools'

前往安裝目錄下的bundle/server

cd /opt/rocketchat/bundle/server/

安裝npm依賴包 

npm i

 添加啟動項

sudo nano /etc/systemd/system/rocketchat.service

鍵入以下內容

[Unit]
Description=The Rocket.Chat server running on Linux
After=network.target remote-fs.target nss-lookup.target nginx.service mongod.service
[Service]
ExecStart=/usr/local/nodejs/node-v8.17.0-linux-x64/bin/node /opt/rocketchat/bundle/main.js
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=rocketchat
User=xamarin
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
[Install]
WantedBy=multi-user.target

 完成之后測試是否正常啟動:

sudo systemctl daemon-reload 
sudo systemctl start rocketchat.service
sudo systemctl status rocketchat.service

服務已經正常運行

  

 將兩個服務添加至開機啟動項

sudo systemctl enable rocketchat.service sudo systemctl enable mongod.service 

 

TrubbleShooting:

出現

"NotYetInitialized: Replication has not yet been configured

Rocketchat要求配置mongodb的分布式,所以需要開啟Replic方式,並且初始化Selector

 

出現

getaddrinfo ENOTFOUND xxxx

xxxx為域名,需要將它添加至host文件中

xxxx 127.0.0.1

 使用Docker方式部署

安裝docker-compose

可以使用curl命令下載 

curl -SL https://github.com/docker/compose/releases/download/v2.5.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

 在國內如果網絡不好的情況下,可以用如下操作代替上面命令

下載二進制文件:

https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-linux-x86_64

將二進制文件拷貝至目標機器中的 /usr/local/bin/docker-compose
 

sudo chmod +x /usr/local/bin/docker-compose 

查看是否安裝完成 


在sudoer信任的目錄下創建docker-compose的軟連接 ,以便以sudo方式執行docker-compose

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose 

在合適的目錄下創建docker-compose.yml文件,並輸入以下內容:

version: '2'

services:
  rocketchat:
    image: registry.rocket.chat/rocketchat/rocket.chat:2.4.14
    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
      - REG_TOKEN=${REG_TOKEN}
#       - MAIL_URL=smtp://smtp.email
#       - HTTP_PROXY=http://proxy.domain.com
#       - HTTPS_PROXY=http://proxy.domain.com
    depends_on:
      - mongo
    ports:
      - 3000:3000
    labels:
      - "traefik.backend=rocketchat"
      - "traefik.frontend.rule=Host: your.domain.tld"

  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
    labels:
      - "traefik.enable=false"

  # 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

最后執行運行命令

sudo docker-compose up -d

TrubbleShooting:

若運行中出現

find: '/data/db': Permission denied
chown: changing ownership of '/data/db': Permission denied

解決辦法

setenforce 0




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM