How to install proxmox + xahau server + your first evernode VM

Hosting an Evernode involves setting up and maintaining a linux machine which runs the evernode software and participates in network consensus. By participating, you help maintain the network's decentralized infrastructure while potentially earning rewards. Detailed tutorials and community support are available to assist node operators.
Forum rules
Welcome to the Hosting An Evernode Forum! To ensure a positive and productive environment, please adhere to the following guidelines.

Treat all members with respect and courtesy. Post content relevant to hosting an Evernode, avoiding spamming, self-promotion, or irrelevant topics. Aim to provide clear, informative, and constructive contributions. Discussions of illegal illicit activities are strictly prohibited. Protect your privacy and that of others by not sharing personal information publicly and reporting any suspicious activity to moderators. Failure to adhere to these rules may result in warnings, post deletions, or account suspension. Let’s work together to build a supportive and knowledgeable Evernode community!
Post Reply
dannythedog
Posts: 1
Joined: Sat Nov 15, 2025 2:03 pm

How to install proxmox + xahau server + your first evernode VM

Post by dannythedog »

The Proxmox Part
1. Download Proxmox
https://www.proxmox.com/en/downloads (v9) iso file

2. Download Rufus
https://rufus.ie/en/

3.
Burn the iso file to a bootable USB drive with rufus.

4.
Plug in the USB drive to your server, boot it and reinstall everything with proxmox.

5.
Follow these steps after proxmox is installed:
https://evernode.forum/viewtopic.php?t=82

The Xahau submission node part
1.
Create a ubuntu 24 virtual machine, give it 6 cores 8 gb ram and 30 gb disk (We won't use all of that, but it's better to have slightly more than too little, disk is the only variable to be careful with, because its annoying to remove added disk space).

2.
Open port 80 and 443 to this virtual machine.

3.
Point an A record called xahau to your static ip.

4.
We will install this submission node: https://github.com/gadget78/xahl-node

Install by writing
sudo bash -c "$(wget -qLO - https://raw.githubusercontent.com/gadget78/xahl-node/main/setup.sh)"

Make sure that you use the proper domain, xahau.yourdomain.tld.

5.
After installation, visit https://xahau.yourdomain.tld to make sure it is running.

The Evernode part
1.
Create a ubuntu 24 virtual machine, give it as many cores as you can, as much ram as you can and as much disk as you can. (Just do the math and offer as much as you possibly can for each node you boot up).

2.
Open following port ranges for it:
TCP + UDP
26201 to 26201+n
22861 to 22861+n
36525 to 36525+2n
39064 to 39064+2n

n stands for the amount of instances you will run, minimum is 3 to be eligible for rewards.

Of course, when you install multiple nodes you will use different ports in the same serie, so you need to keep opening ports to the proper virtual machine. An alternative is to let nginx handle this, but manually pointing from the router works aswell.

4.
Add an A record pointing to your static ip called evernode1

5.
Go to your Xahau virtual machine

6.
go to /etc/nginx/sites-available
Create a file called evernode1

Add following listener:

Code: Select all

server {
    listen 80;
    server_name evernode1.yourdomain.tld;

    location / {
        proxy_pass http://yourlocalip;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
Change http://yourlocalip to the local ip you got for your evernode virtual machine, and change yourdomain.tld to your domain.

7.
After creating the configuration file, write
ln -s /etc/nginx/sites-available/evernode1 /etc/nginx/sites-enabled/
nginx -t
nginx -s reload

8.
Install Evernode and opt into the reputation contract.

9.
It should work now, if it doesn't, ask for help and troubleshoot :)

10.
Repeat this step for all your evernode machines.
proxmoxer
Posts: 13
Joined: Sun Apr 06, 2025 9:31 pm

Re: How to install proxmox + xahau server + your first evernode VM

Post by proxmoxer »

You should always set a static ip on each virtual machine.

On ubuntu 24, do this:

#1:
enter your vm, and write ip a, write up your current ip and gateway address

#2:
enter folder /etc/netplan and write ls

#3:
open the file you got there, change dhcp4 to false, right below dhcp4, add following
addresses:
- yourip/24
routes:
- to: default
via: yourgatewayip

#4:
You might want to ask grok or chatgpt to verify that its properly written, if you screw things up with spaces or such stuff, then it wont work.

#5:
Save the file and exit nano.

#6:
write sudo netplan generate

#7:
write sudo netplan apply

#8:
write ip a and make sure that the ip is properly set up, try to curl something.

#9:
Verify that your node work properly (if you did everything correctly, it will work).


Example of netplan yaml file:

Code: Select all

network:
  version: 2
  ethernets:
    eth0:
      match:
        macaddress: "02:d2:8d:14:da:a6"
      dhcp4: false
      addresses:
        - 192.168.0.61/24
      routes:
        - to: default
          via: 192.168.0.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 1.1.1.1
          
proxmoxer
Posts: 13
Joined: Sun Apr 06, 2025 9:31 pm

Re: How to install proxmox + xahau server + your first evernode VM

Post by proxmoxer »

Sometimes you need to send all traffic to the nginx (instead of sending it separately to each respective vm). To do that you need to create two new files in nginx.

There are a few things to do to make that work. The example here is for 15 nodes and 6 instances with following portrange pointing to nginx: 30111-32575. Our evernode virtual machines have the ip range of 192.168.0.9 to 192.168.0.23 in this example :)

open /etc/nginx/nginx.conf and add following at the top level (not inside any brackets)
include /etc/nginx/stream.d/*.conf;

Create directories:
sudo mkdir -p /etc/nginx/stream.d /etc/nginx/evernode

write nano /etc/nginx/stream.d/evernode-stream.conf

Add following and adjust the local ip properly (if you have all servers on the same ip range, then it should be automatic, but if you don't, then you can change things manually)

Code: Select all

# /etc/nginx/stream.d/evernode-stream.conf
#
# Evernode port-forwarding for 15 nodes, 6 instances per node.
# External port == internal port (no translation).
#
# Per node (block of 100 ports starting at 30111 + (node-1)*100):
#   User TCP: block+0  .. block+5   (6 ports)
#   Peer TCP: block+10 .. block+15  (6 ports)
#   GP   TCP: block+20 .. block+31  (12 ports = 2n)
#   GP   UDP: block+40 .. block+51  (12 ports = 2n)
#
# NOTE: This file must be included at TOP LEVEL in nginx.conf:
#   include /etc/nginx/stream.d/*.conf;

stream {

  # 1
  server {
    # TCP (user)
    listen 30111; listen 30112; listen 30113; listen 30114; listen 30115; listen 30116;
    # TCP (peer)
    listen 30121; listen 30122; listen 30123; listen 30124; listen 30125; listen 30126;
    # TCP (general purpose)
    listen 30131; listen 30132; listen 30133; listen 30134; listen 30135; listen 30136;
    listen 30137; listen 30138; listen 30139; listen 30140; listen 30141; listen 30142;
    # UDP (general purpose)
    listen 30151 udp; listen 30152 udp; listen 30153 udp; listen 30154 udp; listen 30155 udp; listen 30156 udp;
    listen 30157 udp; listen 30158 udp; listen 30159 udp; listen 30160 udp; listen 30161 udp; listen 30162 udp;

    proxy_connect_timeout 5s;  # TCP only
    proxy_timeout 1h;          # TCP+UDP
    set $upstream "192.168.1.9:$server_port";
    proxy_pass $upstream;
  }

  # 2
  server {
    listen 30211; listen 30212; listen 30213; listen 30214; listen 30215; listen 30216;
    listen 30221; listen 30222; listen 30223; listen 30224; listen 30225; listen 30226;
    listen 30231; listen 30232; listen 30233; listen 30234; listen 30235; listen 30236;
    listen 30237; listen 30238; listen 30239; listen 30240; listen 30241; listen 30242;

    listen 30251 udp; listen 30252 udp; listen 30253 udp; listen 30254 udp; listen 30255 udp; listen 30256 udp;
    listen 30257 udp; listen 30258 udp; listen 30259 udp; listen 30260 udp; listen 30261 udp; listen 30262 udp;

    proxy_connect_timeout 5s;
    proxy_timeout 1h;
    set $upstream "192.168.1.10:$server_port";
    proxy_pass $upstream;
  }

  # 3
  server {
    listen 30311; listen 30312; listen 30313; listen 30314; listen 30315; listen 30316;
    listen 30321; listen 30322; listen 30323; listen 30324; listen 30325; listen 30326;
    listen 30331; listen 30332; listen 30333; listen 30334; listen 30335; listen 30336;
    listen 30337; listen 30338; listen 30339; listen 30340; listen 30341; listen 30342;

    listen 30351 udp; listen 30352 udp; listen 30353 udp; listen 30354 udp; listen 30355 udp; listen 30356 udp;
    listen 30357 udp; listen 30358 udp; listen 30359 udp; listen 30360 udp; listen 30361 udp; listen 30362 udp;

    proxy_connect_timeout 5s;
    proxy_timeout 1h;
    set $upstream "192.168.1.11:$server_port";
    proxy_pass $upstream;
  }

  # 4
  server {
    listen 30411; listen 30412; listen 30413; listen 30414; listen 30415; listen 30416;
    listen 30421; listen 30422; listen 30423; listen 30424; listen 30425; listen 30426;
    listen 30431; listen 30432; listen 30433; listen 30434; listen 30435; listen 30436;
    listen 30437; listen 30438; listen 30439; listen 30440; listen 30441; listen 30442;

    listen 30451 udp; listen 30452 udp; listen 30453 udp; listen 30454 udp; listen 30455 udp; listen 30456 udp;
    listen 30457 udp; listen 30458 udp; listen 30459 udp; listen 30460 udp; listen 30461 udp; listen 30462 udp;

    proxy_connect_timeout 5s;
    proxy_timeout 1h;
    set $upstream "192.168.1.12:$server_port";
    proxy_pass $upstream;
  }

  # 5
  server {
    listen 30511; listen 30512; listen 30513; listen 30514; listen 30515; listen 30516;
    listen 30521; listen 30522; listen 30523; listen 30524; listen 30525; listen 30526;
    listen 30531; listen 30532; listen 30533; listen 30534; listen 30535; listen 30536;
    listen 30537; listen 30538; listen 30539; listen 30540; listen 30541; listen 30542;

    listen 30551 udp; listen 30552 udp; listen 30553 udp; listen 30554 udp; listen 30555 udp; listen 30556 udp;
    listen 30557 udp; listen 30558 udp; listen 30559 udp; listen 30560 udp; listen 30561 udp; listen 30562 udp;

    proxy_connect_timeout 5s;
    proxy_timeout 1h;
    set $upstream "192.168.1.13:$server_port";
    proxy_pass $upstream;
  }

  # 6
  server {
    listen 30611; listen 30612; listen 30613; listen 30614; listen 30615; listen 30616;
    listen 30621; listen 30622; listen 30623; listen 30624; listen 30625; listen 30626;
    listen 30631; listen 30632; listen 30633; listen 30634; listen 30635; listen 30636;
    listen 30637; listen 30638; listen 30639; listen 30640; listen 30641; listen 30642;

    listen 30651 udp; listen 30652 udp; listen 30653 udp; listen 30654 udp; listen 30655 udp; listen 30656 udp;
    listen 30657 udp; listen 30658 udp; listen 30659 udp; listen 30660 udp; listen 30661 udp; listen 30662 udp;

    proxy_connect_timeout 5s;
    proxy_timeout 1h;
    set $upstream "192.168.1.14:$server_port";
    proxy_pass $upstream;
  }

  # 7
  server {
    listen 30711; listen 30712; listen 30713; listen 30714; listen 30715; listen 30716;
    listen 30721; listen 30722; listen 30723; listen 30724; listen 30725; listen 30726;
    listen 30731; listen 30732; listen 30733; listen 30734; listen 30735; listen 30736;
    listen 30737; listen 30738; listen 30739; listen 30740; listen 30741; listen 30742;

    listen 30751 udp; listen 30752 udp; listen 30753 udp; listen 30754 udp; listen 30755 udp; listen 30756 udp;
    listen 30757 udp; listen 30758 udp; listen 30759 udp; listen 30760 udp; listen 30761 udp; listen 30762 udp;

    proxy_connect_timeout 5s;
    proxy_timeout 1h;
    set $upstream "192.168.1.15:$server_port";
    proxy_pass $upstream;
  }

  # 8
  server {
    listen 30811; listen 30812; listen 30813; listen 30814; listen 30815; listen 30816;
    listen 30821; listen 30822; listen 30823; listen 30824; listen 30825; listen 30826;
    listen 30831; listen 30832; listen 30833; listen 30834; listen 30835; listen 30836;
    listen 30837; listen 30838; listen 30839; listen 30840; listen 30841; listen 30842;

    listen 30851 udp; listen 30852 udp; listen 30853 udp; listen 30854 udp; listen 30855 udp; listen 30856 udp;
    listen 30857 udp; listen 30858 udp; listen 30859 udp; listen 30860 udp; listen 30861 udp; listen 30862 udp;

    proxy_connect_timeout 5s;
    proxy_timeout 1h;
    set $upstream "192.168.1.16:$server_port";
    proxy_pass $upstream;
  }

  # 9
  server {
    listen 30911; listen 30912; listen 30913; listen 30914; listen 30915; listen 30916;
    listen 30921; listen 30922; listen 30923; listen 30924; listen 30925; listen 30926;
    listen 30931; listen 30932; listen 30933; listen 30934; listen 30935; listen 30936;
    listen 30937; listen 30938; listen 30939; listen 30940; listen 30941; listen 30942;

    listen 30951 udp; listen 30952 udp; listen 30953 udp; listen 30954 udp; listen 30955 udp; listen 30956 udp;
    listen 30957 udp; listen 30958 udp; listen 30959 udp; listen 30960 udp; listen 30961 udp; listen 30962 udp;

    proxy_connect_timeout 5s;
    proxy_timeout 1h;
    set $upstream "192.168.1.17:$server_port";
    proxy_pass $upstream;
  }

  # 10
  server {
    listen 31011; listen 31012; listen 31013; listen 31014; listen 31015; listen 31016;
    listen 31021; listen 31022; listen 31023; listen 31024; listen 31025; listen 31026;
    listen 31031; listen 31032; listen 31033; listen 31034; listen 31035; listen 31036;
    listen 31037; listen 31038; listen 31039; listen 31040; listen 31041; listen 31042;

    listen 31051 udp; listen 31052 udp; listen 31053 udp; listen 31054 udp; listen 31055 udp; listen 31056 udp;
    listen 31057 udp; listen 31058 udp; listen 31059 udp; listen 31060 udp; listen 31061 udp; listen 31062 udp;

    proxy_connect_timeout 5s;
    proxy_timeout 1h;
    set $upstream "192.168.1.18:$server_port";
    proxy_pass $upstream;
  }

  # 11
  server {
    listen 31111; listen 31112; listen 31113; listen 31114; listen 31115; listen 31116;
    listen 31121; listen 31122; listen 31123; listen 31124; listen 31125; listen 31126;
    listen 31131; listen 31132; listen 31133; listen 31134; listen 31135; listen 31136;
    listen 31137; listen 31138; listen 31139; listen 31140; listen 31141; listen 31142;

    listen 31151 udp; listen 31152 udp; listen 31153 udp; listen 31154 udp; listen 31155 udp; listen 31156 udp;
    listen 31157 udp; listen 31158 udp; listen 31159 udp; listen 31160 udp; listen 31161 udp; listen 31162 udp;

    proxy_connect_timeout 5s;
    proxy_timeout 1h;
    set $upstream "192.168.1.19:$server_port";
    proxy_pass $upstream;
  }

  # 12
  server {
    listen 31211; listen 31212; listen 31213; listen 31214; listen 31215; listen 31216;
    listen 31221; listen 31222; listen 31223; listen 31224; listen 31225; listen 31226;
    listen 31231; listen 31232; listen 31233; listen 31234; listen 31235; listen 31236;
    listen 31237; listen 31238; listen 31239; listen 31240; listen 31241; listen 31242;

    listen 31251 udp; listen 31252 udp; listen 31253 udp; listen 31254 udp; listen 31255 udp; listen 31256 udp;
    listen 31257 udp; listen 31258 udp; listen 31259 udp; listen 31260 udp; listen 31261 udp; listen 31262 udp;

    proxy_connect_timeout 5s;
    proxy_timeout 1h;
    set $upstream "192.168.1.20:$server_port";
    proxy_pass $upstream;
  }

  # 13
  server {
    listen 31311; listen 31312; listen 31313; listen 31314; listen 31315; listen 31316;
    listen 31321; listen 31322; listen 31323; listen 31324; listen 31325; listen 31326;
    listen 31331; listen 31332; listen 31333; listen 31334; listen 31335; listen 31336;
    listen 31337; listen 31338; listen 31339; listen 31340; listen 31341; listen 31342;

    listen 31351 udp; listen 31352 udp; listen 31353 udp; listen 31354 udp; listen 31355 udp; listen 31356 udp;
    listen 31357 udp; listen 31358 udp; listen 31359 udp; listen 31360 udp; listen 31361 udp; listen 31362 udp;

    proxy_connect_timeout 5s;
    proxy_timeout 1h;
    set $upstream "192.168.1.21:$server_port";
    proxy_pass $upstream;
  }

  # 14
  server {
    listen 31411; listen 31412; listen 31413; listen 31414; listen 31415; listen 31416;
    listen 31421; listen 31422; listen 31423; listen 31424; listen 31425; listen 31426;
    listen 31431; listen 31432; listen 31433; listen 31434; listen 31435; listen 31436;
    listen 31437; listen 31438; listen 31439; listen 31440; listen 31441; listen 31442;

    listen 31451 udp; listen 31452 udp; listen 31453 udp; listen 31454 udp; listen 31455 udp; listen 31456 udp;
    listen 31457 udp; listen 31458 udp; listen 31459 udp; listen 31460 udp; listen 31461 udp; listen 31462 udp;

    proxy_connect_timeout 5s;
    proxy_timeout 1h;
    set $upstream "192.168.1.22:$server_port";
    proxy_pass $upstream;
  }

  # 15
  server {
    listen 31511; listen 31512; listen 31513; listen 31514; listen 31515; listen 31516;
    listen 31521; listen 31522; listen 31523; listen 31524; listen 31525; listen 31526;
    listen 31531; listen 31532; listen 31533; listen 31534; listen 31535; listen 31536;
    listen 31537; listen 31538; listen 31539; listen 31540; listen 31541; listen 31542;

    listen 31551 udp; listen 31552 udp; listen 31553 udp; listen 31554 udp; listen 31555 udp; listen 31556 udp;
    listen 31557 udp; listen 31558 udp; listen 31559 udp; listen 31560 udp; listen 31561 udp; listen 31562 udp;

    proxy_connect_timeout 5s;
    proxy_timeout 1h;
    set $upstream "192.168.1.23:$server_port";
    proxy_pass $upstream;
  }

}

write nano /etc/nginx/sites-available/evernodes

Code: Select all

map $host $evernode_backend {
    default "";

    evernode1.mydomain.tld  192.168.1.9;
    evernode2.mydomain.tld  192.168.1.10;
    evernode3.mydomain.tld  192.168.1.11;
    evernode4.mydomain.tld  192.168.1.12;
    evernode5.mydomain.tld  192.168.1.13;
    evernode6.mydomain.tld  192.168.1.14;
    evernode7.mydomain.tld  192.168.1.15;
    evernode8.mydomain.tld  192.168.1.16;
    evernode9.mydomain.tld  192.168.1.17;
    evernode10.mydomain.tld 192.168.1.18;
    evernode11.mydomain.tld 192.168.1.19;
    evernode12.mydomain.tld 192.168.1.20;
    evernode13.mydomain.tld 192.168.1.21;
    evernode14.mydomain.tld 192.168.1.22;
    evernode15.mydomain.tld 192.168.1.23;
}

server {
    listen 80;

    server_name
        evernode1.mydomain.tld  evernode2.mydomain.tld  evernode3.mydomain.tld
        evernode4.mydomain.tld  evernode5.mydomain.tld  evernode6.mydomain.tld
        evernode7.mydomain.tld  evernode8.mydomain.tld  evernode9.mydomain.tld
        evernode10.mydomain.tld evernode11.mydomain.tld evernode12.mydomain.tld
        evernode13.mydomain.tld evernode14.mydomain.tld evernode15.mydomain.tld;

    if ($evernode_backend = "") { return 444; }

    location / {
        proxy_pass http://$evernode_backend;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
After creating the configuration file, write
ln -s /etc/nginx/sites-available/evernodes /etc/nginx/sites-enabled/
nginx -t
nginx -s reload
Post Reply