Skip to main content

Docker Setup for Priva Node

This page covers Docker-specific setup details, including using Docker Compose with the official image.

The easiest way to run a Priva node is via Docker Compose.

Full docker-compose.yml

services:
node:
image: ghcr.io/privanet/node-client:latest
environment:
PRIVANET_PASSPHRASE: ${PRIVANET_PASSPHRASE}
ports:
- "8336:8336/udp"
- "8336:8336/tcp"
- "9090:9090"
volumes:
- ./data:/home/privanet/data
- ./config.yaml:/home/privanet/config.yaml:ro
restart: unless-stopped
stop_grace_period: 35s
deploy:
resources:
limits:
memory: 1g
stop_grace_period: 35s

The node needs up to 30 seconds to gracefully disconnect from peers before stopping. Without this, abrupt stops can cause peer timeout issues.

.env file

# /opt/privanet/.env
PRIVANET_PASSPHRASE=your-secure-passphrase

Start / Stop / Restart

# Start the node (detached)
docker compose up -d

# View logs
docker compose logs -f

# Stop gracefully
docker compose down

# Restart
docker compose restart node

# Update to latest image
docker compose pull && docker compose up -d

Running Without Compose

docker run -d \
--name privanet-node \
--restart unless-stopped \
-e PRIVANET_PASSPHRASE="your-secure-passphrase" \
-p 8336:8336/udp \
-p 8336:8336/tcp \
-p 9090:9090 \
-v /opt/privanet/data:/home/privanet/data \
-v /opt/privanet/config.yaml:/home/privanet/config.yaml:ro \
--memory=1g \
ghcr.io/privanet/node-client:latest

Initialization

Before the first start, initialize the node to create its cryptographic keypair:

docker run --rm \
-e PRIVANET_PASSPHRASE="your-secure-passphrase" \
-v /opt/privanet/data:/home/privanet/data \
ghcr.io/privanet/node-client:latest \
init --data-dir /home/privanet/data

This creates:

  • data/keystore.json — your node's encrypted private key
  • data/datastore/ — LevelDB storage for peer state
danger

Never delete data/keystore.json. This file IS your node identity. Back it up to a safe location.


Data Persistence

Path in containerPurposeMount
/home/privanet/dataNode state, keystore, peer database./data:/home/privanet/data
/home/privanet/config.yamlConfiguration./config.yaml:/home/privanet/config.yaml:ro

Resource Limits

The memory: 1g limit is set to give libp2p enough headroom during peer discovery spikes. Running below 1 GB risks OOM kills on startup.

For Elite tier nodes handling high traffic, consider memory: 2g.