Blockscout Explorer Install
Blockscout
Overview
This guide goes into details on how to compile and deploy Blockscout instance to work with Polygon-Edge. Blockscout has its own documentation, but this guide focuses on simple but detailed step-by-step instructions on how to setup Blockscout instance.
Environment
Operating System: Ubuntu Server 20.04 LTS download link with sudo permissions
Server Hardware: 8CPU / 16GB RAM / 50GB HDD (LVM)
Database Server: Dedicated server with 2 CPU / 4GB RAM / 100GB SSD / PostgreSQL 13.4
DB Server
The requirement for following this guide is to have a database server ready, database and db user configured. This guide will not go into details on how to deploy and configure PostgreSQL server. There are plenty of guides on now to do this, for example DigitalOcean Guide
DISCLAIMER
This guide is meant only to help you to get Blockscout up and running on a single instance which is not ideal production setup. For production, you'll probably want to introduce reverse proxy, load balancer, scalability options, etc. into the architecture.
Blockscout Deployment Procedure
Part 1 - install dependencies
Before we start we need to make sure we have all the binaries installed that the blockscout is dependent on.
Update & upgrade system
Add erlang repos
Add NodeJS repo
Install Rust
Install required version of Erlang
Install required version of Elixir
The version of Elixir must be 1.13
. If we try and install this version from the official repo, the erlang
will update to Erlang/OTP 25
and we do not want that.
Because of this, we need to install the specific precompiled elixir
version from GitHub releases page.
Now we need to properly set up exlixir
system binaries.
Check if elixir
and erlang
are properly installed by running elixir -v
. This should be the output:
DANGER
Erlang/OTP
must be version 24
and Elixir
must be version 1.13.*
.
If that is not the case, you will run into issues with compiling Blockscout and/or running it.
INFO
Check out the official Blockscout requirements page
Install NodeJS
Install Cargo
Install other dependencies
Optionally install postgresql client to check your db connection
Part 2 - set environment variables
We need to set the environment variables, before we begin with Blockscout compilation. In this guide we'll set only the basic minimum to get it working. Full list of variables that can be set you can find here
Set database connection as environment variable
Now test your DB connection with provided parameters. Since you've provided PG env vars, you should be able to connect to the database only by running:
If the database is configured correctly, you should see a psql prompt:
Otherwise, you might see an error like this:
If this is the case these docs might help you.
DB CONNECTION
Make sure you've sorted out all db connection issues before proceeding to the next part. You'll need to provide superuser privileges to blockscout user.
Part 3 - clone and compile Blockscout
Now we finally get to start the Blockscout installation.
Clone Blockscout repo
Generate secret key base to protect production build
At the very last line, you should see a long string of random characters.
This should be set as your SECRET_KEY_BASE
environment variable, before the next step.
For example:
Set production mode
Compile
Cd into clone directory and start compiling
INFO
If you have deployed previously, remove static assets from the previous build mix phx.digest.clean.
Migrate databases
INFO
This part will fail if you didn't set up your DB connection properly, you didn't provide, or you've defined wrong parameters at DATABASE_URL environment variable. The database user needs to have superuser privileges.
If you need to drop the database first, run
Install npm dependencies and compile frontend assets
You need to change directory to the folder which contains frontend assets.
BE PATIENT
Compilation of these assets can take a few minutes, and it will display no output. It can look like the process is stuck, but just be patient. When compile process is finished, it should output something like: webpack 5.69.1 compiled with 3 warnings in 104942 ms
Build static assets
For this step you need to return to the root of your Blockscout clone folder.
Generate self-signed certificates
INFO
You can skip this step if you won't use https
.
The above command will generate and enable self-signed ssl certs, you need to replace them with real ones. You may use certbot (opens new window)(letsencrypt) to do it, don't forget to set user permissions and configure the file: /path/to/blockscout/config/dev.exs
, see example below:
If using certbot, add cert renewal to crontab
Add blockscout and blockscout.local to your
/etc/hosts
If using Chrome, Enable chrome://flags/#allow-insecure-localhost
Part 4 - create and run Blockscout service
In this part we need to set up a system service as we want Blockscout to run in the background and persist after system reboot.
Create service file
Edit service file
Use your favorite linux text editor to edit this file and configure the service.
The contents of the explorer.service file should look like this:
Enable starting service on system boot
Move your Blockscout clone folder to system-wide location
Blockscout service needs to have access to the folder you've cloned from Blockscout repo and compiled all the assets.
Create env vars file which will be used by Blockscout service
INFO
Use SECRET_KEY_BASE
you've generated in Part 3.
Save the file and exit.
Finally, start Blockscout service
Part 5 - test out the functionality of your Blockscout instance
Now all that's left to do is to check if Blockscout service is running. Check service status with:
To check service output:
You can check if there are some new listening ports:
You should get a list of listening ports and on the list there should be something like this:
Blockscout web service runs the port and protocol defined in env file. In this example it runs on 4000
(http).
If everything is ok, you should be able to access the Blockscout web portal with http://<host_ip>:4000
.
Considerations
For best performance, it is advisable to have a dedicated/local polygon-edge
full archive non-validator node that will be used exclusively for Blockscout queries.
The json-rpc
API of this node, doesn't need to be exposed publicly, as Blockscout runs all queries from the backend.
Final thoughts
We've just deployed a single Blockscout instance, which works fine, but for production you should consider placing this instance behind a reverse proxy like Nginx. You should also think about database and instance scalability, depending on your use case.
You should definitely check out the official Blockscout documentation as there a lot of customisation options.
Last updated