Loading...

General intro

This guide helps you set up a Celestia node - a machine that syncs the entire blockchain, allowing you to interact with the network or become a validator in the future.


Install Required Packages

These tools are essential for downloading, compiling, and running your node. Theyโ€™re standard packages used in almost every node setup.
sudo apt update && sudo apt upgrade -y
sudo apt install curl git wget htop tmux build-essential jq make lz4 gcc unzip -y

Install Go

Go (or Golang) is the programming language Berachain is built with. We need it to build the node binary celestia-appd from source code.
cd $HOME
sudo rm -rf /usr/local/go
wget https://go.dev/dl/go1.23.6.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.23.6.linux-amd64.tar.gz
echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> $HOME/.bash_profile
source ~/.bash_profile
[ ! -d ~/go/bin ] && mkdir -p ~/go/bin
go version
which go
rm -rf go1.23.6.linux-amd64.tar.gz

Download and build binary

Option 1: Build from source
cd $HOME
rm -rf N/A
git clone 
cd N/A
git checkout v3.7.0
make install
celestia-appd version
which celestia-appd
Option 2: Download Prebuilt Binary
wget -O celestia-appd https://snapshots.tienthuattoan.com/testnet/celestia/celestia-appd && mv celestia-appd $HOME/go/bin
celestia-appd version
which celestia-appd

Initialize the node

Set node configuration
celestia-appd config chain-id mocha-4
Initialize the node
celestia-appd init you-node-name --chain-id mocha-4

Download Genesis & Addrbook Files

genesis.json defines the starting state of the chain. addrbook.json helps your node discover peers.
curl -Ls https://snapshots.tienthuattoan.com/testnet/celestia/genesis.json > $HOME/.celestia-app/config/genesis.json
curl -Ls https://snapshots.tienthuattoan.com/testnet/celestia/addrbook.json > $HOME/.celestia-app/config/addrbook.json

Add seed

Seed nodes help your node find and connect to the network. Itโ€™s like a bootstrap contact list.

sed -i -e "s|^seeds *=.*|seeds = \"40a97a82f1bcbee283f06df8c2d46b8559fe666e@celestia-testnet-rpc.tienthuattoan.com:30656\"|" $HOME/.celestia-app/config/config.toml

Set minimum gas price

This tells your node to accept transactions with at least 0.002utia gas price. Required for block creation.
sed -i -e "s|^minimum-gas-prices *=.*|minimum-gas-prices = \"0.002utia\"|" $HOME/.celestia-app/config/app.toml

Pruning & Indexer Settings

Pruning saves disk space by deleting older data. Disabling indexer also reduces storage load.

sed -i \
  -e 's|^pruning *=.*|pruning = "custom"|' \
  -e 's|^pruning-keep-recent *=.*|pruning-keep-recent = "100"|' \
  -e 's|^pruning-keep-every *=.*|pruning-keep-every = "0"|' \
  -e 's|^pruning-interval *=.*|pruning-interval = "10"|' \
  $HOME/.celestia-app/config/app.toml

sed -i 's/indexer = "kv"/indexer = "null"/g' $HOME/.celestia-app/config/config.toml

Download Snapshot

Instead of syncing the chain from scratch (which can take days), a snapshot lets your node start from a recent blockchain state and catch up quickly.
wget -O celestia_latest.tar.lz4 https://snapshots.tienthuattoan.com/testnet/celestia/celestia_latest.tar.lz4 && lz4 -c -d celestia_latest.tar.lz4 | tar -x -C $HOME/.celestia-app

Create service

This lets your node run in the background like a service and auto-restart if it crashes.
sudo tee /etc/systemd/system/celestia-appd.service > /dev/null << EOF
[Unit]
Description=Celestia node service
After=network-online.target
[Service]
User=$USER
ExecStart=$(which celestia-appd) start
Restart=on-failure
RestartSec=5
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
Start the service and check the logs. This shows real-time logs to help you monitor your nodeโ€™s sync progress and status.
sudo systemctl daemon-reload
sudo systemctl enable celestia-appd
sudo systemctl restart celestia-appd
sudo journalctl -u celestia-appd -f

Check If Your Node Is Synced

Run the following command to watch your node's sync status in real time:
watch -n 1 "curl -s localhost:26657/status | jq"

You're fully synced when "catching_up": false, your node is fully synced with the network and ready to use.

{
  "latest_block_height": "1234567",
  "latest_block_time": "2025-04-06T14:23:00Z",
  "catching_up": false
}