文章目录
Linux以Ubuntu和CentOS为主流,以此两个发行版为例进行流程命令示例,截图按照Ubuntu Server实际环境。
安装JDK11。(Debain apt源下载慢可以考虑换国内软件源,yum也是如此)
sudo apt update
sudo apt install openjdk-11-jdk
# Add latest EPEL release for CentOS 7
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum install java-11-openjdk

此时用java -version查看是JDK11的版本信息
java -version

如果出现的1.8或者其他的版本信息,证明你之前装过JDK并正确配置,需要手动配置,手动配置方式如下:
sudo update-alternatives --config java

选择JDK11对应的版本切换到当前的环境下。
# 下载安装包
wget https://github.com/thingsboard/thingsboard/releases/download/v3.4.4/thingsboard-3.4.4.deb
# 安装
sudo dpkg -i thingsboard-3.4.4.deb
# 下载安装包
wget https://github.com/thingsboard/thingsboard/releases/download/v3.4.4/thingsboard-3.4.4.rpm
# 安装
sudo rpm -Uvh thingsboard-3.4.4.rpm


鉴于初期的场景message不会并发大于5000条,在此仅安装PostgreSQL
# 一般服务器自带wget,如果没有请用如下命令安装
sudo apt install -y wget
# 引入镜像源密钥
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
# 将镜像源添加到本机软件源
RELEASE=$(lsb_release -cs)
echo "deb http://apt.postgresql.org/pub/repos/apt/ ${RELEASE}"-pgdg main | sudo tee /etc/apt/sources.list.d/pgdg.list
# 安装并启动 postgresql 服务:
sudo apt update
sudo apt -y install postgresql-12
sudo systemctl start postgresql
# 设置开机启动
sudo systemctl enable postgresql
sudo yum install -y wget
# 更新软件源
sudo yum update
# 安装
sudo yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# 配置
sudo yum -y install epel-release yum-utils
sudo yum-config-manager --enable pgdg12
sudo yum install postgresql12-server postgresql12
# 初始化PostgreSQL DB
sudo /usr/pgsql-12/bin/postgresql-12-setup initdb
sudo systemctl start postgresql-12
# 开机启动
sudo systemctl enable --now postgresql-12
安装wget

引入密钥(CentOS无此过程)

引入软件源

可以打开/etc/apt/sources.list.d/pgdg.list确认。vim /etc/apt/sources.list.d/pgdg.list

可见内容添加成功,需要更新软件列表
更新软件列表

安装postgresql服务并启动


不确定是否启动成功可以systemctl status postgresql确认一下

为thingsboard的例程添加数据库的初始化配置:
切换到postgres用户下,为登录postgresql用户设置密码
sudo su - postgres
psql
# 此行命令后按照提示输入密码
\password
# 输入后退出
\q
切换用户

进入数据库

设置密码

\q退出数据库,键盘Ctrl+D退出bash回到主用户

(注意)CentOS下多一步配置:
编辑配置文件/var/lib/pgsql/12/data/pg_hba.conf
sudo vim /var/lib/pgsql/12/data/pg_hba.conf定位到以下内容,将ident修改为md5
# IPv4 local connections: host all all 127.0.0.1/32 ident修改后
host all all 127.0.0.1/32 md5重启服务
sudo systemctl restart postgresql-12.service
登录数据库并创建数据库
psql -U postgres -d postgres -h 127.0.0.1 -W
CREATE DATABASE thingsboard;
\q

编辑thingsboard的配置文件
sudo vim /etc/thingsboard/conf/thingsboard.conf
在配置文件中添加以下内容,注意密码那一行替换成自己的密码
# DB Configuration
export DATABASE_TS_TYPE=sql
export SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/thingsboard
export SPRING_DATASOURCE_USERNAME=postgres
export SPRING_DATASOURCE_PASSWORD=PUT_YOUR_POSTGRESQL_PASSWORD_HERE
# Specify partitioning size for timestamp key-value storage. Allowed values: DAYS, MONTHS, YEARS, INDEFINITE.
export SQL_POSTGRES_TS_KV_PARTITIONING=MONTHS
注意下面的配置内容可选,如果你的服务器内存是1G的,比较受限,需要额外配置以下jvm以保证效率。
# Update ThingsBoard memory usage and restrict it to 256MB in /etc/thingsboard/conf/thingsboard.conf
export JAVA_OPTS="$JAVA_OPTS -Xms256M -Xmx256M"

我们没有经过消息队列等辅助高效缓存配件的安装,后续需要用到MQ、Kafka等可以再行安装,这里采用纯内存的策略。
运行安装脚本,--loadDemo其会导入几个用户、设备、资产、规则等用于示例
# --loadDemo option will load demo data: users, devices, assets, rules, widgets.
sudo /usr/share/thingsboard/bin/install/install.sh --loadDemo


重启thingsboard服务
systemctl restart thingsboard.service
# 查看一下
systemctl status thingsboard.service

安全组策略放行8080端口,防火墙放行8080端口。
安全组策略需要在你的云实例控制台上自行配置,而防火墙因人而异,你的服务器用iptables或者firewalld均有不同的操作方式
这里采用firewalld
sudo firewall-cmd --add-port=8080/tcp --zone=public --permanent
sudo firewall-cmd --reload
访问http://【你的服务器ip】:8080测试

这里有几个默认的账户
| 人员 | 账号 | 密码 |
|---|---|---|
| 系统管理员 | sysadmin@thingsboard.org | sysadmin |
| 租户管理员 | tenant@thingsboard.org | tenant |
| 客户管理员 | customer@thingsboard.org | customer |
注意:资源有限的服务器(1-2CPU、1-2GB RAM),一般Web UI的启动需要等待90秒左右。
登录系统管理员:

登录租户管理员:

运行日志在/var/log/thingsboard
过滤错误日志可以快速使用如下命令:
cat /var/log/thingsboard/thingsboard.log | grep ERROR
如下是官方智慧农业仪表盘案例
https://thingsboard.io/smart-farming/
点击查看在线案例


右上角选择导出

导出后是个json文件




添加一个客户


客户组里添加一个用户,激活方式可以选择激活链接或者邮箱链接,我们是测试,邮箱也是虚构的,那么就选择链接激活。

点击激活

激活后就到了设置密码的界面。

创建完密码就登录进来了

我们返回租户管理员的账号
将导入的仪表盘分配给客户

选择新添加的用户

设置首页为仪表盘

编辑仪表盘




打开设置的显示仪表盘标题


登录新增用户,首页便是仪表盘

可以全屏显示,也可以将某个小部分进行全屏显示。
活动数据需要写硬件程序并生成数字孪生的实体进行相应映射。
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg
我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e
我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案
我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_
我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:
我收到格式为的回复#我需要将其转换为哈希值(针对活跃商家)。目前我正在遍历变量并执行此操作:response.instance_variables.eachdo|r|my_hash.merge!(r.to_s.delete("@").intern=>response.instance_eval(r.to_s.delete("@")))end这有效,它将生成{:first="charlie",:last=>"kelly"},但它似乎有点hacky和不稳定。有更好的方法吗?编辑:我刚刚意识到我可以使用instance_variable_get作为该等式的第二部分,但这仍然是主要问题。
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主
需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc