WIP: Don’t follow yet or your computer and WOWs might go kaboom.
1. System Requirements
The only real requirement is a server that you have root access to, but I would recommend at least two cores, 4 GiB of RAM, and 20 GiB of disk space (on an SSD) even if you’re going to be the only person using the server, otherwise it will be painfully slow to setup and use.
You will also want a domain name so that you can get a shiny new certificate from LetsEncrypt.
2. Build Wownero
Firstly, we need to build Wownero from source. We can’t use the release binaries because OpenMonero depends on some libraries and headers not present in them.
2.1. Install dependencies
Debian and derivatives
sudo apt update
sudo apt install \
gcc \
g++ \
cmake \
ninja \
git \
libboost-all-dev \
libssl-dev \
libzmq3-dev \
libpgm-dev \
libunbound-dev \
libsodium-dev
Gentoo
echo 'dev-libs/boost nls threads' | sudo tee -a /etc/portage/package.use/monero
echo 'net-dns/unbound threads' | sudo tee -a /etc/portage/package.use/monero
sudo emerge --changed-use --deep @world
sudo emerge \
dev-libs/boost \
dev-libs/libsodium \
dev-libs/openssl \
net-dns/unbound \
net-libs/czmq \
virtual/pkgconfig
2.2. Clone, configure, and build
cd
git clone https://git.wownero.com/wownero/wownero.git
cd wownero
git checkout v0.8.0.2
git submodule update --init --recursive
mkdir -p build/release
cd $_
cmake ../.. \
-GNinja \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_TESTS=OFF \
-DUSE_DEVICE_TREZOR=OFF
ninja
3. Build OpenMonero
Next we need to compile the OpenMonero server that people will connect to. The repo also contains a web frontend that you can modify to wowify.
3.1. Install dependencies
Debian and derivatives
sudo apt install \
libcurl4-gnutls-dev \
libmysql++-dev \
libunwind-dev
Gentoo
sudo emerge \
dev-db/mysql++ \
sys-libs/libunwind
3.2 Clone, configure, and build
cd
git clone https://github.com/moneroexamples/openmonero.git
cd openmonero
git submodule update --init --recursive
sed '/"\/external\/easylogging++\/"/a "\/external\/RandomWOW\/"' src/xmregcore/cmake/FindMonero.cmake
cmake -Bbuild \
-DCMAKE_BUILD_TYPE=Release \
-DMONERO_DIR=~/wownero
cd build
make # use -jN at your own peril...
4. Database setup
You can run the database however you want, including in a Docker container or something managed from your host. It needs to be MySQL or a compatible fork like MariaDB, though.
This guide will assume that you are installing the database on the same machine that runs everything else.
4.1. Install MariaDB
Debian and derivatives
sudo apt install \
mariadb-client \
mariadb-server
Gentoo
sudo emerge mariadb
4.2. Configure MariaDB
-
Run the provided security script:
sudo mysql_secure_installation
-
Leave the initial password blank (we have not set one yet) and just press return.
-
Say no to setting a root password. Setting one will break some automated maintenence scripts.
-
Say yes to the other questions, to remove anonymous users and the test database, and to disable remote root logins.
4.3. Create a database user
-
Open an SQL shell:
sudo mysql
-
Create a database:
CREATE DATABASE openmonero;
-
Create a user that can do anything to the new database:
GRANT ALL ON openmonero.* TO 'openmonero'@'localhost' IDENTIFIED BY 'GoodShibe123' WITH GRANT OPTION; FLUSH PRIVILEGES;
-
Exit the shell:
exit
4.4. Import database schema
Firstly open ~/openmonero/sql/openmonero.sql
in your favourite editor and change VARCHAR(95)
to VARCHAR(100)
.
mysql -u openmonero -p openmonero < ~/openmonero/sql/openmonero.sql
Enter the password GoodShibe123
(or whatever you set) when prompted.
5. Wownero daemon setup
-
Copy daemon executable to PATH:
sudo cp ~/wownero/build/release/bin/wownerod /usr/local/bin/
-
Create a user:
adduser \ --system \ --no-create-home \ --group \ wownero
-
Create a config file:
cat << EOF | sudo tee /etc/wownerod.conf data-dir=/var/lib/wownero log-file=/var/log/wownero/wownerod.log log-level=0 EOF
-
Create a systemd unit:
cat << EOF | sudo tee /etc/systemd/system/wownerod.service [Unit] Description=Wownero Full Node After=network-online.target Wants=network-online.target [Service] User=wownero Group=wownero StateDirectory=wownero LogsDirectory=wownero Type=simple ExecStart=/usr/local/bin/wownerod --config-file /etc/wownerod.conf \ --non-interactive [Install] WantedBy=multi-user.target
-
Start wownerod and enable it to start on boot:
systemctl enable --now wownerod.service
-
Make sure that wownerod is working properly with
tail /var/log/wownero/wownerod.log
. You should be able to watch as you get synced up to the network.
6. API server setup
-
Copy daemon executable to PATH:
sudo cp ~/openmonero/build/openmonero /usr/local/bin/
-
Create a user:
adduser \ --system \ --no-create-home \ --group \ openmonero
-
Copy the default config:
sudo cp ~/openmonero/config/config.json /etc/openmonero.json
-
Open the
/etc/openmonero.json
file in your favourite editor and change:-
daemon-url.mainnet
to"http://127.0.0.1:34568"
-
blockchain-path.mainnet
to"/var/lib/wownero/lmdb"
-
database.user
to"openmonero"
-
database.password
to"GoodShibe123"
(or whatever you picked) -
wallet_import.mainnet.address
to"Wo3MWeKwtA918DU4c69hVSNgejdWFCRCuWjShRY66mJkU2Hv58eygJWDJS1MNa2Ge5M1WjUkGHuLqHkweDxwZZU42d16v94mP"
-
wallet_import.mainnet.viewkey
to"e62e40bfd5ca7e3a7f199602a3c97df511780489e1c1861884b00c28abaea406"
-
-
Create a systemd unit:
cat << EOF | sudo tee /etc/systemd/system/openmonero.service [Unit] Description=Wownero Full Node After=wownero.service Wants=wownero.service [Service] User=openmonero Group=openmonero LogsDirectory=openmonero Type=simple ExecStart=/usr/local/bin/openmonero --config-file /etc/openmonero.json \ --log-file /var/log/openmonero/openmonero.log [Install] WantedBy=multi-user.target
-
Start openmonero and enable it to start on boot:
systemctl enable --now openmonero.service
6. Web server setup
We need a web server to serve our spicy frontend and to proxy requests to the API. You can use any web server that you want, but this guide will use NGINX.
6.1. Install NGINX
Debian and derivatives
sudo apt install nginx
Gentoo
sudo emerge www-servers/nginx
6.2. Serve frontend
-
Copy the frontend assets somewhere nice:
sudo cp -rv ~/openmonero/html /var/www/openmonero
-
Open up
/etc/nginx/sites-enabled/default
in your favourite editor and make it look like this:server { listen 80; server_name wowllet.biz; # replace with your domain index index.html; root /var/www/openmonero; location / { try_files $uri $uri/ =404; } location /api/ { proxy_pass http://localhost:1984/; } }
6.3. Configure the frontend
Open up /var/www/openmonero/js/config.js
up in your favourite text editor as we need to WOWify some things.
- Change
apiUrl
to"https://yourdomain.com/api/"
- Change
mainnetExplorerUrl
to the address of your favourite compatible block explorer, like"https://explore.wownero.com/"
- Change
nettype
to0
- Change
coinUnitPlaces
to11
- Change
txMinConfirms
to4
- Change
coinSymbol
to"WOW"
- Change
openAliasPrefix
to"wow"
- Change
coinName
to"Wownero"
- Change
coinUriPrefix
to"wownero:"
- Change
addressPrefix
to4146
- Change
integratedAddressPrefix
to6810
- Change
subAddressPrefix
to12208
- Change
defaultMixin
to20
- Change
avgBlockTime
to300
Edit the HTML and stylesheets however you want
6.4. Set up HTTPS
6.4.1. Install certbot
Debian and derivatives
sudo apt install \
python3-certbot \
python3-certbot-nginx
Gentoo
sudo emerge \
app-crypt/certbot \
app-crypt/certbot-nginx
6.4.2. Run certbot
sudo certbot --nginx -d wowwlet.biz # replace with your domain
Follow the prompts, agree to the ToS, sign away your first born children, etc. When asked if you want a redirect, say yes (option 2).
7. Finishing up
- Set up automated updates.
- Configure a firewall to only allow traffic in to port 80 and 443, and to rate limit port 22 (or to only allow connections to port 22 from your IP address).
- Monitor resource usage like disk space and memory to make sure that your server isn’t dying.
Thanks to @qvqc for going through and making sure that the guide was correct :)