Saltar al contenido principal

Ejecutando

Una vez que hayas establecido la base de datos de Horizon y hayas identificado la configuración de tiempo de ejecución de Horizon por host, estás listo para ejecutar Horizon.

Instalación en bare-metal

Ejecuta el binario stellar-horizon con los parámetros de entorno apropiados establecidos (o stellar-horizon-cmd serve si instalaste a través del gestor de paquetes, que importará automáticamente tu configuración desde /etc/default/stellar-horizon).

Instalación en contenedor

No ejecutas el binario de Horizon directamente, en su lugar, la imagen stellar/stellar-horizon tiene un entrypoint predefinido que comenzará a ejecutar Horizon al iniciar la imagen. El proceso de Horizon obtendrá todos los ajustes de configuración de las variables de entorno del contenedor.

Daemon de Docker

Usa docker run stellar/stellar-horizon:<tag_version> --env-file <env_filename>, y especifica cada bandera de configuración de Horizon identificada durante Configurando como una línea separada en <env_filename> de HORIZON_CONFIG_PARAM=value.

Kubernetes usando Helm Chart

Asegúrate de haber seguido el prerrequisito de instalar la herramienta Helm CLI y agregar el repositorio de gráficos de Stellar al cliente de Helm.

El proceso de Horizon requiere acceso a una base de datos Postgres 12. Primero, usa la herramienta común de CLI de Kubernetes kubectl desde tu estación de trabajo para crear un secreto de Kubernetes en el namespace previsto del clúster de Kubernetes que contendrá la URL de la base de datos de Horizon.

# copy your horizon DATABASE_URL into a secure file, no line breaks.
echo -n 'database_url_here' > my_creds.txt

# now generate the kubernetes secret from the file
kubectl create secret generic \
-n my-namepsace\
my-db-secret \
--from-file=DATABASE_URL=my_creds.txt

Ahora despliega Horizon en el clúster usando el Helm Chart:

helm install my-horizon stellar/horizon \
--namespace my-horizon-namespace-on-cluster \
--set ingest.persistence.enabled=true \
--set web.replicaCount=1 \
--set web.enabled=true \
--set ingest.enabled=true \
--set ingest.replicaCount=1 \
--set web.existingSecret=my-db-secret \
--set global.image.horizon.tag=2.26.1 \
--set global.network=testnet \
--set ingest.existingSecret=my-db-secret \
--set ingest.horizonConfig.captiveCoreUseDb=true \
--set ingest.resources.limits.cpu=1 \
--set ingest.resources.limits.memory=6Gi

Este ejemplo de uso de Helm Chart destaca algunos aspectos clave:

  • Usa el parámetro global.network=[testnet|pubnet], esto automatiza la generación de todos los parámetros de configuración de Horizon específicos para la red, como las URLs de archivo, la configuración de núcleo cautivo y otros parámetros mencionados en Configurando.
  • global.image.horizon.tag debe establecerse en uno de los tags de Docker Hub publicados en stellar/stellar-horizon
  • Habilita todos los roles en la instancia de despliegue: ingestión y API web (incluye la presentación de transacciones). Si eliges tener un despliegue multi-instancia con cada instancia realizando un solo rol de solo API web o ingestión, entonces harás dos instalaciones de Helm, una para cada rol: my-horizon-ingestion-installation y my-horizon-api-installation. Cada una de estas instalaciones de Helm establecerá ingest.enabled, web.enabled, ingest.replicaCount, web.replicaCount respectivamente para el rol que están realizando.
  • Para personalizar aún más, el mejor enfoque es descargar los valores.yaml de Helm Chart de Horizon, actualizar los ajustes en tu copia local de values.yaml, y pasar a Helm install, en lugar de tener muchos --set individuales en Helm install:
helm install myhorizon stellar/horizon \
--namespace my-horizon-namespace-on-cluster \
--values values.yaml
  • Personalizando parámetros de configuración de red, si deseas conectarte a una red diferente de las presets de testnet o pubnet, entonces no usarás global.network, en su lugar, usa una copia local de values.yaml y establece ingest.coreConfig, y consulta _core-config.tpl para ejemplos de todos los pares clave/valor que incluir.

  • Límites mínimos de recursos, verifica si los valores predeterminados de LimitRange están definidos en el namespace de destino en Kubernetes para el despliegue, si es así, asegúrate de que los valores predeterminados proporcionen al menos límites mínimos de recursos de 6Gi de memoria y 1 cpu. De lo contrario, define los límites explícitamente en la instalación de helm a través de ingest.resources.limits.* mostrados en el ejemplo, para asegurar que los pods desplegados tengan recursos adecuados.


Una vez que el proceso de Horizon comience, emitirá registros a la salida estándar. Al ejecutarse, debes ver una salida similar a:

INFO[...] Starting horizon on :8000                     pid=29013

Ten en cuenta que los números pueden ser naturalmente diferentes para tu instalación. La línea de registro anterior anuncia que Horizon está listo para atender solicitudes de clientes.

A continuación, puedes confirmar que Horizon está respondiendo correctamente cargando el recurso raíz. En el ejemplo anterior, esa URL sería http://127.0.0.1:8000/, y simplemente ejecutando curl http://127.0.0.1:8000/ te mostraría que el recurso raíz carga correctamente:

{
"_links": {
"account": {
"href": "http://127.0.0.1:8000/accounts/{account_id}",
"templated": true
},
"accounts": {
"href": "http://127.0.0.1:8000/accounts{?signer,sponsor,asset,cursor,limit,order}",
"templated": true
}
}
// etc.
}

Consulta Monitoreo para más detalles sobre el registro y las métricas en tiempo de ejecución de Horizon disponibles.

¿Te fue útil esta página?