Bitcoin Block Explorer
- Install required packages with pip
pip3 install -r requirements.txt
-
A fully synced Bitcoin Full Node running the bitcoind service installed in the same system or in any network that is reachable from your host.
-
BTC_RPC_USERandBTC_RPC_PASSmust be present in the system environment and contains the correct credentials to make RPC calls to your bitcoin full node. -
Ports for HTTP, HTTPS, and RPC should be allowed in your firewall rules. Example for
ufw
sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow 8332:8333
python3 run.py
gunicorn --bind 0.0.0.0:5000 run:app
Create a unit file ending in .service within the /etc/systemd/system directory
sudo vim /etc/systemd/system/btcxplr.service
Sample contents of unit file
[Unit]
# specifies metadata and dependencies
Description=Gunicorn instance to serve btcxplr
# tells the init system to only start this after the networking target has been reached
After=network.target
[Service]
# Service specify the user and group under which our process will run.
User=<replace with username>
# Give group ownership to the www-data group so that Nginx can communicate easily with the Gunicorn processes.
Group=www-data
# Specify the working directory and set the PATH environmental variable so that the init system knows where our the executables for the process are located (within our virtual environment).
WorkingDirectory=<replace with path to btcxplr>
Environment="PATH=<replace with path to btcxplr virtual environment>"
# Specify the commanded to start the service
# Rule of thumb for number of workers is twice the number of cores plus one
# Example for a dual core system, the ideal number of workers is five (5).
ExecStart=<replace with path to gunicorn> --workers <replace with number of workers> --bind unix:app.sock -m 007 run:app
[Install]
# This will tell systemd what to link this service to if we enable it to start at boot. We want this service to start when the regular multi-user system is up and running:
WantedBy=multi-user.target
Start the Gunicorn service we created
sudo systemctl start btcxplr
Enable the service so that it starts at boot
sudo systemctl enable btcxplr
A new app.sock file will be created inside the btcxplr directory automatically
Create a new server block configuration file in Nginx’s sites-available directory named btcxplr
sudo vim /etc/nginx/sites-available/btcxplr
Open up a server block in which nginx will listen to PORT 80. This block will also be used for requests for the server’s domain name or IP address
server {
listen 80;
server_name <replace with server ip or domain name>;
}
Add a location block that matches every request. In this block, include the proxy_paramsfile that specifies some general proxying parameters that need to be set. Then pass the requests to the socket defined earlier using the proxy_pass directive
server {
listen 80;
server_name <replace with server ip or domain name>;
location / {
include proxy_params;
# replace with path to btcxplr app.sock file
proxy_pass http://unix:/home/username/btcxplr/app.sock;
}
}
Create a symbolic link inside the sites-enabled directory to enable Nginx server block just created.
sudo ln -s /etc/nginx/sites-available/btcxplr /etc/nginx/sites-enabled/btcxplr
Test syntax errors by typing
sudo nginx -t
If there is no issues, restart the Nginx process to load new config
sudo systemctl restart nginx
If firewall rules are not yet updated to allow HTTP and HTTPS.
Example for ufw
sudo ufw allow 'Nginx Full'
You may now access btcxplr by keying your ip address or domain name in your web browser.
http://server_domain_or_ip_address
To enable HTTPS using certificates, you can use Certbot and create a HTTP 301 redirect from PORT 80 to PORT 443 in your server configuration in nginx.
Example server block configuration
server {
server_name <your_server_domain>;
location / {
include proxy_params;
# replace with path to btcxplr app.sock file
proxy_pass http://unix:/home/username/btcxplr/app.sock;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/<your_server_domain>/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/<your_server_domain>/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = <your_server_domain>) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name <your_server_domain>;
return 404; # managed by Certbot
}
You may now securely access btcxplr by keying your ip address or domain name in your web browser.
https://server_domain_or_ip_address
Keying in the url with http://server_domain_or_ip_address will automatically redirect users to https://server_domain_or_ip_address.