Compare commits

...

25 Commits

Author SHA1 Message Date
Vivek Teega
3d336572be
Merge pull request #5 from sahaj05/Dockerbook
basic testnet changes
2023-09-29 17:12:25 +05:30
Kumar Sahaj
84574b507a new changees 2023-09-29 11:39:02 +00:00
Kumar Sahaj
a684783e85 Merge branch 'Dockerbook' of https://github.com/sahaj05/blockbook-docker into Dockerbook 2023-09-29 11:33:20 +00:00
Kumar Sahaj
2110bb5e16 dockerfile for testnet 2023-09-29 11:32:59 +00:00
Vivek Teega
00efd27bce
Merge pull request #4 from sahaj05/Dockerbook
Pulling changes made by Sahaj
2023-09-27 23:22:51 +05:30
Kumar Sahaj
398b08fc00 added testnet_files 2023-09-27 10:00:42 +00:00
Kumar Sahaj
a9f569655c updated 2023-09-21 11:12:05 +00:00
Kumar Sahaj
a03742524c updated documentation 2023-09-21 10:08:12 +00:00
Kumar Sahaj
d8be353192 removed dockerfile 2023-09-21 09:27:42 +00:00
Kumar Sahaj
31c346aa3e updated docker files for test_net and main_net 2023-09-21 09:06:35 +00:00
Kumar Sahaj
60150aa8e4 test_net dockerfile 2023-09-21 08:58:34 +00:00
Kumar Sahaj
1024f11c83 video support added 2023-09-21 08:02:48 +00:00
Kumar Sahaj
af189d23fd asdf 2023-09-21 07:31:53 +00:00
Kumar Sahaj
c6f85bca91 checks_1 2023-09-21 07:30:58 +00:00
Kumar Sahaj
d35075f35f news 2023-09-21 04:34:06 +00:00
Kumar Sahaj
1ac3bcb9b1 new _changes 2023-09-21 04:31:52 +00:00
Kumar Sahaj
b3f34bdc0e checksss 2023-09-20 14:49:15 +00:00
Kumar Sahaj
2833fcea47 checkss 2023-09-20 14:46:07 +00:00
Kumar Sahaj
8fd3f5875e checks1 2023-09-20 14:43:51 +00:00
Kumar Sahaj
59f423e8da checks 2023-09-20 14:38:58 +00:00
Kumar Sahaj
efbce1e9df check 2023-09-20 14:01:54 +00:00
Kumar Sahaj
8bda098621 Step guide for dockerising blockbook 2023-09-20 13:57:14 +00:00
sahaj05
f1fcec6a28
Merge branch 'ranchimall:main' into main 2023-09-20 15:33:31 +05:30
sahaj05
45a58f28b4
Create Blockbook-flo.service Content
Contains the starting command for Blockbook-flo.service
2023-09-18 12:53:13 +05:30
sahaj05
36c8cee4d2
Create Backend-flo.service Content
Contains the starting command for backend-flo.service
2023-09-18 12:49:21 +05:30
8 changed files with 340 additions and 18 deletions

View File

@ -0,0 +1,42 @@
[Unit]
Description=Flo backend daemon
After=network.target
[Service]
ExecStart=/opt/coins/nodes/flo/bin/flod -datadir=/opt/coins/data/flo/backend -conf=/opt/coins/nodes/flo/flo.conf -pid=/run/flo/flo.pid
User=flo
Restart=on-failure
TimeoutStopSec=300
WorkingDirectory=/opt/coins/nodes/flo
Type=forking
RuntimeDirectory=flo
PIDFile=/run/flo/flo.pid
# Resource limits
LimitNOFILE=500000
# Hardening measures
####################
# Provide a private /tmp and /var/tmp.
PrivateTmp=true
# Mount /usr, /boot/ and /etc read-only for the process.
ProtectSystem=full
# Disallow the process and all of its children to gain
# new privileges through execve().
NoNewPrivileges=true
# Use a new /dev namespace only populated with API pseudo devices
# such as /dev/null, /dev/zero and /dev/random.
PrivateDevices=true
# Deny the creation of writable and executable memory mappings.
MemoryDenyWriteExecute=true
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,38 @@
[Unit]
Description=Blockbook daemon (Flo)
After=network.target
Wants=backend-flo.service
[Service]
ExecStart=/opt/coins/blockbook/flo/bin/blockbook -blockchaincfg=/opt/coins/blockbook/flo/config/blockchaincfg.json -datadir=/opt/coins/data/flo/blockbook/db -sync -internal=:9066 -public=:9166 -certfile=/opt/coins/blockbook/flo/cert/blockbook -explorer= -log_dir=/opt/coins/blockbook/flo/logs -dbcache=1073741824
User=blockbook-flo
Type=simple
Restart=on-failure
TimeoutStopSec=300
WorkingDirectory=/opt/coins/blockbook/flo
# Resource limits
LimitNOFILE=500000
# Hardening measures
####################
# Provide a private /tmp and /var/tmp.
PrivateTmp=true
# Mount /usr, /boot/ and /etc read-only for the process.
ProtectSystem=full
# Disallow the process and all of its children to gain
# new privileges through execve().
NoNewPrivileges=true
# Use a new /dev namespace only populated with API pseudo devices
# such as /dev/null, /dev/zero and /dev/random.
PrivateDevices=true
# Deny the creation of writable and executable memory mappings.
MemoryDenyWriteExecute=true
[Install]
WantedBy=multi-user.target

View File

@ -1,16 +1,52 @@
# Use a base image
FROM nestybox/ubuntu-focal-systemd-docker
# Install necessary packages
RUN apt update && \
apt install -y wget gnupg2 software-properties-common unzip
# Download deb files
RUN wget https://github.com/ranchimall/blockbook-docker/archive/main.zip && unzip main.zip
RUN cd blockbook-docker-main && sudo apt install -y ./dind_backend-flo_0.15.1.1-satoshilabs-1_amd64.deb && sudo apt install -y ./dind_blockbook-flo_0.4.0_amd64.deb
# Expose ports
EXPOSE 22 80 9166
# Start your applications (Uncomment and replace with your application start commands)
CMD ["/lib/systemd/systemd"]
# Use a base image
FROM cruizba/ubuntu-dind:latest
# Install necessary packages
RUN apt-get update && \
apt-get install -y wget gnupg2 software-properties-common supervisor make git sudo
# Mount the Docker socket from the host into the container
# VOLUME /var/run/docker.sock:/var/run/docker.sock
# Build app (You can add your application build steps here)
RUN git clone https://github.com/ranchimall/blockbook
# WORKDIR /blockbook
# RUN sudo make all-flo
# Install deb files
# RUN sudo apt install -y ./build/backend-flo_0.15.1.1-satoshilabs-1_amd64.deb && \
# sudo apt install -y ./build/blockbook-flo_0.4.0_amd64.deb
# Download deb files
# RUN wget https://github.com/ranchimall/blockbook/releases/download/flo-v0.4.0-ubuntu/backend-flo_0.15.1.1-satoshilabs-1_amd64.deb \
# https://github.com/ranchimall/blockbook/releases/download/flo-v0.4.0-ubuntu/blockbook-flo_0.4.0_amd64.deb
# Create run flo directory
# RUN mkdir -p /run/flo
# # Create a common group (e.g., flo-group) and set permissions
# RUN groupadd flo-group && \
# usermod -aG flo-group flo && \
# usermod -aG flo-group blockbook-flo && \
# chown :flo-group /run/flo && \
# chmod 777 /run/flo
# Setting up supervisor configurations (Uncomment and add your configuration files)
COPY alt-helper.sh /
# COPY blockbook-flo.conf /etc/supervisor/conf.d/
# COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
# Create log files
# RUN touch /var/log/backend-flo-error.log && \
# touch /var/log/backend-flo.log && \
# touch /var/log/blockbook-flo-error.log && \
# touch /var/log/blockbook-flo.log
# Expose ports
EXPOSE 22 80 9166
# Start supervisord (Uncomment this line)
# CMD ["/usr/bin/supervisord"]
# Start your applications (Uncomment and replace with your application start commands)
CMD ["/usr/bin/bash", "/alt-helper.sh"]

16
Main_net_Dockerfile Normal file
View File

@ -0,0 +1,16 @@
# Use a base image
FROM nestybox/ubuntu-focal-systemd-docker
# Install necessary packages
RUN apt update && \
apt install -y wget gnupg2 software-properties-common unzip
# Download deb files
RUN wget https://github.com/ranchimall/blockbook-docker/archive/main.zip && unzip main.zip
RUN cd blockbook-docker-main && sudo apt install -y ./dind_backend-flo_0.15.1.1-satoshilabs-1_amd64.deb && sudo apt install -y ./dind_blockbook-flo_0.4.0_amd64.deb
# Expose ports
EXPOSE 22 80 9166
# Start your applications (Uncomment and replace with your application start commands)
CMD ["/lib/systemd/systemd"]

146
README.md
View File

@ -1,13 +1,111 @@
# Blockbook docker
## Video-Demonstration For Mainnet
+ https://drive.google.com/file/d/1MQlndJi1w992uhUtGTbf89uq0Q7mZR6k/view?usp=sharing (Only Text)
+ https://www.youtube.com/watch?v=QKd3EriMPx0 (Both Text And Audio)
## Video-Demonstration For Testnet
+ https://youtu.be/EnX3-cBbpcE (Both Text And Audio)
## Pre-requisites
Should have [sysbox installed on your machine](https://github.com/nestybox/sysbox/blob/master/docs/developers-guide/build.md)
## Main commands
## Main commands (For Both Mainnet and Testnet)
```
sudo docker run -d --runtime=sysbox-runc -P -p <hostport>:9166 --name blockbook ranchimallfze/blockbook:1.0.0
```
## Requirements
### Installation of Sysbox:
```
git clone --recursive https://github.com/nestybox/sysbox.git
make (For this step go to the sysbox directory)
make sysbox-static
sudo make install
make sysbox TARGET_ARCH=arm64
sudo ./docker-cfg --sysbox-runtime=enable (For this step go to the scr directory)
<!--If in step 6 command not found error comes then first install jq and then again run this command.-->
```
### For Uninstalling:
```
sudo make uninstall
make clean
```
### Installation of Docker:
```
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/
docker-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/
ubuntu focal stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
<!--Replace focal with your Ubuntu version (e.g., bionic, xenial, or hirsute) if you are using a different version-->
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
sudo docker --version
<!--If installed correctly the version will be displayed-->
```
## How to see available ports ?
+ Open a new terminal on your Ubuntu system and copy the code given below:
```
# Specify the range of ports you want to check (e.g., 8000 to 9000)
start_port=8000
end_port=9000
# Use a loop to check each port in the specified range
for port in $(seq "$start_port" "$end_port"); do
# Use netstat or ss to check if the port is in use
if ! ss -tuln | grep -q ":$port\b"; then
echo "Port $port is available"
fi
done
```
## Running Manually For Both Mainnet And Testnet
+ After the installation of docker and sysbox run the dockerfile.
For running first we build its docker-image by the following command:
```
docker build -t <IMG_NAME> .
<!--If the directory of the dockerfile and the present directory is same-->
docker build -f <PATH_TO_DOCKERFILE> -t <IMG_NAME> <DOCKERFILE DIRECTORY>
<!--If the directory of the dockerfile and the present directory is not same-->
```
+ After building the docker-image use the following command to run it.
```
docker run -d --privileged -p <HOST_PORT>:<CONTAINER_PORT> --name <CONTAINER_NAME> <IMG_NAME>
<!--The container port for our docker file is 9166.-->
docker run -d --privileged -p <HOST_PORT>:9166 --name <CONTAINER_NAME> <IMG_NAME>
```
+ Now access the blockbook by opening the following LINK: https://localhost:<HOST_PORT>/
Use xdg-open https://localhost:<HOST_PORT>/ to open the link through the terminal and can view the interface of Blockbook.
## Testing
The code and steps required to run Docker version of Blockbook block explorer
@ -32,4 +130,48 @@ sudo docker run -v /var/run/docker.sock:/var/run/docker.sock -ti ubuntu:20.04
sudo docker run -d --runtime=sysbox-runc -P -p 9167:9166 5018bee64419
sudo docker run -d --runtime=sysbox-runc --net=host -P 5018bee64419
```
```
## Code Explanation For Mainnet
+ We use the base image "nestybox/ubuntu-focal-systemd-docker," which is an Ubuntu-based image with
systemd for managing system services.
+ We update the package list and installs necessary packages like wget, gnupg2,software-properties-common,
and unzip.
+ The Dockerfile downloads a ZIP archive containing Debian (.deb) files from a GitHub repository and
extracts them.
+ Within the extracted directory, it installs two Debian packages ("dind_backend-flo_0.15.1.1-satoshilabs
-1_amd64.deb" and "dind_blockbook-flo_0.4.0_amd64.deb") using apt .
+ It exposes three ports (22, 80, and 9166) for potential network access.
+ The CMD instruction specifies the default command to run when a container is started based on this
image. In this case, it starts the systemd initialization process.
## Code Explanation For Testnet
+ This line specifies the base image for the Docker container. It starts with a base image called nestybox/ubuntu-focal-systemd-docker,
which includes Ubuntu Focal Fossa (20.04) with systemd support.
+ We run a shell command inside the container during the image-building process. It updates the package list by executing apt
update. The && operator is used to chain multiple commands in a single line.
+ We define an argument named TESTNET with a default value of false. Docker ARGs can be used to pass values at build time, and
in this case, it's determining whether to set up the testnet or the mainnet environment.
+ Inside the if block, this line downloads a ZIP file containing testnet-related files from a GitHub repository using wget and
then unzips it using unzip.
+ If the value of TESTNET is not "true," the else block is executed.Inside the else block, similar to the if block, we download
a different ZIP file (likely containing mainnet-related files) and unzip it.
+ We change the working directory to the one where the mainnet ZIP file was extracted (blockbook-docker-main) and install the
same two Debian packages as in the if block.
+ Use of 'fi' marks the end of the conditional statement, closing the if-else block.
+ Now we expose the ports 22, 80, and 9166 and make them accessible for communication with the host system or other containers.
+ The CMD instruction specifies the default command to run when a container is started based on this
image. In this case, it starts the systemd initialization process.
## Why Sysbox Is Used ?
+ When you run Docker containers inside a Docker container (DinD), the inner containers typically share
the same Docker daemon as the host and other containers. This can lead to security and isolation concerns.
+ Sysbox allows you to run containers within an isolated environment, providing stronger separation
between inner containers, the host, and other outer containers. This is achieved by creating separate container runtimes for each inner container using runc (the OCI runtime).
+ In our dockerfile we are able to execute systemctl command by using sysbox.

24
Test_net_Dockerfile Normal file
View File

@ -0,0 +1,24 @@
# Use a base image
FROM nestybox/ubuntu-focal-systemd-docker
# Install necessary packages
RUN apt update && \
apt install -y wget gnupg2 software-properties-common unzip
# Download deb files based on the TESTNET environment variable
ARG TESTNET=false
# If TESTNET is true, download testnet deb files; otherwise, download mainnet deb files
RUN if [ "$TESTNET" = "true" ]; then \
wget https://github.com/ranchimall/blockbook-docker/archive/testnet.zip && unzip testnet.zip && \
cd blockbook-docker-testnet && sudo apt install -y ./dind_backend-flo_0.15.1.1-satoshilabs-1_amd64.deb && sudo apt install -y ./dind_blockbook-flo_0.4.0_amd64.deb; \
else \
wget https://github.com/ranchimall/blockbook-docker/archive/main.zip && unzip main.zip && \
cd blockbook-docker-main && sudo apt install -y ./dind_backend-flo_0.15.1.1-satoshilabs-1_amd64.deb && sudo apt install -y ./dind_blockbook-flo_0.4.0_amd64.deb; \
fi
# Expose ports
EXPOSE 22 80 9166
# Start your applications (Uncomment and replace with your application start commands)
CMD ["/lib/systemd/systemd"]

23
Testnet_Dockerfile Normal file
View File

@ -0,0 +1,23 @@
# Use a base image
FROM nestybox/ubuntu-focal-systemd-docker
# Install necessary packages
RUN apt update && \
apt install -y wget gnupg2 software-properties-common unzip
# Download and unzip the source code
RUN wget https://github.com/ranchimall/blockbook-docker/archive/main.zip && \
unzip main.zip && \
rm main.zip
# Change working directory to the unzipped source code directory
WORKDIR /blockbook-docker-main
# Install the required Debian packages
RUN apt install -y ./deb-files/dind_backend-flo-testnet_0.15.1.1-satoshilabs-1_amd64.deb && \
apt install -y ./deb-files/dind_blockbook-flo-testnet_0.4.0_amd64.deb
# Expose ports
EXPOSE 22 80 19166
# Start your applications (Uncomment and replace with your application start commands)
CMD ["/lib/systemd/systemd"]

1
blockbook Submodule

@ -0,0 +1 @@
Subproject commit a586ce22e64bb5beddb42d58b6499db024487148