Harmony
Support ForumGithubTelegramDiscord
  • Welcome
  • 🎶General
    • Introduction
      • What is Harmony?‌
      • Roadmap
      • Strategy & Architecture
      • Study Materials
      • FAQ
    • Technology
      • Key Features
      • Randomness
      • Sharding
      • Consensus
      • Effective Proof-of-Stake
      • Tokenomics
      • Transactions
    • LayerZero Bridge
      • Important Notice
      • Bridge tutorial
      • FAQ
        • What token will I get after the bridge
        • How to find a bridged token address
    • Ecosystem
      • Wallets
        • 1Wallet
        • Gnosis Safe
        • Hardware Wallets
          • Trezor
          • Ledger Nano
            • Ledger with Metamask
            • Download & Setup
            • Ledger with HMY CLI
            • Ledger with Staking Dashboard
              • Sign In With Ledger
              • Sending transactions via Ledger
              • Staking Transactions via Ledger
          • Safepal
            • Download & setup
            • Create/import account
            • Send transaction
        • Browser Extension Wallets
          • Metamask
            • Installing MetaMask
            • Adding Harmony
            • Create a New Account
            • Sending & Receiving
            • Adding Custom Harmony Tokens
            • Import an Account
          • Math Wallet
            • Download & Setup
            • Create/Import/Export Wallet
            • Sending Transactions
            • Staking
            • Collecting Rewards
            • Undelegating
          • Harmony Chrome Extension Wallet
        • Desktop Wallets
          • Guarda Wallet
          • Staking4All Wallet
        • Mobile Wallets
          • Metamask Wallet
          • Blits Wallet
          • Cobo Wallet
          • Frontier Wallet
          • Guarda Wallet
          • Infinity Wallet
          • ONTO Wallet
          • Sef Wallet
          • Trust Wallet
          • Trustee Wallet
        • Web Wallets
          • Guarda Wallet
        • HMY CLI (Harmony Command Line Interface)
          • Download & Setup
          • Create or Import Wallet
          • Sending Transactions
          • Staking Transactions
          • Querying Balances
          • Querying the Blockchain
          • List of Transaction Error Messages
          • Cookbook
          • Other CLI References
      • DApps
        • User Guide
        • DeFi
          • Sushi
          • Onsen
        • CLI 1Wallet User Guide
        • Media
          • Timeless
        • FAQ
        • NFTs
      • Partners
        • Exchanges
        • Fiat Gateways
        • DeFi Protocols
      • Integrations
      • Cross-Border Finance
      • DAOs
        • Components & Tools
          • Snapshot
        • Community DAO
        • Validator DAO
        • Developer DAO
    • Community
  • 🏗️Developers
    • Getting Started
      • Network & Faucets
      • List of RPC Providers
      • Remix IDE
      • Dev Environment Setup
      • Ethereum Compatibility
    • Deploying on Harmony
      • Using Remix
        • Ethereum Remix
        • Harmony Remix
      • Using Truffle
      • Using Hardhat
      • Using Web3
      • Using Harmony-JS
        • Setup
        • Compile & Deploy
        • Demo: Deploying an Ethereum Smart Contract on Harmony
      • Deploy HRC20
      • Smart Contract Verification
    • SDK
      • Web3.js
        • Using Web3.js to Send Transactions on Harmony
        • Find the last transaction
      • JavaScript SDK
      • Go CLI
      • Java SDK
      • Python SDK
      • Harmony Ethers.js Wrapper
    • API
      • Methods
        • Account Methods
          • hmy_getBalanceByBlockNumber
          • hmy_getTransactionCount
          • hmy_getBalance
        • Filter Methods
          • hmy_getFilterLogs
          • hmy_newFilter
          • hmy_newPendingTransactionFilter
          • hmy_newBlockFilter
          • hmy_getFilterChanges
          • hmy_getLogs
        • Transaction Related Methods
          • hmy_getStakingTransactionByBlockHashAndIndex
          • hmy_getStakingTransactionByBlockNumberAndIndex
          • hmy_getStakingTransactionByHash
          • hmy_getCurrentTransactionErrorSink
          • hmy_getPendingCrossLinks
          • hmy_getPendingCXReceipts
          • hmy_getCXReceiptByHash
          • hmy_pendingTransactions
          • hmy_sendRawStakingTransaction
          • hmy_getTransactionsHistory
          • hmy_sendRawTransaction
          • hmy_getTransactionReceipt
          • hmy_getBlockTransactionCountByHash
          • hmy_getBlockTransactionCountByNumber
          • hmy_getTransactionByHash
          • hmy_getTransactionByBlockNumberAndIndex
          • hmy_getTransactionByBlockHashAndIndex
          • hmy_getBlockByNumber
          • hmy_getBlockByHash
          • hmy_getBlocks
        • Contract Related Methods
          • hmy_estimateGas
          • hmy_getStorageAt
          • hmy_call
          • hmy_getCode
        • Protocol Related Methods
          • hmy_isLastBlock
          • hmy_epochLastBlock
          • hmy_latestHeader
          • hmy_getShardingStructure
          • hmy_blockNumber
          • hmy_syncing
          • hmy_gasPrice
          • net_peerCount
          • hmy_getEpoch
          • hmy_getLeader
        • Staking Related Methods
          • hmy_getCirculatingSupply
          • hmy_getTotalSupply
          • hmy_getStakingNetworkInfo
          • hmy_getAllValidatorInformation
          • hmy_getAllValidatorInformationByBlockNumber
          • hmy_getCurrentUtilityMetrics
          • hmy_getDelegationsByValidator
          • hmy_getDelegationsByDelegatorAndValidator
          • hmy_getDelegationsByDelegator
          • hmy_getValidatorMetrics
          • hmy_getMedianRawStakeSnapshot
          • hmy_getElectedValidatorAddresses
          • hmy_getAllValidatorAddresses
          • hmy_getCurrentStakingErrorSink
          • hmy_getValidatorInformation
          • hmy_getValidators
          • hmy_getSignedBlocks
          • hmy_isBlockSigner
          • hmy_getBlockSigners
        • Tracing Methods
          • trace_block
          • trace_transaction
      • Sample Code
    • Tools
      • Harmony VRF
      • The Graph
      • Envio
      • Ganache
        • Harmony Ganache
      • Harmony-React
      • Oracles
        • Band Protocol
      • Smart Contract Verification
    • Tutorials
      • Deploying HRC20
      • Deploying HRC721/NFT
      • The Graph - Subgraphs
        • Building & Deploying Subgraph (local node)
      • Using Band Oracle
      • Using Crosschain API
        • Scripts
        • Testing
        • Webserver
      • Using Web3.py & Pyhmy
      • Using IPFS & Filecoin
        • Using IPFS
        • Using NFT.storage
      • Indexing HRC20 with Envio
      • Building a Simple Metaverse Contract
      • Building a Simple Bridge with Ethereum
      • Staking for Multisig
    • DApp Examples
      • DApp Samples
      • Games
        • Harmony Puzzle
      • Cross-Chain
      • DeFi
      • Hackathons
        • DevPost
        • Hack the Horizon
      • Others
    • Wallets
      • Metamask
        • Interacting With Metamask
        • Using Metamask with Harmony Smart Contracts
        • Add or Switch to Harmony chain on Metamask
      • Harmony Chrome Extension Wallet
      • Math Wallet
      • WalletConnect
    • Harmony Stack and Projects
  • 🌏Network
    • Governance
      • Network Governance
        • Voting via Governance App
        • Voting via HMY CLI
      • HRC-20 Governance
      • FAQ
    • Validators
      • Terms & Concepts
        • Validator, BLS key, Instance
          • Shard Assignment
        • Slots Bidding and Election
        • Effective Proof-of-Stake
        • Block Reward
        • Epoch Transition
        • Slashing
        • Undelegation
      • Server Setup
        • Requirements
        • Cloud Guides
          • Digital Ocean
          • Vultr
          • AWS
          • Google Cloud
        • Raspberry Pi Guide
      • Node Setup
        • 1. HMY CLI Download
        • 2. Setting up BLS Keys
        • 3. Syncing DB
        • 4. Installing & Updating
          • Installing A Node
            • Using Node Binary
            • (Deprecated) Using AutoNode
              • Install & Run
              • Update
              • Monitor
              • BLS Key Management
              • Collect Rewards
              • Maintenance
              • Troubleshoot
              • Extra
            • (deprecated) Using Node.sh
          • Upgrading A Node
            • Using Node Binary
            • Using AutoNode (deprecated)
            • Using Node.sh (deprecated)
          • Checking A Node
      • Creating A Validator
      • Managing A Validator
        • Checking Validator Information
        • Changing Validator Information
        • Delegating To A Validator
        • Undelegating From A Validator
        • Check Your Delegations
        • Collecting Rewards
        • Adding A Validator Logo
      • Staking Dashboard Basics
      • Validator Information Terms
      • Validator Security Tips
      • Slashing and Uptime
      • Monitoring
        • Node Sync
        • Prometheus & Grafana
        • Network Status
      • Troubleshooting
        • Why am i not Elected?
        • Frequently Asked Questions (FAQ)
      • Tools
        • Telegram Bots
        • Dashboards
        • Reward Calculators
        • Text User Interface (TUI)
        • HMY Bidder
        • Mobile Apps
          • One Validator Dashboard
          • Termux
    • Delegators
      • Introduction
      • Staking
        • Via Browser
          • Staking Dashboard
          • Staking Transactions
          • Sending Transactions
        • Via Mobile
        • FAQ
      • Redelegation
      • Informational Videos
Powered by GitBook
On this page
  • 1. Download Node Binary
  • Option 1: Setup Using Config File (recommended)
  • Option 2: Setup Using Flag Parsing
  • Option 3: Setup Using Flag Parsing and a Config file combined
  • Non-Validating/Explorer Nodes
  • 7. Start Systemd Service
  • 2. Setup Systemd

Was this helpful?

Export as PDF
  1. Network
  2. Validators
  3. Node Setup
  4. 4. Installing & Updating
  5. Installing A Node

Using Node Binary

PreviousInstalling A NodeNext(Deprecated) Using AutoNode

Last updated 6 months ago

Was this helpful?

As per instructions on the , the host needs to open up port 9000 for blockchain consensus messages and port 6000 for blockchain state syncing. Other ports are NOT necessary for syncing and should NOT be opened to the internet if you are staking only.

  • 9000 port is used for blockchain consensus messages (base port)

  • 6000 port is used for blockchain state syncing (base port - 3000)

  • 9500 port is used for SDK RPC service (base port + 500)

  • 9800 port is used for Websocket service (base port + 800)

The 9500, 9800 ports are only listened by localhost 127.0.0.1 by default.

1. Download Node Binary

Before we proceed to next steps we need to download the node binary first:

curl -LO https://harmony.one/binary && mv binary harmony && chmod +x harmony
curl -LO https://harmony.one/binary && mv binary harmony && chmod +x harmony
curl -LO https://harmony.one/binary-arm64 && mv binary-arm64 harmony && chmod +x harmony

Check the node binary version that was downloaded:

./harmony -V

The below explain the different method the node binary can be used. Option 1 is what being used when setting up systemd ().

If you choose another method make sure to use the correct command line

Option 1: Setup Using Config File (recommended)

All the start options can be persisted and loaded from a single config file. To start a node, the following steps are also available**:**

  1. Dump the default config.

  2. Customize the config file.

  3. Run harmony node with the config file.

Dump the Default Config File

./harmony config dump harmony.conf
./harmony config dump --network testnet harmony.conf

A file harmony.conf is created and the default node options are set in the file in TOML formatting. Here is an example:

Version = "2.5.7"

[BLSKeys]
  KMSConfigFile = ""
  KMSConfigSrcType = "shared"
  KMSEnabled = false
  KeyDir = "./.hmy/blskeys"
  KeyFiles = []
  MaxKeys = 10
  PassEnabled = true
  PassFile = ""
  PassSrcType = "auto"
  SavePassphrase = false

[DNSSync]
  Client = true
  LegacySyncing = false
  Port = 6000
  Server = true
  ServerPort = 6000
  Zone = "t.hmny.io"

[General]
  DataDir = "./"
  EnablePruneBeaconChain = false
  IsArchival = false
  IsBackup = false
  IsBeaconArchival = false
  IsOffline = false
  NoStaking = false
  NodeType = "validator"
  RunElasticMode = false
  ShardID = -1
  TraceEnable = false

[HTTP]
  AuthPort = 9501
  Enabled = true
  IP = "127.0.0.1"
  Port = 9500
  RosettaEnabled = false
  RosettaPort = 9700

[Log]
  Console = false
  FileName = "harmony.log"
  Folder = "./latest"
  RotateCount = 0
  RotateMaxAge = 0
  RotateSize = 100
  Verbosity = 3

  [Log.VerbosePrints]
    Config = true

[Network]
  BootNodes = ["/dnsaddr/bootstrap.t.hmny.io"]
  NetworkType = "mainnet"

[P2P]
  DisablePrivateIPScan = false
  DiscConcurrency = 0
  IP = "0.0.0.0"
  KeyFile = "./.hmykey"
  MaxConnsPerIP = 10
  MaxPeers = 0
  Port = 9000

[Pprof]
  Enabled = false
  Folder = "./profiles"
  ListenAddr = "127.0.0.1:6060"
  ProfileDebugValues = [0]
  ProfileIntervals = [600]
  ProfileNames = []

[RPCOpt]
  DebugEnabled = false
  EthRPCsEnabled = true
  LegacyRPCsEnabled = true
  RateLimterEnabled = true
  RequestsPerSecond = 1000
  RpcFilterFile = "./.hmy/rpc_filter.txt"
  StakingRPCsEnabled = true

[ShardData]
  CacheSize = 512
  CacheTime = 10
  DiskCount = 8
  EnableShardData = false
  ShardCount = 4

[Sync]
  Concurrency = 6
  DiscBatch = 8
  DiscHardLowCap = 6
  DiscHighCap = 128
  DiscSoftLowCap = 8
  Downloader = false
  Enabled = false
  InitStreams = 8
  MinPeers = 6

[TxPool]
  AccountSlots = 16
  AllowedTxsFile = "./.hmy/allowedtxs.txt"
  BlacklistFile = "./.hmy/blacklist.txt"
  GlobalSlots = 5120
  LocalAccountsFile = "./.hmy/locals.txt"
  RosettaFixFile = ""

[WS]
  AuthPort = 9801
  Enabled = true
  IP = "127.0.0.1"
  Port = 9800

The content of the config file can be modified for custom node start up command.

For example, to open the public HTTP RPCs, change the field IP under [HTTP] tag to "0.0.0.0":

[HTTP]
  Enabled = true
  IP = "0.0.0.0"
  Port = 9500
  RosettaEnabled = false
  RosettaPort = 9700

To run harmony internal nodes (or Foundational Node FN), under legacy mode instead of staking mode, change the field NoStaking under [General] tag to true:

[General]
  DataDir = "./"
  IsArchival = false
  IsBeaconArchival = false
  IsOffline = false
  NoStaking = true
  NodeType = "validator"
  ShardID = -1

To enable streamsync, modify the below two sections (Experimental. use at your own risk)

[DNSSync]
  Client = false
  LegacySyncing = false
  Port = 6000
  Server = true
  ServerPort = 6000
  Zone = "b.hmny.io"
  
[Sync]
  Concurrency = 4
  DiscBatch = 8
  DiscHardLowCap = 4
  DiscHighCap = 1024
  DiscSoftLowCap = 4
  Downloader = true
  InitStreams = 4
  MinPeers = 4

Stream Sync is the new harmony P2P syncing method allowing to get rid of the previous sync via DNS causing issue when the DNS

Start the node with Config File

Harmony node binary is able to start with options provided by the config file:

./harmony -c harmony.conf

The values stored in the config file will be read and parsed to harmony as node start options.

Option 2: Setup Using Flag Parsing

You can run your node binary using flag parsing:

./harmony
./harmony --network testnet

A full list of active flags as well as examples can be accessed through running the binary with --help option:

./harmony --help

Output:

Examples usage:

# start a validator node with default bls folder (default bls key files in ./.hmy/blskeys)
    ./harmony

# start a validator node with customized bls key folder
    ./harmony --bls.dir [bls_folder]

# start a validator node with open RPC endpoints and customized ports
    ./harmony --http.ip=0.0.0.0 --http.port=[http_port] --ws.ip=0.0.0.0 --ws.port=[ws_port]

# start an explorer node
    ./harmony --run=explorer --run.shard=[shard_id]

# start a harmony internal node on testnet
    ./harmony --run.legacy --network testnet

Usage:
  harmony [flags]
  harmony [command]

Available Commands:
  config      dump or update config
  dumpdb      dump a snapshot db.
  help        Help about any command
  version     print version of the harmony binary

Flags:
      --bls.dir string                     directory for BLS keys (default "./.hmy/blskeys")
      --bls.keys strings                   a list of BLS key files (separated by ,)
      --bls.kms                            enable BLS key decryption with AWS KMS service
      --bls.kms.config string              json config file for KMS service (region and credentials)
      --bls.kms.src string                 the AWS config source (region and credentials) for KMS service (shared, prompt, file) (default "shared")
      --bls.pass                           enable BLS key decryption with passphrase (default true)
      --bls.pass.file string               the pass file used for BLS decryption. If specified, this pass file will be used for all BLS keys
      --bls.pass.save                      after input the BLS passphrase from console, whether to persist the input passphrases in .pass file
      --bls.pass.src string                source for BLS passphrase (auto, file, prompt) (default "auto")
      --bootnodes strings                  a list of bootnode multiaddress (delimited by ,)
  -c, --config string                      load node config from the config toml file.
      --consensus.aggregate-sig            (multi-key) aggregate bls signatures before sending (default true)
      --datadir string                     directory of chain database (default "./")
      --dns.port int                       dns sync remote server port (default 6000)
      --dns.server-port int                dns sync local server port (default 6000)
      --dns.zone string                    use customized peers from the zone for state syncing
  -h, --help                               help for harmony
      --http                               enable HTTP / RPC requests (default true)
      --http.auth-port int                 rpc port to listen for auth HTTP requests (default 9501)
      --http.ip string                     ip address to listen for RPC calls. Use 0.0.0.0 for public endpoint (default "127.0.0.1")
      --http.port int                      rpc port to listen for HTTP requests (default 9500)
      --http.rosetta                       enable HTTP / Rosetta requests
      --http.rosetta.port int              rosetta port to listen for HTTP requests (default 9700)
      --log.console                        output log to console only
      --log.dir string                     directory path to put rotation logs (default "./latest")
      --log.max-size int                   rotation log size in megabytes (default 100)
      --log.name string                    log file name (e.g. harmony.log) (default "harmony.log")
      --log.rotate-count int               maximum number of old log files to retain
      --log.rotate-max-age int             maximum number of days to retain old log files
  -v, --log.verb int                       logging verbosity: 0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default 3)
      --log.verbose-prints strings         debugging feature. to print verbose internal objects as JSON in log file. available internal objects: config (default [config])
      --metrics                            flag required to enable the eth metrics
      --metrics.expensive                  flag required to enable the expensive eth metrics
  -n, --network string                     network to join (mainnet, testnet, pangaea, localnet, partner, stressnet, devnet) (default "mainnet")
      --p2p.disc.concurrency int           the pubsub's DHT discovery concurrency num (default with raw libp2p dht option)
      --p2p.ip string                      ip to listen for p2p protocols (default "0.0.0.0")
      --p2p.keyfile string                 the p2p key file of the harmony node (default "./.hmykey")
      --p2p.no-private-ip-scan             disable scanning of private ip4/6 addresses by DHT
      --p2p.port int                       port to listen for p2p protocols (default 9000)
      --p2p.security.max-conn-per-ip int   maximum number of connections allowed per remote node, 0 means no limit (default 10)
      --p2p.security.max-peers int         maximum number of peers allowed, 0 means no limit (default 10)
      --pprof                              enable pprof profiling
      --pprof.addr string                  listen address for pprof (default "127.0.0.1:6060")
      --pprof.profile.names strings        a list of pprof profile names (separated by ,) e.g. cpu,heap,goroutine
      --prometheus                         enable HTTP / Prometheus requests (default true)
      --prometheus.ip string               ip address to listen for prometheus service (default "0.0.0.0")
      --prometheus.port int                prometheus port to listen for HTTP requests (default 9900)
      --prometheus.push                    enable prometheus pushgateway
      --prometheus.pushgateway string      prometheus pushgateway URL (default "https://gateway.harmony.one")
      --rpc.ratelimit int                  the number of requests per second for RPCs (default 1000)
      --rpc.ratelimiter                    enable rate limiter for RPCs (default true)
      --run string                         run node type (validator, explorer) (default "validator")
      --run.archive                        run shard chain in archive mode
      --run.beacon-archive                 run beacon chain in archive mode
      --run.legacy                         whether to run node in legacy mode
      --run.offline                        run node in offline mode
      --run.shard int                      run node on the given shard ID (-1 automatically configured by BLS keys) (default -1)
      --sharddata.cache_size int           local cache storage size (MB) (default 512)
      --sharddata.cache_time int           local cache save time (minute) (default 10)
      --sharddata.disk_count int           the count of disks you want to storage block data (default 8)
      --sharddata.enable                   whether use multi-database mode of levelDB
      --sharddata.shard_count int          the count of shards you want to split in each disk (default 4)
      --sync                               Enable the stream sync protocol (experimental feature)
      --tracing                            indicates if full transaction tracing should be enabled
      --txpool.accountslots int            number of executable transaction slots guaranteed per account (default 16)
      --txpool.allowedtxs string           file of allowed transactions (default "./.hmy/allowedtxs.txt")
      --txpool.blacklist string            file of blacklisted wallet addresses (default "./.hmy/blacklist.txt")
      --txpool.globalslots int             maximum global number of non-executable transactions in the pool (default 5120)
      --txpool.locals string               file of local wallet addresses (default "./.hmy/locals.txt")
      --txpool.rosettafixfile string       file of rosetta fix file
  -V, --version                            display version info
      --ws                                 enable websocket endpoint (default true)
      --ws.auth-port int                   port for websocket auth endpoint (default 9801)
      --ws.ip string                       ip endpoint for websocket. Use 0.0.0.0 for public endpoint (default "127.0.0.1")
      --ws.port int                        port for websocket endpoint (default 9800)

Use "harmony [command] --help" for more information about a command.

Option 3: Setup Using Flag Parsing and a Config file combined

If both config file and flag is provided, the node option stored in config file will be override by the values given in flag.

For example, In config file harmony.conf, HTTP server is enabled, and is open to public:

[HTTP]
  Enabled = true
  IP = "0.0.0.0"
  Port = 9500
  RosettaEnabled = false
  RosettaPort = 9700

And a flag is also provided during the node start command to disable the HTTP server:

./harmony -c harmony.conf --http=false

In this case, the command line flags will override the settings in the config file and thus the HTTP server is disabled.

> curl localhost:9500
curl: (7) Failed to connect to localhost port 9500: Connection refused

The above steps would have you started the node, please CTRL+C, so you can continue with step 2.

Non-Validating/Explorer Nodes

A Non-validating Node is a node that does not join the consensus.

Keep in mind that the storage space used increases around ~50+ GB per month on s0 due to staking transaction being stored. Other shard should take around 25GB per month. Please plan your storage space accordingly.

The following steps assume the node is connected to mainnet on shard 0, which is required for all exchanges.

If you are using the config file, which is the recommended way to configure your node, change the settings to the ones below:

 [General]
  DataDir = "./"
  IsArchival = true
  IsBeaconArchival = false
  IsOffline = false
  NoStaking = true
  NodeType = "explorer"
  ShardID = 0

NoStaking = true will verify if the BLS keys in your .hmy/blskeys folder are part of the original Foundational Node (FN) keys. For explorer, you will need to add in the folder dummy BLS/pass files and remove all others

# remove all keys, save it before if necessary
rm -f .hmy/blskeys/*
# create dummy files
touch .hmy/blskeys/bls.key
touch .hmy/blskeys/bls.pass

IsBeaconArchival flag is applicable to explorer node only. For shard 1/2/3 the beacon shard 0 doesn't need to be in archival mode. So to save space, the recommendation is to set to false. For shard 0 explorer node, IsArchival flag will determine if the database is in archival mode or not.

DataDir (or --db_dir below for cli flag) is the folder where the blockchain data will be store (ie location of harmony_db_0)

Change harmony.conf file and update the RPC Rate Limit to 50000:

[RPCOpt]
  RequestsPerSecond = 50000

7. Start Systemd Service

Alternatively, you can also run it using flag parsing:

./harmony --run=explorer --run.archive --run.shard=0 --db_dir=./

2. Setup Systemd

On this example, we will be installing the harmony daemon for user harmony on its home directory. Daemon will be configured with sudobut it will run with the harmonyuser at the end.

Create the harmony.service file:

sudo vi /etc/systemd/system/harmony.service

Add the content below to the file and save it. Change User to the local user you will be running the daemon and also WorkingDirectory to the home directory where you downloaded the harmony binary file previously. Parameter ExecStart needs to point to this same directory. On the example below we will be running the harmony binary using the harmony.conf file.

[Unit]
Description=Harmony daemon
After=network-online.target

[Service]
Type=simple
Restart=always
RestartSec=1
User=harmony
WorkingDirectory=/home/harmony
ExecStart=/home/harmony/harmony -c harmony.conf
SyslogIdentifier=harmony
StartLimitInterval=0
LimitNOFILE=65536
LimitNPROC=65536

[Install]
WantedBy=multi-user.target

Give the necessary permissions to run the daemon service, enable it and start it:

sudo chmod 755 /etc/systemd/system/harmony.service
sudo systemctl enable harmony.service
sudo service harmony start

If you want to check the status of the daemon you can use:

sudo service harmony status

To restart, or stop the service daemon you can run:

sudo service harmony restart
sudo service harmony stop

Check for Explorer Node requirements.

Check for instructions on how to sync your node in archival mode.

To check your node follow instructions on .

🌏
cloud guides
at step 2
Checking A Node
here
here