Nota sobre la moneda. Las cifras se recopilaron de canales públicos chinos en 2026-10. Cuando un precio se cotizó en CNY, la cifra en USD se convierte al tipo de referencia fijo 2026-10 de 1 USD ≈ 6.71 CNY. Los precios de hardware son indicativos del orden de magnitud y no constituyen una recomendación de compra.
"Los datos no deben salir de la planta". Aparece en las licitaciones de IoT industrial como una sola línea, normalmente en la tercera cláusula de la especificación técnica, sin más explicación. El integrador gana la licitación, compra un PC industrial, instala la versión local de la plataforma IoT, pasa la aceptación y el trabajo parece terminado.
El problema es que la frase describe dónde residen los datos. No dice nada sobre cómo se mueven los datos dentro de la planta. Una vez que se coloca una plataforma de siete contenedores en la red de planta, las preguntas no desaparecen porque los datos permanezcan locales: si MQTT va en texto claro, quién puede acceder a la consola de almacenamiento de objetos, qué tamaño tendrá la tabla de historial dentro de doce meses. Centralizar los datos tiende a ampliar la superficie de ataque interna, no a reducirla.
Este artículo recorre un despliegue de ThinkLink Edge (TKE) en el orden en que realmente ocurre. El foco no es el comando de instalación, sino el conjunto de cosas que normalmente se descubren después de la instalación, y que deberían haberse resuelto antes de encargar la máquina.
1. Antes de comprar nada: tres preguntas que deciden si necesita TKE
ThinkLink se distribuye en tres formas de despliegue: SaaS en nube pública (Cloud), autoalojado en un servidor local (TKE / ThinkLink Edge) e integrado dentro de una pasarela (TKG). Las tres comparten los mismos modelos de dispositivos, definiciones RPC y lógica de disparadores, y los activos se pueden migrar entre ellas. Eso es lo que hace seguro aplazar la decisión, hasta cierto punto.
| Dimensión |
Cloud |
TKE (Edge) |
TKG (en la pasarela) |
| Dónde se ejecuta |
SaaS en nube pública |
Servidor local / PC industrial, autoalojado |
Dentro de una pasarela ManThink (p. ej. GDO51 / GDI51) |
| Límite de dispositivos |
1,000 (gratuito, de forma permanente) |
1,000 |
100 |
| Rendimiento de datos |
~100k mensajes/día |
Sin límite declarado |
~10k mensajes/día |
| Hardware de referencia |
Nada que comprar |
8 núcleos / 8 GB / 64 GB de almacenamiento |
Integrado (GDI51 tiene 32 GB de eMMC) |
| Conectividad |
Requiere internet pública |
Local, funciona sin conexión |
Local, no requiere internet pública |
| Mejor encaje |
Evaluación, pilotos pequeños |
Localización de datos, empresas medianas y grandes, redes privadas |
Despliegues privados pequeños, modernización de instalaciones existentes, sin servidor adicional |
Tres preguntas que responder primero:
¿Realmente necesita TKE? Por debajo de 100 dispositivos y de 10k mensajes al día, TKG integra el servidor de red directamente en la pasarela: sin servidor adicional, sin ciclo de adquisición de servidor. Muchísimos requisitos de "los datos no deben salir de la planta" en realidad se refieren a no enviar datos de producción fuera a través de una salida a internet pública, y TKG lo satisface con una estructura de costes completamente distinta.
¿En qué lado de 10k mensajes/día está? Esa línea separa TKG de TKE. 1,000 dispositivos que reportan cada 10 minutos son 144,000 mensajes al día: por encima de la densidad de referencia de Cloud y muy por encima de TKG. 50 medidores que reportan cada hora son 1,200 al día, lo que TKG maneja con holgura.
¿Quién se hace cargo de esta máquina después? TKE es un compromiso operativo permanente: parches del SO, motor Docker, siete contenedores, renovaciones de certificados, copias de seguridad. Si el departamento de TI del cliente no ha aceptado explícitamente la propiedad, ha creado un servidor sin propietario, que normalmente se descubre en el segundo año cuando el disco está lleno.
2. Selección de hardware: x64 es una restricción estricta, no una recomendación
La documentación oficial contiene dos declaraciones distintas de los requisitos de hardware de TKE, y no coinciden. Conviene exponerlas antes de comprometer presupuesto.
Declaración A (tabla comparativa de productos): hardware de referencia 8 núcleos / 8 GB de RAM / 64 GB de almacenamiento, mínimo 2 núcleos y 2 GB, arquitectura indicada como ARM64 / x64.
Declaración B (manual de despliegue con Docker; flujo de instalación actualizado 2026-09-11, sección TLS actualizada 2026-10-22):
| Elemento |
Requisito |
| Privilegios |
root (los comandos de instalación usan sudo) |
| Arquitectura de CPU |
solo x64 (x86_64 / amd64), mínimo 2 núcleos |
| RAM |
mínimo 4 GiB |
| Disco |
mínimo 20 GiB libres en el sistema de archivos que contiene /opt |
| Red |
acceso HTTPS a package.think-link.net para la instalación en línea; el destino sin conexión no necesita internet |
| Explícitamente no compatible |
ARM, ARM64, 32 bits x86 |
Las dos declaraciones discrepan en tres puntos: 2 GB o 4 GB de RAM, 64 GB o 20 GB de disco y, lo más importante, si ARM funciona o no en absoluto.
Siga la declaración B. Tres razones:
- La declaración B procede del propio manual de despliegue y es contra la que el instalador comprueba realmente; no cumplirla termina la instalación. La declaración A es una línea de resumen en una tabla comparativa.
- La declaración B es la restricción más estricta. Siete contenedores se ejecutan simultáneamente: EMQX, el puente NS, PostgreSQL, Redis, ThinkLink, ThinkOne y MinIO. Dos gigabytes no dejan margen a esa escala.
- La declaración B enumera explícitamente ARM, ARM64 y 32 bits x86 como no compatibles, y señala por separado que la restricción se aplica tanto a la instalación en línea de una línea como a la instalación sin conexión mediante script. Una redacción tan específica suele provenir de haberlo intentado.
Esta restricción choca de frente con los mandatos de CPU nacionales. Las CPU chinas se dividen en dos bandos:
| Bando |
Piezas representativas |
¿Funciona con TKE? |
| x86 |
Zhaoxin KX-6000/KX-7000, serie Hygon 3000/5000 |
Sí — la arquitectura es compatible |
| ARM |
Phytium FT-2000/4 y D2000, Kunpeng 920, Rockchip RK3568/RK3588 |
No — incompatible |
Si un mandato de localización recae sobre el bando ARM, TKE debería descartarse durante la selección, no después de que llegue la máquina y uname -m imprima aarch64. El bando x86 funciona directamente — Hygon 3350 (núcleos 8 / hilos 16 a 3.0 GHz) es x86_64.
Precios indicativos recopilados de canales públicos en 2026-10:
| Configuración |
Propósito |
Precio indicativo |
| 4U montaje en rack, i5-6500U / 8 GB / 1 TB |
Prueba de concepto (núcleos 2, justo en el mínimo) |
~$477 (¥3,200) |
| PC industrial, Hygon 3350 (8C/16T) / 16 GB / 1 TB SSD |
Recomendado para producción |
~$1,550–1,700 (¥10,400–11,400) |
| Igual, con licencia de SO nacional |
Proyectos con mandato de localización |
~$1,950 (¥13,100) |
El primer nivel es solo una máquina de POC. El i5-6500U es de dos núcleos / cuatro hilos, exactamente el mínimo indicado; la CPU se convierte en el cuello de botella antes que el disco.
Lleva esta guía a tu proyecto
ManThink ofrece productos IoT para conectar dispositivos, desplegar redes y trabajar con datos. Consulta estos recursos de producto junto con las recomendaciones técnicas del artículo:
GD71 Gateway LoRaWAN para interiores · ThinkLink
Conoce los productos de ManThink y consulta tu proyecto →
3. El cálculo del disco: 20 GiB es la entrada, no el plan
La comprobación de 20 GiB es la puerta de admisión del instalador. El consumo real proviene de tres fuentes.
Siete imágenes de contenedor. El paquete sin conexión aceptado en 2026-09-11 para la versión 2.00.062 es de aproximadamente 2.45 GB, y contiene el archivo de la aplicación, el archivo Compose y siete archivos de imagen — nueve archivos en total. Las versiones posteriores serán diferentes.
Crecimiento de la base de datos. Con 1,000 dispositivos informando cada 10 minutos, eso son 144,000 filas al día. A aproximadamente 1 KB por fila, incluidos los índices, unos 144 MB/día, o ~52 GB al año. Añada el WAL de PostgreSQL, la fragmentación de índices y la sobrecarga de las consultas de historial, y la práctica habitual es aprovisionar de dos a tres veces esa cantidad.
Almacenamiento de objetos MinIO. Los informes y las imágenes residen en el volumen con nombre de Docker minio_data. Esto varía enormemente según si el negocio genera informes y con qué frecuencia.
Súmelos y 20 GiB cubre unos pocos meses. Pase a un SSD de 1 TB para producción. La diferencia de precio está en la tabla anterior y es trivial frente al valor total del proyecto; la alternativa es una ampliación de capacidad en línea en el segundo año.
Un detalle fácil de pasar por alto: los archivos de objetos residen en un volumen con nombre de Docker, por lo que las copias de seguridad rutinarias deben cubrir ese volumen; hacer copia de seguridad solo del /opt directorio no sustituye a los datos de objetos. Un script de copia de seguridad que solo recorre una ruta de directorio perderá silenciosamente todos los archivos de informes.
4. Planificación de puertos: "No salir de la planta" no es lo mismo que "no estar en una red"
Esta es la sección que vale la pena leer dos veces. El despliegue local resuelve la residencia de los datos. Una instalación predeterminada abre entonces un conjunto completo de puertos en el host, y una parte significativa de ellos está en texto claro.
Complete primero la instalación HTTP y luego configure HTTPS con tkl-tls 2.0.0 — ese es el orden documentado. Puertos de entrada del host:
| Puerto |
Protocolo |
Propósito |
Notas |
| 80 (o 8080) |
TCP |
Web / API de ThinkLink sobre HTTP |
Entrada original; si 80 está ocupado, el instalador ofrece interactivamente 8080; se mantiene tras TLS |
| 443 |
TCP |
Web / API de ThinkLink sobre HTTPS |
Habilitado una vez que tkl-tls 2.0.0 configura el Nginx dentro del contenedor |
| 1700 |
UDP |
Enlace ascendente de puerta de enlace LoRaWAN GWMP |
Abierto según las necesidades de acceso de la puerta de enlace |
| 1883 |
TCP |
MQTT de dispositivos (texto claro) |
Abierto según las necesidades de acceso de los dispositivos |
| 8883 |
TCP |
MQTTS de dispositivos |
No publicado por defecto; configurar y verificar por separado en EMQX |
| 8083 |
TCP |
MQTT sobre WebSocket |
Abierto según las necesidades del cliente |
| 8084 |
TCP |
MQTT sobre WSS |
Ruta /mqtt; requiere su propio certificado |
| 18083 |
TCP |
Panel de EMQX por HTTP |
Conservado; no se actualiza automáticamente a HTTPS |
| 18084 |
TCP |
Panel de EMQX por HTTPS |
Habilitado por tkl-tls 2.0.0 |
| 9000 |
TCP |
API de MinIO S3 |
Restringir las direcciones de origen |
| 9001 |
TCP |
Consola de MinIO |
Solo redes de administradores de confianza |
Detalles que deben figurar en el plan:
Los conflictos de puertos se gestionan de forma inconsistente. Si 80 está ocupado, el instalador pregunta si se debe usar 8080 y deja intacto el servicio que lo ocupa. Pero si 9000 o 9001 está ocupado, el instalador se detiene de inmediato y no elegirá una alternativa. Una máquina de destino que ya ejecute otro servicio de almacenamiento se bloqueará a mitad de la instalación.
5432 y 6379 nunca necesitan exponerse. Los puertos de PostgreSQL y Redis son solo internos del contenedor.
El HTTPS de gestión no es el MQTTS de los dispositivos. tkl-tls genera 443 y 18084. Los 8883 y 8084 del lado del dispositivo no se publican de forma predeterminada y requieren cargar certificados en EMQX, abrir las asignaciones y verificar la conectividad. Reemplazar el certificado en la interfaz de gestión no reemplaza los certificados de los listeners de dispositivos — son dos configuraciones distintas.
Un puerto abierto no es un listener TLS habilitado. Vale la pena copiar el recordatorio del manual directamente en la hoja de aceptación.
La consola de EMQX en 18083 sigue siendo HTTP. La consola HTTPS es 18084; la entrada antigua se conserva. Restringir 18083 y olvidar 18084 no logra nada.
5. Despliegue on-premises ≠ cumplimiento normativo
Esta es la interpretación errónea más común de «los datos no deben salir de la planta».
Mover la plataforma dentro de la planta aborda la ubicación de almacenamiento. La ruta del sensor a la plataforma sigue siendo transmisión por red, y sigue sujeta a lo que las normas aplicables exijan a la transmisión.
Las Medidas Provisionales para la Gestión de la Seguridad de Datos en el Sector de la Industria y las Tecnologías de la Información de China (Circular de Ciberseguridad del MIIT n.º 166, emitida el 2022-12-08, en vigor desde el 2023-01-01) clasifican los datos del sector en tres niveles —general, importante y central— y establecen en el artículo 17:
Los procesadores de datos deberán formular políticas de seguridad y adoptar medidas de protección según el tipo, el nivel y el escenario de aplicación de los datos transmitidos. Al transmitir datos importantes o datos centrales, deberán adoptar tecnología de verificación, tecnología criptográfica, canales de transmisión seguros o protocolos de transmisión seguros.
Léase esto junto con la tabla de puertos anterior. En una instalación predeterminada, el MQTT de dispositivos se ejecuta en texto claro en 1883, HTTP se ejecuta en 80 y la API S3 de MinIO en 9000. Si este sistema transporta datos clasificados como importantes, el despliegue on-premises por sí solo no satisface el artículo 17 — también deben cerrarse los canales de transmisión, es decir, web/API en 443 y MQTT de dispositivos en 8883.
El Reglamento sobre la Seguridad de los Datos en Red (Decreto del Consejo de Estado n.º 790, publicado el 2024-09-24, en vigor desde el 2025-01-01, nueve capítulos y 64 artículos) establece el régimen de clasificación y graduación un nivel por encima, con un capítulo dedicado a los datos importantes.
Dos cláusulas más inciden en las operaciones concretas:
- Artículo 15: el almacenamiento de datos importantes y centrales exige un almacenamiento seguro mediante tecnologías de verificación y criptográficas, además de copia de seguridad para la recuperación ante desastres de datos y gestión de la seguridad de los medios de almacenamiento, con pruebas periódicas de recuperación de datos.
- Artículo 25: los procesadores deben registrar el procesamiento de datos, la gestión de permisos y las acciones de los operadores, conservando los registros durante no menos de seis meses.
Para los lectores europeos, la presión llega desde otra dirección. La obligación de diseño para el acceso a datos del Reglamento Europeo de Datos (artículo 3(1)) entró en vigor el 2026-09-12, y los cargos por cambio de proveedor de nube caen a cero el 2027-01-12. Instrumento distinto, misma conclusión estructural: la capacidad de trasladar un despliegue —incluido trasladarlo a su propio hardware— se está convirtiendo en una cuestión de cumplimiento, no en una preferencia de arquitectura.
Las tres cláusulas juntas forman una cadena: el despliegue local es el paso uno, TLS es el paso dos, la copia de seguridad y la retención de registros son el paso tres. Declarar el cumplimiento tras el paso uno es lo que se detecta en una auditoría.
6. Dos rutas de instalación: en línea con una sola línea de comandos y sin conexión mediante script
En línea
En un servidor conectado, sin argumentos:
curl --tlsv1.2 --tls-max 1.2 -fsSL https://package.think-link.net/install.sh | sudo bash
El instalador: detecta SO, CPU, RAM, disco y puertos → instala Docker en los sistemas compatibles (reutilizando cualquier Docker que funcione) → descarga el archivo de la aplicación, el archivo Compose y siete archivos de imagen (nueve archivos) → instala en el directorio de destino, carga las imágenes e inicia Compose → comprueba ThinkLink HTTP, la disponibilidad de MinIO y la inicialización del bucket → registra la versión y la información de acceso.
MinIO crea un bucket privado llamado thinklink en el primer inicio.
Sin conexión mediante script
La documentación lo resume como «descargar en línea → transferir y verificar → instalar sin conexión».
Paso uno, en una máquina conectada. El modo de descarga debe ejecutarse desde un archivo de script local, nunca a través de curl | bash, porque el paquete debe incluir el mismo instalador completo:
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
Ejecute --help primero y confirme que enumera --download-only, --verify-only y --offline. El directorio de destino aún no debe existir y su directorio padre sí; no mkdir lo cree de antemano.
El directorio entregado contiene 13 archivos con suma de verificación:
| Archivo |
Función |
| application.tar |
Archivo de la aplicación |
| docker-compose.yml |
Definición de Compose |
| tkl-emqx.tar / tkl-nsbrg.tar / tkl-postgres.tar |
Imágenes de EMQX, puente NS y PostgreSQL |
| tkl-redis.tar / tkl-thinklink.tar / tkl-thinkone.tar |
Imágenes de Redis, ThinkLink y ThinkOne |
| tkl-minio.tar |
Imagen de MinIO |
| install.sh / install-offline.sh |
Scripts del instalador |
| release.json |
Id de la versión, versión, canal, arquitectura |
| SHA256SUMS |
Cubre los artefactos 9, los scripts 2, el registro de versión y el archivo readme |
| README.txt |
Notas incluidas en el paquete |
Paso dos: transferir y verificar. Mueva el directorio intacto: se crea con el modo 0700 y debe permanecer restringido a lectura después. En el destino:
cd thinklink-offline
bash install.sh --verify-only .
Este modo no requiere root ni Docker y no realiza solicitudes de red. Comprueba la integridad de los archivos, las rutas del manifiesto y el formato de la versión, y solo continúa si todo pasa. SHA-256 verifica la integridad de la transferencia; no es una firma del publicador y no demuestra la procedencia de forma independiente — una nota sincera en el manual, y un recordatorio de que la confianza en la cadena de suministro sigue dependiendo del canal de entrega.
Paso tres: instalar. Ejecute sudo bash install-offline.sh en el directorio del paquete, añadiendo --yes para ejecuciones desatendidas (omite solo la confirmación final, no la verificación ni las comprobaciones de puertos).
El destino sin conexión ya debe tener Docker Engine y Docker Compose V2, porque el paquete no incluye Docker ni dependencias del sistema operativo. Compruébelo primero:
uname -m
sudo docker version
sudo docker compose version
uname -m debe mostrar x86_64. Cualquier otra cosa: deténgase.
Tres límites de la vía sin conexión
- Solo instalaciones nuevas: sin actualización automática ni reversión en caso de fallo. Si detecta una instalación existente o datos residuales, deja el escenario intacto para que usted lo investigue en lugar de limpiar y reintentar. Las actualizaciones requieren nuevos artefactos, una copia de seguridad y un plan de actualización con la versión correspondiente.
- No mezcle lotes de descarga. El servicio de paquetes consulta el origen en 00:00 hora de Pekín a diario y actualiza los artefactos. Mezclar lotes produce
OFFLINE_IMAGES_MISSING — Compose e imágenes desincronizados.
- Sin descargas reanudables entre procesos. Un fallo implica volver a descargar los 2.45 GB completos. Ante una URL caducada o un fallo de un solo archivo, el script renueva la dirección dentro de la misma sesión y reintenta una vez.
7. La única línea roja al operar junto a la nube
La mayoría de los proyectos atraviesan un periodo de transición con un pie en cada lado: dispositivos heredados en la nube, dispositivos nuevos en local, ambos activos.
La documentación es inequívoca:
No habilite el mismo perfil de dispositivo LoRaWAN en dos plataformas a la vez. Si TKE y la plataforma en la nube responden ambos a mensajes Join o Confirm, pueden producirse fallos de unión y conflictos de enlace descendente. Al cambiar de plataforma, deshabilite o elimine el perfil en la que no esté usando.
Esta es una restricción funcional, no un consejo de rendimiento. Una Join Request se reenvía a cada NS registrado para ese DevEUI. Ambos responden con un Join Accept; el dispositivo acepta uno, pero el otro NS ahora cree que el dispositivo se unió y mantiene contadores de tramas: los enlaces descendentes posteriores van por la ruta equivocada.
Durante la transición, el perfil está habilitado en exactamente un lado. No "ambos activos, quien responda primero".
8. Migración de nube a edge: tres trampas en la importación/exportación de Excel
ThinkLink mueve datos masivos mediante Excel en seis tipos de módulo: configuraciones de dispositivos, perfiles LoRaWAN, modelos de dispositivos, comandos RPC, modelos de vinculación/disparo y plantillas de dispositivos. El flujo de trabajo es idéntico en Cloud, TKE y TKG — la única diferencia es que TKE/TKG tienen su propia cuenta de administrador local, no relacionada con la de la nube.
- En la nube, abra el módulo de destino (p. ej., LoRaWAN Profiles)
- Seleccione las entradas a sincronizar (ninguna seleccionada = exportar todo)
- Haga clic en Export y descargue la hoja de cálculo generada
- Repita 2–3 para cada tipo de datos (modelos de dispositivos, comandos RPC, …)
- Cambie a TKE y abra el módulo correspondiente
- Haga clic en Import y elija la hoja de cálculo
- Confirme que la importación finalizó sin errores
- Importar modelos públicos requiere iniciar sesión como admin
Tres trampas:
Trampa uno: DevEUI es único a nivel global, por lo que la migración entre organizaciones es eliminar y luego importar. Un DevEUI dado pertenece a una organización dentro de una plataforma. Mover un perfil de la organización A a la B requiere eliminarlo primero en A; de lo contrario, la importación falla directamente.
| Tipo de datos |
¿Eliminar primero? |
Por qué |
| LoRaWAN Profiles |
Sí |
DevEUI es único a nivel global |
| Modelos de cosas / comandos RPC / plantillas de dispositivos |
No |
Mismo ID significa sobrescribir; sin restricción de unicidad |
Trampa dos: un ID coincidente significa sobrescritura total, y no se puede revertir. La regla es "crear si el ID no existe, sobrescribir por completo si existe". Es un reemplazo, no una fusión. Los valores de campo obsoletos en la hoja de cálculo sobrescribirán la configuración activa en el destino.
Hay exactamente una mitigación: exporte primero, antes de importar, y conserve esa hoja de cálculo como copia de seguridad. Valide el formato con un lote pequeño antes de la primera importación grande.
Trampa tres: no hay deshacer. Con una copia de seguridad, vuelva a importarla. Sin una, reconstruya la configuración a mano. Revise la columna de ID fila por fila para que el archivo contenga solo lo que pretende crear o actualizar.
9. Copias de seguridad: tres capas que no se sustituyen entre sí
| Capa |
Ubicación |
Método |
| Configuración y registro de instalación |
Directorio de instalación bajo /opt |
Copia de seguridad a nivel de archivo |
| Base de datos |
Volumen del contenedor PostgreSQL |
Instantánea de volumen o volcado lógico |
| Archivos de objetos |
Volumen con nombre de Docker minio_data |
Copia de seguridad a nivel de volumen |
Hacer copia de seguridad de /opt por sí solo no sustituye a los datos de objetos. Un reinicio del contenedor conserva los buckets y objetos existentes; un fallo del disco del host no.
El artículo 15 de la Circular 166 exige copia de seguridad para recuperación ante desastres y pruebas periódicas de recuperación. Fíjese en la segunda mitad: una copia de seguridad que nunca se ha restaurado es una hipótesis. Una forma de ejercitar toda la cadena durante la aceptación es generar y descargar un informe:
sudo docker compose -f exec -T minio /thinklink-minio check-ready
Ese comando comprueba si la inicialización integrada de la imagen se completó; combínelo con una comprobación del estado del contenedor.
10. Códigos de error que conviene reconocer
El manual enumera el conjunto completo. Estos son los que aparecen durante el despliegue:
| Mensaje |
Significado y gestión |
OFFLINE_OUTPUT_EXISTS |
El directorio de descarga ya existe: elija uno que no exista; no sobrescriba el paquete antiguo |
SCRIPT_FILE_REQUIRED |
El modo de descarga debe ejecutarse desde un archivo de script local, no desde curl \| bash |
ARTIFACT_DOWNLOAD_FAILED |
Compruebe la red y el espacio en disco, vuelva a descargar el conjunto completo |
DOWNLOAD_REFRESH_INVALID |
La versión o los artefactos cambiaron durante la actualización: vuelva a descargar el paquete completo |
OFFLINE_BUNDLE_INVALID / OFFLINE_CHECKSUM_FAILED |
Vuelva a transferir el directorio completo; no edite el manifiesto para omitir |
OFFLINE_DOCKER_REQUIRED |
Instale las dependencias sin conexión, inicie Docker, verifique Compose V2 |
OFFLINE_EXISTING_INSTALL |
Hay una instalación o datos existentes: prepare primero un plan de copia de seguridad y actualización |
PORT_IN_USE / ALTERNATE_PORT_IN_USE |
Resuelva el conflicto, disponga un puerto utilizable, reintente |
OFFLINE_IMAGES_MISSING |
Compose y las imágenes están desincronizados: proporcione un paquete completo que coincida |
HEALTH_CHECK_FAILED |
Compruebe el estado del contenedor y los registros; conserve los datos de instalación mientras investiga |
Dos para el trabajo diario:
sudo docker compose -f ps
sudo docker compose -f logs
Revise los registros en busca de cadenas de conexión y credenciales antes de compartirlos externamente: un recordatorio que el manual hace por sí mismo.
11. Lista de verificación de aceptación
En el orden de este artículo, un despliegue de TKE listo para entregar:
| # |
Elemento |
Criterio de aprobación |
| 1 |
uname -m imprime x86_64 |
Non-x64 falla directamente |
| 2 |
CPU ≥ 2 núcleos, RAM ≥ 4 GiB, /opt ≥ 20 GiB |
Producción: 8 núcleos / 16 GB / 1 TB |
| 3 |
Comprobación previa de puertos en 80/8080, 9000, 9001, 1700, 1883 |
Un conflicto 9000/9001 aborta la instalación |
| 4 |
Los siete contenedores en ejecución |
docker compose ps |
| 5 |
Bucket privado de MinIO listo, acceso anónimo rechazado |
check-ready más un intento de acceso anónimo |
| 6 |
Web/API en HTTPS 443, consola de EMQX en 18084 |
tkl-tls 2.0.0 |
| 7 |
MQTT de dispositivos en 8883 (donde se requiera) |
Configurado y verificado por separado en EMQX |
| 8 |
MinIO 9000/9001 accesible solo desde redes de confianza |
Reglas de firewall |
| 9 |
Ningún perfil de dispositivo habilitado tanto en la nube como en TKE |
Verificación cruzada del inventario de perfiles |
| 10 |
Exportación realizada antes de la importación |
Archivo de copia de seguridad conservado |
| 11 |
El alcance de la copia de seguridad cubre el minio_data volumen |
Revisión del script de copia de seguridad |
| 12 |
Una prueba de recuperación completada |
Registro del simulacro de recuperación |
| 13 |
Contraseñas predeterminadas cambiadas (ThinkLink / EMQX / MinIO) |
Configuraciones del cliente de negocio actualizadas para coincidir |
| 14 |
Paquete completo sin conexión + release.json + SHA256SUMS retenido |
Trazabilidad de versiones |
El «acceso anónimo al bucket privado rechazado» del punto 5 quedó cubierto explícitamente en el registro de aceptación 2026-09-11 del propio proveedor, y también debe figurar en su lista de verificación. Un bucket privado que es legible de forma anónima equivale a cada archivo de informe que está en un recurso compartido interno.
12. Cierre
«Los datos no deben salir de la planta» es un requisito sobre la ubicación del almacenamiento, y desencadena tres consecuencias: usted compra la máquina, cierra los canales de transmisión y ejecuta las copias de seguridad. Solo la primera de ellas es un problema de adquisición.
Dos puntos que este artículo ha defendido repetidamente:
Lo local no es lo mismo que conforme. El artículo 17 de la Circular 166 exige canales o protocolos de transmisión seguros para los datos importantes. Una instalación predeterminada de TKE ejecuta MQTT en texto claro en 1883 y HTTP en 80. tkl-tls no es un paso de endurecimiento opcional; es lo que cumple esa cláusula.
Confirme la restricción x64 antes de la orden de compra. La documentación del propio proveedor contiene dos afirmaciones contradictorias sobre los requisitos de hardware de TKE, y no coinciden en si ARM funciona. Tomando el manual de despliegue como autoritativo: no funciona. Si un mandato de localización ya ha optado por Phytium o Kunpeng, plantéelo en la fase de propuesta y no cuando uname -m imprime aarch64.
El valor de TKE es que agrupa el servidor de red, los modelos de dispositivos, la lógica de disparadores, las alarmas y el almacenamiento de objetos en un solo comando de Compose, a la vez que conserva una ruta de migración hacia y desde tanto la nube como la forma en la puerta de enlace. El precio es que ahora alguien es responsable de ello. Decidir quién, antes de comprar nada, importa más que la hoja de especificaciones.
Siguiente en la serie (número 24): los datos son locales; ahora deje que el resto del edificio los lea: integración de BACnet/IP y Modbus TCP en ThinkLink, desde el mapeo de campo hasta la puesta en marcha con YABE.
Fuentes
- Documentación de ThinkLink, Docker Deployment (TKE) — flujo de instalación actualizado 2026-09-11, notas de TLS y puertos actualizadas 2026-10-22: https://www.think-link.net/docs/zh/QuickStart/Deployment/ThinkLinkDocker.html
- Documentación de ThinkLink, ThinkLink (TKL) Introduction: https://www.think-link.net/docs/zh/QuickStart/ThinkLinkIntroduction.html
- Documentación de ThinkLink, Batch Data Management Guide: https://www.think-link.net/docs/zh/AN/BatchDataManagementGuide.html
- Documentación de ThinkLink, ThinkLink in Gateway (TKG): https://www.think-link.net/docs/zh/QuickStart/Deployment/ThinkLinkGateway.html
- MIIT, Interim Measures for Data Security Management in the Industry and Information Technology Sector, Circular de Seguridad de Red n.º 166, en vigor desde 2023-01-01
- Consejo de Estado, Network Data Security Regulations, Decreto n.º 790, en vigor desde 2025-01-01