Appearance
How to run a Celestia light node on a VPS
Celestia is a data availability network. A light node does not store the chain. It downloads block headers and performs data availability sampling: it fetches small random pieces of each block to check that the full data was published. Light nodes can also submit and read blobs, which makes them useful for rollup developers. This guide sets up a light node on Celestia Mainnet Beta following the official documentation.
What you need
- A small VPS. The official requirements for a light node are 500 MB RAM, a single core and 20 GB of SSD. On DataPasa the VPS-2 plan (1 vCPU, 2 GB RAM, 32 GB NVMe) covers this with headroom. More node recommendations are on the crypto node VPS page.
- Ubuntu 24.04 with root SSH access, see how to connect via SSH.
- A consensus node gRPC endpoint. The docs use a public QuickNode endpoint in their examples, and that is what this guide uses.
The server can be paid with USDT, BTC and other coins through crypto VPS hosting.
Mainnet Beta is still experimental
Celestia calls its mainnet "Mainnet Beta". It is live and stable, but the docs warn about occasional instability, and node upgrades are coordinated with operators. Follow the network announcements if you run a node long term.
Step 1. Install dependencies
bash
apt update && apt upgrade -y
apt install -y curl tar wget jqStep 2. Install celestia-node
Celestia provides an installer script that downloads the pre-built binary from GitHub and checks its SHA-256 checksum. Open the Mainnet Beta network page and note the recommended celestia-node version, then pass it to the script:
bash
VERSION=v0.33.2
bash -c "$(curl -sL https://docs.celestia.org/celestia-node.sh)" -- -v $VERSIONPinning the version matters: without -v the script takes the latest GitHub release, which is not always the version meant for Mainnet Beta.
The script asks where to put the binary. Choose System bin directory (/usr/local/bin). Check the result:
bash
celestia versionStep 3. Create a user and initialize the node
Run the node under its own user rather than root:
bash
useradd --create-home --shell /bin/bash celestia
sudo -iu celestiaAs the celestia user, initialize a light node store. Mainnet Beta is the default network, so no network flag is needed:
bash
celestia light initThis creates the node store in ~/.celestia-light with config.toml, a data directory and a keys directory, and generates a key for the node. The output shows the key name and address along with a mnemonic phrase. Write the mnemonic down and keep it offline. Anyone with it controls the TIA on that address.
Step 4. Start the node for a first test
Still as the celestia user, start the light node against the public consensus endpoint:
bash
celestia light start \
--core.ip public-endpoint.celestia-mainnet.quiknode.pro \
--core.port 9090 --core.tls --p2p.network celestiaYou will see logs as the node syncs headers and starts sampling. When it runs without errors, stop it with Ctrl+C and type exit to return to root.
If you use UFW, open the P2P port. The Celestia docs list port 2121 over TCP and UDP for peer connections:
bash
ufw allow 2121/tcp
ufw allow 2121/udpThe node RPC on port 26658 listens on localhost only. Keep it that way.
Step 5. Run the node with systemd
Create /etc/systemd/system/celestia-lightd.service. It follows the unit from the official docs with the user and endpoint filled in:
ini
[Unit]
Description=celestia-lightd light node
After=network-online.target
[Service]
User=celestia
ExecStart=/usr/local/bin/celestia light start --core.ip public-endpoint.celestia-mainnet.quiknode.pro --core.port 9090 --core.tls --p2p.network celestia
Restart=on-failure
RestartSec=3
[Install]
WantedBy=multi-user.targetEnable and start it, then follow the logs:
bash
systemctl daemon-reload
systemctl enable --now celestia-lightd
systemctl status celestia-lightd
journalctl -u celestia-lightd.service -fStep 6. Get your node ID and address
Your node ID is its libp2p peer ID. With the node running, switch to the celestia user and ask the node:
bash
sudo -iu celestia
celestia p2p infoThe id field in the output is your node ID. Other useful commands:
bash
celestia state account-address
celestia state balanceaccount-address shows the celestia1... address of the node key. You only need TIA on it if you want to submit blobs. Sampling and verifying data availability work with an empty balance.
Back up the node identity
The keys directory in ~/.celestia-light holds both the node identity and the account key. Copy it somewhere safe. If you move to another server, restore the directory there before the first start and the node keeps the same ID. To export the account key in encrypted form, the docs describe the separate cel-key utility.
Using your own consensus endpoint
Free public endpoints come without guarantees. For blob submission in production, the Celestia docs recommend a paid RPC provider. If your provider requires an access token, pass it with --core.xtoken.path, pointing to a directory that contains an xtoken.json file:
json
{
"x-token": "YOUR_SECRET_TOKEN"
}Keep this file readable only by the celestia user with chmod 600.
Keep the node up to date
When a new Mainnet Beta version is announced, stop the service, run the installer again with the new version, and start the service. The docs note that some upgrades need a config migration, for example with celestia light config-update --p2p.network celestia, so read the release notes each time.
A light node only keeps recent data: the sampling window is 7 days and headers are pruned after 14 days, so disk usage stays small over time. Keep your DataPasa balance positive, since a suspended server stops sampling and is deleted after 24 hours without a top up.
Summary
You installed a pinned celestia-node version, initialized a Mainnet Beta light node under its own user, ran it with systemd and found its node ID. The node now samples every new block and gives you a trust minimized way to read and post data on Celestia.