Docker 部署(TKE)
TKE(ThinkLink Enterprise)是 ThinkLink 的私有化部署版本,使用 Docker Compose 运行。能够访问互联网的 Linux 服务器可使用官方一键安装脚本;无法联网的服务器可使用同一安装器生成的离线包。两种方式均自动部署 MinIO 对象存储并初始化私有存储桶。
更新日期:2026-09-11。新版安装器已发布,支持在线安装、离线包下载、包校验和离线安装。
架构限制:ThinkLink 安装版本仅支持 x64(x86_64 / amd64)架构,不支持 ARM、ARM64 或 32 位 x86。联网一键安装和脚本化离线安装均适用。
1. 安装要求
| 项目 | 要求 |
|---|---|
| 权限 | root 权限(安装命令使用 sudo) |
| CPU | 仅支持 x64(x86_64 / amd64),至少 2 核;不支持其他架构 |
| 内存 | 至少 4 GiB |
| 磁盘 | /opt 所在文件系统至少 20 GiB 可用空间 |
| 网络 | 在线安装或下载离线包时,需通过 HTTPS 访问 package.think-link.net 及其返回的制品下载地址;离线目标服务器不需要公网连接 |
| 系统支持级别 | 发行版 | Docker 要求 |
|---|---|---|
| 自动安装 | Debian 11/12/13、Ubuntu 22.04、Rocky/AlmaLinux 9 | 在线模式可自动安装 Docker;离线模式必须预装 |
| 兼容模式 | Ubuntu 20.04、CentOS 7/8 | 必须预装 Docker Engine 和 Docker Compose V2 |
2. 开放端口
在云安全组和服务器防火墙中按实际使用范围开放以下端口:
| 端口 | 协议 | 用途 |
|---|---|---|
| 80 | TCP | ThinkLink Web 管理界面;若已占用,安装器可交互选择 8080 |
| 1883 | TCP | MQTT |
| 8083 | TCP | MQTT over WebSocket |
| 8084 | TCP | MQTT over Secure WebSocket |
| 18083 | TCP | EMQX 管理界面 |
| 1700 | UDP | LoRaWAN GWMP 网关接入 |
| 9000 | TCP | MinIO S3 API,供对象存储服务使用 |
| 9001 | TCP | MinIO 管理控制台,仅向管理员所在的可信网络开放 |
MinIO 随安装自动配置,正常使用 ThinkLink 无需访问 MinIO 控制台。上述两个端口由 Compose 映射到宿主机,请按部署网络限制访问来源,不需要统一对公网开放。首次安装时,若 9000 或 9001 已被其他服务占用,安装器会停止,不会自动选择替代端口。
PostgreSQL 的 5432 和 Redis 的 6379 仅供容器内部使用,不需要对公网开放。安装器不负责配置 HTTPS;如需公网 HTTPS,请另外配置反向代理和证书。
3. 在线一键安装
无法联网的目标服务器请使用脚本化离线安装。
在服务器终端执行:
curl --tlsv1.2 --tls-max 1.2 -fsSL https://package.think-link.net/install.sh | sudo bash该命令不需要额外参数。安装器会依次:
- 检测操作系统、CPU、内存、磁盘和所需端口。
- 在支持的系统上安装 Docker;已有可用 Docker 时直接复用。
- 从 ThinkLink 官方软件包服务下载应用归档、Compose 文件和 7 个容器镜像归档(共 9 个文件),包含
tkl-minio.tar。 - 将文件安装到
/opt/thinklink,加载镜像并启动 Docker Compose 服务。MinIO 首次启动时自动创建私有的thinklink存储桶。 - 检查 ThinkLink HTTP、MinIO 就绪状态及存储桶初始化结果,再记录版本和访问信息。安装器还生成 MinIO 客户端配置参考,业务接入见内置对象存储。
如果 80 端口已被其他服务占用,安装器会在终端询问是否改用 8080。它不会停止或修改占用该端口的原有服务。
4. 查看结果并登录
在线或离线安装完成后,终端会显示 ThinkLink 平台及相关服务的访问信息。安装记录保存在:
/opt/thinklink/install-info.txt该文件仅允许 root 读取。请使用安装结果中的 ThinkLink 平台地址登录,并在首次登录后修改 ThinkLink、EMQX 和 MinIO 的初始密码;修改 MinIO 凭据后同步更新业务客户端配置。安装器还生成 /opt/thinklink/minio-client.json(权限 0600)及版本记录 /opt/thinklink/.package-version。
默认情况下访问:
http://<服务器IP>如果安装时选择了备用 Web 端口,则访问:
http://<服务器IP>:8080登录后需要创建或加入组织,才能开始配置网关和设备。
5. 内置对象存储
使用当前在线安装器或完整离线包全新安装时,安装器自动配置 MinIO 服务并创建私有存储桶,无需手工合并 Compose 或创建桶。/opt/thinklink/minio-client.json 提供实际凭据和连接参数参考,不会自动覆盖 ThinkLink 的业务配置;请按所安装的 ThinkLink 版本核对并填写对象存储设置。
| 项目 | 默认行为 |
|---|---|
| 存储桶 | thinklink,首次启动时自动创建 |
| 访问方式 | 私有存储桶,文件通过授权链接访问 |
| 下载链接有效期参考 | 604800 秒(7 天),以业务客户端实际设置为准 |
| 数据持久化 | Compose 命名卷 minio_data,挂载到 MinIO 容器的 /data |
ThinkLink 容器访问同一 Docker 网络中的 MinIO 时,通常使用 http://minio:9000。配置参考文件中的 127.0.0.1 不能直接作为独立 ThinkLink 容器访问 MinIO 的地址;浏览器打开预签名链接时,链接中的地址也必须是浏览器可达的服务器 IP 或域名。
安装并核对对象存储配置后,可生成一份报表,并在报表记录中打开或下载,确认文件存储功能正常。
对象文件保存在 Docker 命名卷中。日常备份应覆盖该数据卷;仅备份 /opt/thinklink 目录不能代替对象数据备份。容器重新启动时会保留已有存储桶及对象。
以上说明适用于在线和离线全新安装。离线模式会拒绝已有安装目录、ThinkLink 容器或数据卷;已有部署应先制定备份与版本升级方案。
6. 验证与排障
查看容器状态:
sudo docker compose -f /opt/thinklink/docker-compose.yml ps查看某个服务的日志:
sudo docker compose -f /opt/thinklink/docker-compose.yml logs <服务名>检查 MinIO 服务及存储桶初始化状态:
curl --fail --silent --show-error http://127.0.0.1:9000/minio/health/ready
sudo docker compose -f /opt/thinklink/docker-compose.yml exec -T minio /thinklink-minio check-ready第一条命令检查 MinIO 服务就绪状态,第二条检查镜像内置初始化流程是否完成。若报表生成或下载失败,先检查容器状态、初始化检查结果、相关服务日志及下载链接是否过期。
常见安装失败原因包括:
- 服务器不是 x64(x86_64 / amd64)架构。
- CPU、内存或
/opt可用空间不足。 - 兼容模式系统未预装 Docker Engine 和 Compose V2。
- 端口已占用,且没有选择可用的替代端口。
- 服务器无法访问官方软件包地址,或下载过程被代理、防火墙中断。
执行 bash thinklink-install.sh --help 可查看新版参数。离线或受控网络部署请按脚本化离线安装生成和使用完整离线包,不要混用不同批次的制品。
7. 与云平台协同使用
同一 LoRaWAN 设备档案不要同时在两个平台上启用。若 TKE 和云平台同时响应 Join 或 Confirm 消息,可能产生入网失败和下行冲突。切换平台时,应在不使用的平台禁用或删除对应设备档案。
8. 脚本化离线安装
新版安装器支持“联网下载 → 搬运校验 → 离线安装”。无需手工调用下载 API、编辑 Compose 或逐个导入镜像。
8.1. 准备机器
联网下载机建议使用 Linux,预装 Bash、curl、jq、tar、sha256sum;下载和校验不需要 root 或 Docker。预留完整离线包所需空间;2026-09-11 验收的 2.00.062 包约 2.45 GB,后续版本大小可能变化。
离线目标服务器须满足安装要求,推荐 Ubuntu 22.04、Debian 11/12/13、Rocky Linux 9 或 AlmaLinux 9,并提前准备:
- 已安装并启动的 Docker Engine,以及 Docker Compose V2。
- Bash、curl、jq、tar、sha256sum、ss、hostname 及系统基础命令。
/opt所在文件系统至少 20 GiB 可用空间,另留离线包、解压和镜像导入空间。- 全新安装环境:没有
/opt/thinklink、已有 ThinkLink 容器或数据卷。
离线包不包含 Docker 和操作系统依赖。 请按目标发行版、版本及 x64 架构另行准备其离线安装材料。离线安装器不会调用 apt/dnf、下载 Docker、拉取或构建镜像,也不会上报安装事件。
在离线目标服务器检查环境:
uname -m
sudo docker version
sudo docker compose versionuname -m 应输出 x86_64。其他架构请停止安装;已有安装或残留数据时,先制定备份、恢复或升级方案。
8.2. 在联网机器下载离线包
先将公开安装脚本保存到本地,再运行下载模式。每条命令成功后再执行下一条:
curl --fail --silent --show-error --proto '=https' \
--tlsv1.2 --tls-max 1.2 --connect-timeout 10 --max-time 60 \
https://package.think-link.net/install.sh -o thinklink-install.sh
bash thinklink-install.sh --help
bash thinklink-install.sh --download-only ./thinklink-offline--help 应包含 --download-only、--verify-only 和 --offline;若没有,请重新获取新版脚本。下载模式必须从本地脚本文件执行,不能使用 curl | bash,因为离线包需要携带同一份完整安装器。
目标目录 ./thinklink-offline 必须尚不存在,父目录必须已存在;不要提前执行 mkdir thinklink-offline。脚本会下载应用归档、Compose 文件和七个镜像,全部校验通过后才交付目标目录:
thinklink-offline/
application.tar
docker-compose.yml
tkl-emqx.tar
tkl-nsbrg.tar
tkl-postgres.tar
tkl-redis.tar
tkl-thinklink.tar
tkl-thinkone.tar
tkl-minio.tar
install.sh
install-offline.sh
release.json
SHA256SUMS
README.txtrelease.json 记录发布 ID、版本、通道、架构和离线格式版本;SHA256SUMS 覆盖九个制品、两个脚本、版本记录和包内说明,共 13 个文件。下载会话响应和短期签名地址不会进入交付目录。
地址过期或单文件下载失败时,脚本会用原下载会话刷新地址并重试一次,同时核对发布 ID、版本及制品路径,避免混入其他版本。跨进程断点续传尚不支持;失败后重新执行下载命令会重新下载整套文件。强制终止或断电可能留下 .thinklink-offline.* 暂存目录,不要将其当作完整包交付。
8.3. 搬运并校验
通过 U 盘或内网传输整个 thinklink-offline 目录,保持全部文件不变。生成目录的权限为 0700;包内可能包含应用配置,搬运后仍应限制读取权限。
在离线目标服务器进入包目录,执行:
cd thinklink-offline
bash install.sh --verify-only .该模式不需要 root 或 Docker,也不会发起网络请求。它校验文件完整性、清单路径和版本格式;全部通过后才继续安装。SHA-256 用于核对转移完整性,不是发布方数字签名,不能独立证明来源。不要修改校验清单来绕过损坏或缺失文件。
8.4. 按提示安装
在包目录执行:
sudo bash install-offline.sh安装器依次完成以下步骤:
- 再次校验完整离线包和版本信息。
- 检查系统、资源、Docker、已有安装及端口。80 被占用时可选择 8080 或退出;其他必要端口冲突时停止。
- 显示版本、安装目录和 HTTP 端口,等待输入
y确认;直接回车或输入n会取消。 - 检查应用归档路径,解压应用,自动配置 Compose 和 MinIO,并导入七个镜像。
- 确认 Compose 所需镜像全部存在,以
--pull never --no-build启动服务,等待 ThinkLink HTTP、MinIO 和私有桶就绪。
需要自动确认最终安装提示时,可执行:
sudo bash install-offline.sh --yes--yes 只跳过最终确认,不绕过校验、旧安装保护或端口选择。也可从其他目录指定完整包路径:
sudo bash /path/to/thinklink-offline/install.sh --offline /path/to/thinklink-offline离线模式仅用于全新安装,不提供自动升级或失败回滚。若检测到已有安装或残留数据,请保留并排查,不要直接删除数据后重试。
8.5. 验证安装结果
安装成功后显示实际服务地址,并生成安装记录和版本文件。默认 ThinkLink 使用 HTTP 80(或选择的 8080),EMQX 控制台为 18083,MinIO S3 API 为 9000、控制台为 9001。
查看容器和安装版本;若使用 8080,请相应修改 HTTP 检查端口:
sudo docker compose -f /opt/thinklink/docker-compose.yml ps
sudo cat /opt/thinklink/.package-version
curl --fail http://127.0.0.1:80/
curl --fail http://127.0.0.1:9000/minio/health/ready
sudo docker compose -f /opt/thinklink/docker-compose.yml exec -T minio /thinklink-minio check-ready随后验证实际登录、业务功能和报表生成/下载;对象存储连接要求见内置对象存储。保留完整离线包及 release.json、SHA256SUMS,用于版本追溯。
2026-09-11 发布验收记录确认:2.00.062 在独立 x64 Ubuntu 22.04 Docker 虚拟机移除默认路由后完成安装,七个容器运行,ThinkLink HTTP、MinIO 和私有桶检查通过,匿名访问私有桶被拒绝。此次验收覆盖安装基础设施,不包含实际业务登录和业务流程;部署后仍需完成上述业务验证。
8.6. 常见错误
| 提示 | 处理方式 |
|---|---|
OFFLINE_OUTPUT_EXISTS | 换用尚不存在的下载目录,不覆盖旧包 |
SCRIPT_FILE_REQUIRED | 将公开脚本保存为本地文件后再运行下载模式 |
ARTIFACT_DOWNLOAD_FAILED | 检查网络与磁盘空间,重新下载整套文件 |
DOWNLOAD_REFRESH_INVALID | 刷新后的版本或制品发生变化,重新下载完整包 |
OFFLINE_BUNDLE_INVALID / OFFLINE_CHECKSUM_FAILED | 重新传输完整目录,不修改校验清单绕过 |
OFFLINE_RELEASE_INVALID / OFFLINE_ARCHIVE_UNSAFE | 版本记录或应用归档异常,重新获取完整交付包并联系维护人员 |
OFFLINE_DOCKER_REQUIRED / COMMAND_REQUIRED | 补齐离线依赖,启动 Docker 并检查 Compose V2 |
OFFLINE_EXISTING_INSTALL | 已有安装或数据,先制定备份和升级方案 |
PORT_IN_USE / ALTERNATE_PORT_IN_USE | 检查端口占用,安排可用端口后重试 |
OFFLINE_CONFIRMATION_REQUIRED | 在交互终端运行,或明确使用 --yes 确认最终安装提示 |
OFFLINE_IMAGES_MISSING | Compose 与镜像不匹配,提供同版完整包 |
HEALTH_CHECK_FAILED | 检查容器状态和日志,保留安装数据排查 |
查看本机日志:
sudo docker compose -f /opt/thinklink/docker-compose.yml logs --tail=200对外分享日志前检查是否包含业务配置或凭据。失败时保留已有数据和完整离线包;脚本只清理自己创建的临时目录。
8.7. 后续版本与升级
下载时使用 stable 通道当前已发布的版本,具体以本次下载输出和 release.json 为准。2026-09-11 验收版本为 2.00.062,不代表后续下载永久固定为该版本。
软件包服务已启用每日北京时间 00:00 检查上游并按发布校验结果更新下载制品;需要人工审查或发布失败时保留原 stable。下载请求不会实时构建刚提交的上游代码。服务端制品更新不会自动升级客户已安装实例,离线机也不会自动检查或安装更新。已有部署升级前需准备新制品、备份和对应版本的升级方案,不混用不同下载批次。