CentOS Linux发行版是一个稳定的,可预测的,可管理的和可复现的平台

系统版本说明

  • CentOS 6已经于2020年11月30日停止服务。

  • CentOS7将于2024年6月30日停止服务。

  • CentOS 8已于2021年12月31日停止服务。

  • CentOS Stream相当于是CentOS 9,会添加很多新功能,CentOS之前的老用户可以继续使用,红帽会加大对CentOS Stream的开发和投入。

部署包文件清单

  • environment: 项目运行依赖软件的docker-compose目录,例如:数据库等。

    sql:项目数据库初始化的sql脚本文件。

    yunteng: 项目docker容器相关的文件。

    后端包: 项目的部署包。

外网访问端口清单

清单文件中默认的端口如下,我们可以根据自己实际情况调整。

序号端口端口说明
120638数据库
220637缓存工具
39000、9001多媒体资源文件存储
49527核心服务前端
58080核心服务后端
69528组态服务
71883设备接入之MQTT协议
85683设备接入之CoAP协议

域名和SSL证书(可选)

证书可以在阿里云申请一年期的免费试用版。证书成功申请后我们下载Nginx版本的。

第一步:安装系统工具

yum install -y yum-utils device-mapper-persistent-data lvm2

国内用户建议切换到国内的镜像代理。推荐使用阿里云镜像在新窗口打开

第二步:系统上安装go语言包

用于编译当前系统可用的项目加载器。

yum install golang

第三步:安装docker和管理工具docker-compose

添加docker的软件库

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
yum makecache timer

安装docker

yum -y install docker-ce
service docker start                #启动docker
systemctl enable docker             #开机启动docker

查看docker安装结果

 systemctl status docker

docker成功运行后效果如下图。

修改docker镜像库

tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://epp1l9w6.mirror.aliyuncs.com"], 
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

安装docker-compose

根据操作系统和CPU架构到docker-compose在新窗口打开下载对应系统的安装文件。

docker-compose支持的系统和CPU结构清单如下图:

如果使用命令直接下载比较慢或者无法下载,我们也可以先将包下载到本地,再上传到服务器。

 curl -v https://github.com/docker/compose/releases/download/v2.7.0/docker-compose-linux-x86_64
 ls         #查看安装包是否下载成功
mv docker-compose-Linux-x86_64 /usr/bin/docker-compose
chmod +x /usr/bin/docker-compose
docker-compose version        #查看docker-compose是否安装成功

docker-compose安装成功后,执行命令,可看到下图中的效果:

image-20220726140228654

第四步:安装ThingsKit物联网平台的依赖软件

部署ThingsKit物联网平台之前,至少需要安装数据库、web服务器、缓存管理工具、对象存储软件。其它的软件可结合自身需要扩展安装。

  • 数据库:本教程使用基于PostgreSQL的TimescaleDB。也可以使用PostgreSQL、Cassandra等。

  • web服务器:本教程使用nginx。

  • 缓存管理工具:本教程使用redis。

  • 对象存储软件:本教程使用MinIO。

进入依赖软件的docker-compose文件所在目录,执行如下命令

docker-compose up -d               #安装并启动
docker-compose restart             #重启
docker-compose ps                  #查看启动结果
docker-compose logs -f             #查看启动日志
docker-compose logs 软件名 -f       #查看启动日志

文件清单:docker-compose.yml

docker-compose文件内容如下,文件中的中文描述文字根据实际情况修改:

version: "3"
services:
  pgsql:
    container_name: env-pgsql
    image: timescale/timescaledb:2.1.0-pg13
    restart: always
    volumes:
      - /var/_datas/pgsql:/var/lib/postgresql/data
    ports:
      - "20638:5432"
    environment:
      - POSTGRES_PASSWORD=数据库密码
  redis:
    container_name: env-redis
    image: redis:latest
    restart: always
    command: redis-server --requirepass Redis密码
    volumes:
      - /var/_datas/redis:/data
    ports:
      - "20637:6379"     
  nginx:
    container_name: env-nginx
    image: nginx:stable-alpine
    restart: always
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - /_makeFile/_cert:/_makeFile/_cert
      - /var/_workspace/html:/usr/share/nginx/html
    ports:
      - "9527:9527"
      - "443:443"  
  tomcat:
    container_name: web-tomcat
    image: tomcat:jre11
    restart: always
    volumes:
      - ./tomcat.xml:/usr/local/tomcat/conf/server.xml
      - /var/_workspace/tomcat:/usr/local/tomcat/webapps
      - /var/_logs/tomcat:/usr/local/tomcat/logs
    ports:
      - "9528:8080"    
  minio:
    container_name: env-minio
    image: minio/minio:latest
    restart: always
    command: server --console-address ':9001' /data
    volumes:
      - /_makeFile/_cert/申请的证书文件名.key:/root/.minio/certs/private.key
      - /_makeFile/_cert/申请的证书文件名.pem:/root/.minio/certs/public.crt
      - /var/_datas/minio/data:/data
    ports:
      - "9000:9000"
      - "9001:9001"
    environment:
      MINIO_ROOT_USER: 我们的用户名
      MINIO_ROOT_PASSWORD: 我们的密码 
      MINIO_SERVER_URL: https://我们的域名:9000     

文件清单:nginx.conf

nginx配置文件的关键部分


#user  nobody;
worker_processes  1;



events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    client_max_body_size 50m;


    sendfile        on;
    keepalive_timeout  65;

    map $http_user_agent $samesite_attr {
        "~*chrome"	';Secure;SameSite=None';
    }

    gzip on;
    gzip_min_length 1k;
    gzip_comp_level 9;
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    gzip_vary on;
    gzip_disable "MSIE [1-6]\.";
    

    server {
        listen       9527;
        server_name  localhost;


        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
            try_files $uri $uri/ /index.html;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
		location /api/ { #平台服务端代理
			proxy_set_header Host $http_host;
				proxy_set_header X-Forward-For $remote_addr;
				proxy_pass  http://我们的服务器IP或域名:8080/api/;
				proxy_ssl_server_name on;
			
		}
        location /thingskit-scada/ { #组态代理
            proxy_set_header Host $http_host;
            proxy_set_header X-Forward-For $remote_addr;
            proxy_pass  http://我们的服务器IP或域名:9528/;
                      
        }

        location /api/ws/ { #websocket代理
	       proxy_pass              http://我们的服务器IP或域名:8080/api/ws/;
           #下面三行是重点
           proxy_http_version      1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection "upgrade";
           proxy_connect_timeout  5s;
           proxy_read_timeout  300s;
           proxy_send_timeout  300s;
       
       }

    }





    # HTTPS server
    #
    server {
        listen       443 ssl;
        server_name  我们的访问域名;

	add_header X-Frame-Options ALLOWALL;
	
        ssl_certificate      /_makeFile/_cert/申请的证书文件名.pem;
        ssl_certificate_key  /_makeFile/_cert/申请的证书文件名.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
            try_files $uri $uri/ /index.html;
        }
		location /api/ { #平台服务端代理
			proxy_set_header Host $http_host;
				proxy_set_header X-Forward-For $remote_addr;
				proxy_pass  http://我们的服务器IP或域名:8080/api/;
				proxy_ssl_server_name on;
			
		}
        location /thingskit-scada/ { #组态代理
            proxy_set_header Host $http_host;
            proxy_set_header X-Forward-For $remote_addr;
            proxy_pass  http://我们的服务器IP或域名:9528/;
                      
        }

        location /api/ws/ { #websocket代理
	       proxy_pass              http://我们的服务器IP或域名:8080/api/ws/;
           #下面三行是重点
           proxy_http_version      1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection "upgrade";
           proxy_connect_timeout  5s;
           proxy_read_timeout  300s;
           proxy_send_timeout  300s;
       
       }

	
     }

}

文件清单:tomcat.xml

tomcat的配置文件中,主要修改tomcat的访问端口和默认访问项目。

<Host name="localhost"  appBase="webapps" 
		unpackWARs="true" autoDeploy="true">
  <Context path="" crossContext="true" docBase="draw" reloadable="true" /> 

  <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
		   prefix="localhost_access_log" suffix=".txt"
		   pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>

第五步:部署ThingsKit物联网平台

ThingsKit物联网平台由平台、组态和管理界面三部分组成。部署方式不一样,下面我们分别说明他们的部署。

初始化数据库

利用数据库管理工具(例如:navicat),远程连接数据库。创建数据库并执行初始化脚本。

image-20220726153902196

创建数据库后,安装数据库文件中的数字顺序执行下图中的7个sql脚本文件。

image-20220726164924325

物联网平台部署

物联网管理平台部署包内容如下图:

image-20220812105835294

部署包上传到服务器后,我们执行命令编译项目加载器

cd 部署包目录
go build xjar.go
ll                #查看go编译结果

在修改完docker-compose后,我们执行命令安装部署ThingsKit物联网平台。

docker-compose up -d               #安装并启动
docker-compose restart             #重启
docker-compose ps                  #查看启动结果
docker-compose logs -f             #查看启动日志
docker-compose logs 软件名 -f       #查看启动日志

docker部署ThingsKit物联网平台后,将从datas.zip中解压的4个文件夹上传到服务器上对应的映射目录/var/_datas/thingskit/datas中。

image-20220812105308456

文件清单:docker-compose.yml

version: '3'
services:
  iot:
    build:
      context: ./
      dockerfile: DockerfileXjar
    restart: always
    ports:
      - "1883:1883"
      - "8080:8080"
      - "5683:5683/udp"
    volumes:
      - /var/_workspace/iot:/app
      - /var/_logs/thingskit:/var/log/thingsboard
      - /var/_datas/thingskit/datas:/application/src/main/data
    container_name: iot
    environment:
      TB_QUEUE_TYPE: in-memory
      DATABASE_TS_TYPE: timescale          #cassandra, sql, or timescale (for hybrid mode, DATABASE_TS_TYPE value should be cassandra, or timescale)
      DATABASE_TS_LATEST_TYPE: timescale   #cassandra, sql, or timescale (for hybrid mode, DATABASE_TS_TYPE value should be cassandra, or timescale)
      SPRING_DATASOURCE_URL: "jdbc:postgresql://我们的服务器IP或域名:20638/thingsKit"
      SPRING_DATASOURCE_USERNAME: postgres
      SPRING_DATASOURCE_PASSWORD: 数据库密码
      MINIO_URL: https://我们的服务器IP或域名:9000
      MINIO_NAME: 我们的用户名
      MINIO_PWD: 我们的密码
      DEFAULT_PASSWORD: 新建用户初始密码
      WECHAT_APP_ID: 微信小程序APP_ID
      WECHAT_APP_SECRET: 微信小程序APP_SECRET
      FRP_SERVER_ADDRESS: "http://我们的服务器IP或域名"

文件清单:Dockerfile

Dockerfile是为docker容器创建镜像的文件。可根据自身需要定制docker容器。

# 构建镜像,执行命令:【docker build -t thingskit:2.0 .】
FROM openjdk:11.0.13-jre
MAINTAINER Mark
# 时区问题
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone

# 字体
COPY fonts/simsun.ttc /usr/share/fonts/simsun.ttc


ENTRYPOINT ["/app/xjar","java", "-server", "-Djava.security.egd=file:/dev/./urandom", "-Dfile.encoding=UTF-8", "-XX:+HeapDumpOnOutOfMemoryError","--add-opens","java.base/jdk.internal.loader=ALL-UNNAMED","-jar", "/app/thingsboard.xjar" ]

组态部署(可选)

将安装文件draw.war上传到服务器。然后重启tomcat容器即可。

docker restart tomcat               #重启组态容器
docker logs tomcat --tail=200 -f    #查看组态启动日志

管理界面部署

安装包dist.zip解压后,将dist目录内的全部文件上传到服务器。重启nginx即可。

docker restart nginx               #重启nginx容器
docker logs nginx --tail=200 -f    #查看管理界面日志

第六步:测试ThingsKit物联网平台是否安装成功

物联网平台、管理页面都成功部署后。我们就可以开始使用系统了。

访问地址:http://我们的服务器公网IP:9527

账号密码:sysadmin/Love4Ever

平台是否安装成功验收清单

  1. 默认账号是否能成功登录
  2. 默认账号是否可以在菜单租户角色中新建租户角色
  3. 默认账号是否可以在菜单租户列表中新建租户
  4. 默认账号是否可以为租户租户管理员
  5. 租户管理员是否可以在菜单平台定制中上传LOGO图片
  6. 租户管理员是否可以在菜单账号管理中新建客户
  7. 租户管理员是否可以在菜单组织管理中新建组织
  8. 租户管理员是否可以在菜单设备列表中新建设备
  9. 设备连接平台后设备状态是否为在线
  10. 设备推送遥测数据后设备详情中是否可以看到最新的遥测数据