这篇文章主要介绍手动安装的方式来安装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

[学习笔记] Rocket.Chat 安装与设置启动项的更多相关文章

  1. golang学习笔记6 beego项目路由设置

    golang学习笔记5 beego项目路由设置 前面我们已经创建了 beego 项目,而且我们也看到它已经运行起来了,那么是如何运行起来的呢?让我们从入口文件先分析起来吧: package main ...

  2. openresty 学习笔记一:环境安装

    openresty 学习笔记一:环境安装 openresty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库.第三方模块以及大多数的依赖项.用于方便地搭 ...

  3. DSP EPWM学习笔记2 - EPWM相关寄存器设置问题解析

    DSP EPWM学习笔记2 - EPWM相关寄存器设置问题解析 彭会锋 本篇主要针对不太熟悉的TZ 故障捕获 和 DB 死区产生两个子模块进行学习研究 感觉TI的寄存器命名还是有一定规律可循的 SEL ...

  4. PHP学习笔记----IIS7下安装配置php环境

    原文:PHP学习笔记----IIS7下安装配置php环境 Php如何安装 Php版本的选择 Php在windows下的(php5.4.7)有两种版本: VC9 x86 Non Thread Safe ...

  5. Linux内核分析第七周学习笔记——Linux内核如何装载和启动一个可执行程序

    Linux内核分析第七周学习笔记--Linux内核如何装载和启动一个可执行程序 zl + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study. ...

  6. Python3学习笔记01-环境安装和运行环境

    最近在学习Python3,想写一些自己的学习笔记.方便自己以后看,主要学习的资料来自菜鸟教程的Python3教程和廖雪峰官方网站的Python教程. 1.下载 1)打开https://www.pyth ...

  7. MongoDB学习笔记—windows下安装

    1.登录官网下载安装包 官网下载地址:https://www.mongodb.com/download-center?jmp=nav#community 根据你的系统下载 32 位或 64 位的 .m ...

  8. Git学习笔记--历史与安装(一)

    声明:今天起学习Git,第一篇学习笔记主要借鉴廖雪峰先生的个人博客,以及自己的实践所得. “本教程只会让你成为Git用户,不会让你成为Git专家”——引自廖雪峰博客. 一.Git简介 Git是目前世界 ...

  9. Linux 学习笔记 2 Centos 安装与网络的配置以及VI编辑器的使用

    前言 当然,还是觉得Centos 在众多的Linux 发行版中,还是很有地位的,好多的服务器大多沿用的都是一代的Centos 因为它开源(这是废话)而且稳定,这才是服务器沿用的最重要的一项指标. 镜像 ...

  10. Android学习笔记(六)——活动的启动模式

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 活动的启动模式共有四种: standard.singleTop.singleTask 和 singleInst ...

随机推荐

  1. vim 从嫌弃到依赖(8)——使用命令模式编辑文本

    通过前面的文章,我们已经介绍了vim的普通模式.插入模式.可视模式.接下来让我们接着介绍vim中另一个强大的模式--命令行模式 命令模式简介 命令模式可以说在vim中的使用频率不亚于普通模式,像我们平 ...

  2. 语言模型的预训练[6]:思维链(Chain-of-thought,CoT)定义原理详解、Zero-shot CoT、Few-shot CoT 以及在LLM上应用

    大语言模型的预训练[6]:思维链(Chain-of-thought,CoT)定义原理详解.Zero-shot CoT.Few-shot CoT 以及在LLM上应用 1.思维链定义 背景 在 2017- ...

  3. 5.2 Windows驱动开发:内核取KERNEL模块基址

    模块是程序加载时被动态装载的,模块在装载后其存在于内存中同样存在一个内存基址,当我们需要操作这个模块时,通常第一步就是要得到该模块的内存基址,模块分为用户模块和内核模块,这里的用户模块指的是应用层进程 ...

  4. 用arr.filter数组去重

    let res = arr.filter((item,index,arr)=>{ //返回找到的下标,等于 下标 return arr.indexOf(item) === index; }) c ...

  5. 【栈和队列】栈和队列的相互实现OJ练习【力扣-232、力扣-225】超详细的保姆级别解释

    [栈和队列]栈和队列的相互实现OJ练习[力扣-232.力扣-225]超详细的保姆级别解释 先赞后看好习惯 打字不容易,这都是很用心做的,希望得到支持你 大家的点赞和支持对于我来说是一种非常重要的动力 ...

  6. 如何使用Ghost对UEFI+GPT+WIN10进行备份还原?

    以前BIOS兼容模式下用MBR分区表来备份还原系统使用Ghost很轻松就可以完成系统还原和备份,对于新版BIOS及支持GPT+UEFI快速启动的系统来说又应该如何备份还原呢?答案依旧是Ghost,只不 ...

  7. OGG-将PostgreSQL通过OGG_BigData同步到Kafka后数据存在8小时时间差

    问题描述: 将PostgreSQL通过OGG_BigData同步到Kafka后数据存在8小时时间差. 问题原因: kafka.properties中的参数goldengate.userexit.tim ...

  8. PostgreSQL-常用命令汇总

    1.连接到 PostgreSQL 数据库: psql -h 主机名/服务器IP -p 端口号 -U 用户名 -d 数据库名 注意:(1)在服务器上本地登录时,可以使用主机名或者本机IP地址进行登录,但 ...

  9. Java 21 虚拟线程如何限流控制吞吐量

    虚拟线程(Virtual Threads)是 Java 21 所有新特性中最为吸引人的内容,它可以大大来简化和增强Java应用的并发性.但是,随着这些变化而来的是如何最好地管理此吞吐量的问题.本文,就 ...

  10. 【Unity3D】顶点和片元着色器

    1 前言 ​ 上文介绍了渲染管线.固定管线着色器和表面着色器,如下: 渲染管线 固定管线着色器一 固定管线着色器二 表面着色器 ​ 固定管线着色器通过命令方式实现光照和贴图等效果,表面着色器通过给 S ...