记录一次开源物联网平台thinglinks的docker部署步骤
物联网平台thinglinks部署说明docker由于官网的部署文档找不到内容自己凭借经验部署并记录了一遍。安装docker和docker-compose1.1上传docker-20.10.9.tgz安装包并解压# tar -zxvf docker-20.10.9.tgz# cp docker/* /usr/bin/1.2 docker.service文件# mv docker.service /usr/lib/systemd/system/1.3启动Docker# systemctl daemon-reload# systemctl enable docker# systemctl start docker# systemctl status docker1.4 docker-compose安装# cp -r docker-compose /usr/local/bin/# cp -r docker-compose /usr/local/sbin/# chmod ax /usr/local/bin/docker-compose# chmod ax /usr/local/sbin/docker-compose1.5 测试docker-compose# docker-compose -v安装mysql2.1拉取mysql5.7镜像执行命令# docker pull 192.168.4.151/jxbp/mysql:5.7.362.2在本地创建mysql的映射目录mkdir-p/opt/mount/mysql/datamkdir-p/opt/mount/mysql/logsmkdir-p/opt/mount/mysql/conf2.3启动容器dockerrun-p3306:3306--namemysql-v/opt/mount/mysql/conf:/etc/mysql/conf.d-v/opt/mount/mysql/logs:/logs-v/opt/mount/mysql/data:/var/lib/mysql-eMYSQL_ROOT_PASSWORD123456-d192.168.4.151/jxbp/mysql:5.7.36进入容器dockerexec-itmysql /bin/bash2.4执行脚本创建数据库thinglinks、thinglinks-config、thinglinks_seata内嵌附件thinglinks.sql内嵌附件thinglinks_config_20220114.sql内嵌附件thinglinks_seata_20210128.sql2.5执行nacos升级2.2.3脚本/*config_info表增加字段*/ALTERTABLEconfig_infoADDCOLUMNencrypted_data_keytextNULLCOMMENT秘钥;/*his_config_info表增加字段*/ALTERTABLEhis_config_infoADDCOLUMNencrypted_data_keytextNULLCOMMENT秘钥;/*config_info_beta表增加字段*/ALTERTABLEconfig_info_betaADDCOLUMNencrypted_data_keytextNULLCOMMENT秘钥;3.安装nacos3.1拉取nacos镜像执行命令# docker pull nacos/nacos-server或者# docker pull 192.168.4.151/jxbp/nacos:2.2.3# docker tag 192.168.4.151/jxbp/nacos:2.2.3 nacos/nacos-server3.2创建挂载目录# mkdir -p /opt/mount/nacos/conf# mkdir -p /opt/mount/nacos/logs3.3启动nacos挂载目录的方式:注意如果nacos版本在2.0及以上需要把8848、9848和9849三个端口映射出来否则访问会404失败dockerrun--namenacos-p8848:8848\-p9848:9848-p9849:9849\--privilegedtrue\--restartalways\-eMODEstandalone\-ePREFER_HOST_MODEhostname\-eJVM_XMS256m\-eJVM_XMX1024m\-v/opt/mount/nacos/logs:/opt/jxbp/nacos/logs\-v/opt/mount/nacos/conf/:/opt/jxbp/nacos/conf\-dnacos/nacos-server3.4修改nacos配置文件可以把这两个文件上传到挂载的目录下也可以先不以挂载方式启动从容器里面复制出来删除原来的容器在执行3.3操作类似下面nginx的方式。# vi /opt/mount/nacos/conf/application.properties内嵌附件application.properties内嵌附件nacos-logback.xml启动时提示缺少nacos-logback.xml文件、把这个文件也上传到conf目录下3.5创建local命名空间、并导入配置内嵌附件nacos_config_export_20231206013133.zip导入后修改nacos上面的相关配置文件、如mysql、redis、tdengine、seata、mq地址等4.安装nginx4.1拉取镜像# docker pull 192.168.4.151/jxbp/nginx:1.21.44.2创建挂载目录# mkdir -p /opt/mount/nginx4.3创建容器# docker run -di --name nginx -p 80:80 192.168.4.151/jxbp/nginx:1.21.44.4将容器内的配置文件拷贝到指定目录# docker cp nginx:/etc/nginx /opt/mount/4.5终止并删除容器dockerstop nginxdockerrmnginx4.6运行创建新容器dockerrun-di--namenginx-p80:80-v/opt/mount/nginx:/etc/nginx-v/opt/thinglinks/front/:/opt/thinglinks/front192.168.4.151/jxbp/nginx:1.21.44.7修改nginx配置文件# vi /opt/mount/nginx/conf.d/default.conf内嵌附件default.conf4.8重启nginx容器# docker restart nginx5.安装redis5.1拉取redis镜像执行命令# docker pull 192.168.4.151/jxbp/redis:6.2.65.2创建挂载目录# mkdir -p /opt/mount/redis/conf# mkdir -p /opt/mount/redis/data5.2创建容器# docker run -di --name redis -p 6379:6379 192.168.4.151/jxbp/redis:6.2.6 --requirepass 1234565.3复制文件到挂载目录# docker cp redis:/data /opt/mount/redis/# docker cp redis:/etc/redis/redis.conf /opt/mount/redis/conf5.4删除redis容器# docker stop redis# docker rm redis5.5重新创建容器dockerrun--restartalways --log-opt max-size100m --log-opt max-file2-p6379:6379--nameredis-v/opt/mount/redis/conf/redis.conf:/etc/redis/redis.conf-v/opt/mount/redis/data:/data-d192.168.4.151/jxbp/redis:6.2.6 /etc/redis/redis.conf--appendonlyyes--requirepass123456启动说明–restartalways 总是开机启动–log是日志方面的-p 6379:6379 将6379端口挂载出去–name 给这个容器取一个名字-v 数据卷挂载 - /opt/mount/redis/conf/redis.conf:/etc/redis/redis.conf 这里是将 liunx宿主机 路径下的redis.conf 和redis容器下的redis.conf 挂载在一起。- /opt/mount/redis/data:/data 这个同上-d redis 表示后台启动redis192.168.4.151/jxbp/redis:6.2.6 /etc/redis/redis.conf 以配置文件启动redis加载容器内的conf文件最终找到的是挂载的目录 /etc/redis/redis.conf 也就是liunx下的/opt/moont/redis/conf/redis.conf–appendonly yes 开启redis 持久化–requirepass 123456 设置密码 可以从redis.conf配置文件配置6.安装tdengine:3.0.1.46.1拉取镜像//docker pull tdengine/tdengine:latestdockerpull tdengine/tdengine:3.0.1.4TDengine 3.0 服务端仅使用 6030 TCP 端口。6041 为 taosAdapter 所使用提供 REST 服务端口。6043-6049 为 taosAdapter 提供第三方应用接入所使用端口可根据需要选择是否打开6.2创建挂载目录mkdir-p/opt/mount/taosmkdir-p/opt/mount/taos/datamkdir-p/opt/mount/taos/log6.3创建启动容器说明把taos.cfg放在/opt/mount/taos中,docker启动加载指定配置文件说明/var/lib/taos为默认路径(安装完既有)说明/var/log/taos为默认路径(安装完既有)dockerrun-d--namethinglinks-tdengine-v/opt/mount/taos/taos.cfg:/etc/taos/taos.cfg-v/opt/mount/taos/data:/var/lib/taos-v/opt/mount/taos/log:/var/log/taos-p6030:6030-p6041:6041-p6043-6049:6043-6049-p6043-6049:6043-6049/udp tdengine/tdenginetaos.cfg配置参数查看配置信息taosd -C 注意docker方式安装的需要执行进入容器命令具体参数请查看官方文档 https://docs.taosdata.com/reference/config/2.0xxx和3.0xx可以当成两种软件来看完全不兼容。7.安装rocketmq7.1拉取镜像# docker pull 192.168.4.151/jxbp/rocketmq:4.57.2创建挂载路径# mkdir -p /opt/mount/rocketmq/namesrv/logs# mkdir -p /opt/mount/rocketmq/namesrv/store# mkdir -p /opt/mount/rocketmq/conf# cd /opt/mount/rocketmq/conf# touch broker.conf# mkdir -p /opt/mount/rocketmq/broker/logs# mkdir -p /opt/mount/rocketmq/broker/store7.3先运行容器# docker run -d --name rmqnamesrv -p 9876:9876 192.168.72.131/jxbp/rocketmq:4.5 sh mqnamesrv7.4复制文件到挂载路径# docker cp rmqnamesrv:/opt/jxbp/rocketmq/conf/broker.conf /opt/mount/rocketmq/conf/broker.conf7.5删除旧容器重新创建运行# docker stop rmqnamesrv# docker rm rmqnamesrvdockerrun-d-p9876:9876\-v/opt/mount/rocketmq/namesrv/logs:/root/logs\-v/opt/mount/rocketmq/namesrv/store:/root/store\-v/opt/mount/rocketmq/conf/broker.conf:/opt/jxbp/rocketmq/conf/broker.conf\--namermqnamesrv\192.168.72.131/jxbp/rocketmq:4.5shmqnamesrv运行broker:dockerrun-d-p10911:10911-p10909:10909\-v/opt/mount/rocketmq/broker/logs:/root/logs\-v/opt/mount/rocketmq/broker/store:/root/store\-v/opt/mount/rocketmq/conf/broker.conf:/jxbp/rocketmq/conf/broker.conf\--namermqbroker\--add-host namesrv:192.168.72.132\-eNAMESRV_ADDRnamesrv:9876\192.168.72.131/jxbp/rocketmq:4.5\shmqbroker-nnamesrv:9876\-c/opt/jxbp/rocketmq/conf/broker.confautoCreateTopicEnabletrue8.项目后端部署8.1打包后上传dockerfile相关文件并解压8.2打包镜像gateway为例修改注册地址、nacos用户名密码命名空间等# vi /opt/thinglinks/dockerfile/thinglinks/gateway/Dockerfilevi/opt/thinglinks/dockerfile/thinglinks/gateway/jar/resources/bootstrap.yml打包镜像文件# cd /opt/thinglinks/dockerfile/thinglinks/gateway/# docker build --build-arg JAR_FILEjar/thinglinks-gateway-1.0.0.RELEASE.jar -t thinglinks-gateway:latest .8.3修改docker-compose.yaml文件屏蔽depends_on、links其它服务也要屏蔽因为已经用上面的方式启动中间件容器了不注释会再创建一个redis等容器# vi /opt/thinglinks/dockerfile/docker-compose.yaml8.4创建运行容器# docker-compose up -d thinglinks-gateway注意其它服务的bootstrap.yml的配置用的是project.artifactId格式启动会报错修改为实际的内容例如auth服务修改为打包镜像# docker build --build-arg JAR_FILEjar/thinglinks-auth-1.0.0.RELEASE.jar -t thinglinks-auth:latest .运行容器# docker-compose up -d thinglinks-auth查询日志# docker logs thinglinks-auth其它服务broker服务# docker build --build-arg JAR_FILEjar/thinglinks-modules-broker-1.0.0.RELEASE.jar -t thinglinks-modules-broker:latest .# docker-compose up -d thinglinks-modules-brokersystem服务# docker build --build-arg JAR_FILEjar/thinglinks-modules-system-1.0.0.RELEASE.jar -t thinglinks-modules-system:latest .# docker-compose up -d thinglinks-modules-system# docker build --build-arg JAR_FILEjar/thinglinks-modules-file-1.0.0.RELEASE.jar -t thinglinks-modules-file:latest .# docker-compose up -d thinglinks-modules-file# docker build --build-arg JAR_FILEjar/thinglinks-modules-rule-1.0.0.RELEASE.jar -t thinglinks-modules-rule:latest .# docker-compose up -d thinglinks-modules-rulevi/usr/lib/systemd/system/docker.service前端项目部署上传前端文件到与nginx配置的路径挂载的宿主机路径一致即可。与4.6的挂载路径一致

相关新闻

零基础学SQL 19:报表累计求和总对不上?窗口函数 4 行搞定(附 3 个模板)

零基础学SQL 19:报表累计求和总对不上?窗口函数 4 行搞定(附 3 个模板)

做月度报表,绕不开这三个问题: 截至这个月,累计是多少?跟上个月比,涨了还是跌了?这个月占了整体的百分之多少? 不会窗口函数的人,一般有三条出路:导到 Excel 手动拉一列、…

2026/9/24 17:51:45 阅读更多 →
D28 | 向量库管理后台:从 0 搭一个企业级知识库管理平台

D28 | 向量库管理后台:从 0 搭一个企业级知识库管理平台

文章目录 D28 | 向量库管理后台:从 0 搭一个企业级知识库管理平台 写在前面 一、为什么需要向量库管理后台 1.1 RAG 落地的"最后一公里" 1.2 后台的 5 大核心模块 1.3 选型参考 二、文档摄取流水线:从上传到入库 2.1 流水线设计 2.2 文档状态机 2.3 摄取流水线实现…

2026/9/24 17:50:44 阅读更多 →
AI画布批量生成后怎么抽检:用风险分层决定先看哪几张

AI画布批量生成后怎么抽检:用风险分层决定先看哪几张

一次生成20张图,逐张从头看到尾当然最稳,但很多小团队没有足够时间;完全随机抽几张又可能漏掉带错字、数字错误或主体缺失的高风险结果。 更合理的做法不是追求万能比例,而是先按错误代价分层,再决定检查顺序。本文的…

2026/9/24 17:50:44 阅读更多 →

最新新闻

JSP+MySQL个人日记本源码运行全攻略:从环境搭建到避坑指南

JSP+MySQL个人日记本源码运行全攻略:从环境搭建到避坑指南

简介:基于jspmysql的JSP个人日记本源码,是一份面向Java Web初学者与课程设计场景的完整Web应用项目。资源以JSP作为视图层、Servlet处理控制逻辑,结合MySQL存储用户、日记与分类数据,覆盖用户登录、会话保持、日记增删改查、分类管…

2026/9/24 18:29:14 阅读更多 →
2026年AirPods全系选购指南:从AirPods 4到Pro与Max,哪款最适合你

2026年AirPods全系选购指南:从AirPods 4到Pro与Max,哪款最适合你

AirPods这个品类,现在真的有点“乱花渐欲迷人眼”了。从最初只有一款标准版,到如今AirPods 4、AirPods Pro、AirPods Max三条线并行,Plus版一般、Lite版传闻满天飞,哪怕是数码圈老手,真要下手买前不花点时间做功课&…

2026/9/24 18:29:14 阅读更多 →
结构可靠性分析:验算点法与直接抽样组合实战

结构可靠性分析:验算点法与直接抽样组合实战

简介:面向结构可靠性与安全度评估的实用算法压缩包,适合结构工程专业学生、科研人员及从事可靠性分析的工程师。资源聚焦验算点法和直接抽样法,同时涉及蒙特卡洛模拟思路,用于计算结构失效概率、评估极端荷载下的安全裕度&#xf…

2026/9/24 18:29:14 阅读更多 →
前后端分离部署实战:systemd托管Java进程+Nginx反向代理

前后端分离部署实战:systemd托管Java进程+Nginx反向代理

1. 部署方案设计与总体思路1.1 为什么是“systemd Nginx”这套组合前后端分离项目的部署,说简单也简单,说麻烦也麻烦。简单在于流程是固定的——后端打成 jar 包跑起来,前端构建出静态文件扔给 Web 服务器。麻烦在于每一个环节都有坑&#x…

2026/9/24 18:29:14 阅读更多 →
腾讯云EdgeOne免费CDN实战:接入配置与成本优化指南

腾讯云EdgeOne免费CDN实战:接入配置与成本优化指南

上个月帮一个朋友的博客站点排查访问慢的问题。他的服务器带宽只有5M,文章里全是高清截图和录屏素材,高峰期十几个人同时打开就卡得不行。我顺手看了眼他用的还是老式按量计费CDN,月底账单里光是流量费就占了一半。我说你这个站,流…

2026/9/24 18:29:14 阅读更多 →
Linux与Windows系统运维:参数查询与配置命令对照实战

Linux与Windows系统运维:参数查询与配置命令对照实战

很多时候,我们干的活儿并不是什么高深莫测的架构设计,反而是那些每天都在重复的“查一下参数、改一个配置”。尤其是当你的手头同时管着 Windows 服务器和 Linux 服务器时,这种“精神分裂”的感觉会特别明显:明明在 Windows 上用图…

2026/9/24 18:28:13 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →