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 lo instalaste a través del administrador 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 de stellar/stellar-horizon tiene un punto de entrada predefinido que comenzará a ejecutar Horizon al iniciar la imagen. El proceso de Horizon obtendrá todas las configuraciones de configuración de las variables de entorno del contenedor. El proceso de Horizon obtendrá todos los ajustes de configuración de las variables de entorno del contenedor.
Demonio 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 Configuración como una línea separada en <env_filename>
de HORIZON_CONFIG_PARAM=value
.
Kubernetes usando Helm Chart
Asegúrate de haber seguido el pre-requisito de instalar la herramienta CLI de Helm y haber agregado 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 CLI común de Kubernetes kubectl
desde tu estación de trabajo para crear un secreto de Kubernetes en el espacio de nombre destinado del clúster de Kubernetes que contendrá la URL de la base de datos de Horizon. Primero usa la herramienta CLI común de Kubernetes kubectl
desde tu estación de trabajo para crear un secreto de Kubernetes en el espacio de nombre destinado del clúster de Kubernetes que contendrá la URL de la base de datos de Horizon.
- bash
# 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:
- bash
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 URL de archivo, la configuración de núcleo cautivo y otros parámetros mencionados en Configuración. 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 decides tener un despliegue de múltiples instancias, con cada instancia realizando un único rol de solo API web o ingestión, entonces harás dos instalaciones de Helm, una para cada rol:
my-horizon-ingestion-installation
ymy-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. Si eliges tener un despliegue de múltiples instancias con cada instancia desempeñando un único rol de solo API web o ingestión, entonces realizarás dos instalaciones de Helm, una para cada rol:my-horizon-ingestion-installation
ymy-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 desempeñando. - Para personalizar aún más, el mejor enfoque es descargar el Horizon Helm Chart values.yaml, actualizar los ajustes en tu copia local de values.yaml y pasarlo a la instalación de Helm, en lugar de tener muchos
--set
individuales en la instalación de Helm:
- bash
helm install myhorizon stellar/horizon \
--namespace my-horizon-namespace-on-cluster \
--values values.yaml
-
Personalizando los parámetros de configuración de la red, si deseas conectarte a una red diferente a las predefinidas de
testnet
opubnet
, entonces no usarásglobal.network
, en su lugar, usa la copia local de values.yaml y estableceingest.coreConfig
, y consulta _core-config.tpl para un ejemplo de todos los pares clave/valor a incluir. -
Límites mínimos de recursos, verifica si se han definido los valores predeterminados de
LimitRange
en el espacio de nombre objetivo en Kubernetes para el despliegue, si es así, asegúrate de que los valores predeterminados proporcionen al menos límites m ínimos de recursos de6Gi
de memoria y1
cpu. De lo contrario, define los límites explícitamente en la instalación de helm a través deingest.resources.limits.*
mostrado 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. Cuando se ejecute, deberías ver una salida similar a:
- Ejemplo
INFO[...] Starting horizon on :8000 pid=29013
Ten en cuenta que los números pueden ser diferentes para tu instalación. La línea de registro anterior anuncia que Horizon está listo para atender las solicitudes de los 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 se carga correctamente:
- JSON
{
"_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 de tiempo de ejecución de Horizon disponibles.