About a month ago, I host Monero node that is free to use for everyone as a remote RPC. Until this article was written, there were only 2 public nodes from Indonesia and both nodes were run by me.
Hopefully this article can help those of you who want to support Monero by building new public nodes, especially if only a few nodes available in your area or country.
As a prerequisite to using this guide, I assume that you already have at least:
- 1 Virtual Machine (off course) with public IP address.
- 1GB of RAM (minimum)
- 160GB of Storage
I suggest that your VPS use SSD storage, because downloading and verifying the entire blockchains to the spinning hard disk can take 4 - 8 days.
We need to compile Monero from source.
ibgtest-dev binary manually because on Debian/Ubuntu
libgtest-dev only includes sources and headers.
1sudo apt-get install libgtest-dev && cd /usr/src/gtest && sudo cmake . && sudo make && sudo mv libg* /usr/lib/
Install remaining dependencies :
1sudo apt update && sudo apt install build-essential cmake pkg-config libboost-all-dev libssl-dev libzmq3-dev libunbound-dev libsodium-dev libunwind8-dev liblzma-dev libreadline6-dev libldns-dev libexpat1-dev doxygen graphviz libpgm-dev qttools5-dev-tools libhidapi-dev libusb-1.0-0-dev libprotobuf-dev protobuf-compiler libudev-dev
Clone the repository and build
Clone recursively to pull-in needed submodule(s):
1git clone --recursive https://github.com/monero-project/monero
Initialize and update:
1cd monero && git submodule init && git submodule update
change to the most recent release branch (
v0.17 when this article is written), and build:
1git checkout release-v0.17 2make
Tips: If your machine has several cores and enough memory, enable parallel build by running
make -j<number of threads>or
make -j$(nproc)instead of
make. For this to be worthwhile, the machine should have one core and about 2GB of RAM available per thread.
The resulting executables can be found in
Copy compiled binary to
/opt/monero/bin and change binary files permission:
1mkdir -p /opt/monero 2cp -rv build/Linux/release-v0.17/release/bin /opt/monero/ 3chmod -R 775 /opt/monero/bin
Create user and systemd for Monero daemon
Create new user who should run Monero daemon:
1useradd -s /bin/sh -m monerodaemon
Create Monero systemd service file
/etc/systemd/system/monero.service and add these following config:
1[Unit] 2Description=Monero Daemon 3After=network.target 4 5[Service] 6Type=forking 7GuessMainPID=no 8ExecStart=/opt/monero/bin/monerod \ 9 --rpc-bind-ip 127.0.0.1 \ 10 --rpc-restricted-bind-ip [SERVER_PUBLIC_IP_ADDRESS] \ 11 --rpc-restricted-bind-port [RPC_RESTRICTED_PORT] \ 12 --confirm-external-bind \ 13 --public-node \ 14 --detach 15Restart=always 16User=monerodaemon 17 18[Install] 19WantedBy=multi-user.target
[SERVER_PUBLIC_IP_ADDRESS] above with your server public IP address and
[RPC_RESTRICTED_PORT] with your desired port (recommended
Reload, start and enable daemon on startup:
1systemctl daemon-reload 2systemctl enable --now monero.service
Make sure monero daemon is running:
systemctl status monero.service.
Make sure your firewall for port
[RPC_RESTRICTED_PORT] from systemd config above) is open, if not:
1ufw allow 18080 2ufw allow 18089