Compare commits

..

10 Commits

Author SHA1 Message Date
Vivek Teega
b60a489df4 Squashed commit of the following:
commit 5d82cb79f9
Author: Vivek Teega <vivek.teega@gmail.com>
Date:   Sat Aug 3 15:30:18 2024 +0530

    remove build workflows

commit 14e392ee8a
Merge: 24f8a63 32821cd
Author: Vivek Teega <vivek.teega@gmail.com>
Date:   Sat Aug 3 15:20:12 2024 +0530

    Merge pull request #15 from vivekteega/upgrade/separate-images

    Merged changes from source-branch as a single commit

commit 32821cd482
Author: Vivek Teega <vivek.teega@gmail.com>
Date:   Sat Aug 3 14:29:00 2024 +0530

    Merged changes from source-branch as a single commit

commit 24f8a637d2
Author: Vivek Teega <vivek.teega@gmail.com>
Date:   Wed Jul 3 21:29:30 2024 +0530

    Preparation for CI CD

commit 95393696ed
Author: Vivek Teega <vivek.teega@gmail.com>
Date:   Tue Jul 2 15:52:47 2024 +0530

    Updated Readme, added comments, minor changes and cleanup

commit 9cbfe96d44
Author: Vivek Teega <vivek.teega@gmail.com>
Date:   Tue Jul 2 15:17:58 2024 +0530

    Structure set in place for Docker compose based deployment

commit b7d99fcd08
Author: Vivek Teega <vivek.teega@gmail.com>
Date:   Wed Jun 12 20:08:31 2024 +0530

    Added changes to entrypoint.sh for frontend to take in IP of backend container for RPC connection

commit a162ab19f3
Author: Vivek Teega <vivek.teega@gmail.com>
Date:   Tue Jun 11 15:48:12 2024 +0530

    Build single image, but separate execution

commit 15b9955f98
Author: Vivek Teega <vivek.teega@gmail.com>
Date:   Sat Jun 8 23:11:36 2024 +0000

    Separated images, attached same volume and port mapping

commit 81b6cee363
Author: Vivek Teega <vivek.teega@gmail.com>
Date:   Sun Jun 9 03:52:19 2024 +0530

    Cleanup and roadmap

commit 76a911542b
Merge: 1f463bd 00b2ca2
Author: Vivek Teega <vivek.teega@gmail.com>
Date:   Mon Jun 3 15:16:45 2024 +0530

    Merge pull request #7 from asif158/upgrade/sysbox-independent

    Initial changes for removing sysbox dependency
2024-08-03 15:33:17 +05:30
Vivek Teega
0114d71b94
Testing workflow 2024-07-03 22:11:41 +05:30
asif158
44c812ae77 Add: new-deb files and dockerfile 2024-06-04 08:51:34 +05:30
asif158
00b2ca2407 Initial changes for removing sysbox dependency 2024-06-03 15:12:06 +05:30
Vivek Teega
1f463bdacb Merge branch 'main' of https://github.com/ranchimall/blockbook-docker into main 2023-10-01 11:02:25 +00:00
Vivek Teega
42829ee6bc Fixing Dockerfiles 2023-10-01 11:02:12 +00:00
Vivek Teega
fff6df970c Adding new deb files for testnet 2023-09-29 18:27:37 +00:00
Vivek Teegalapally
dd13bfb05d Renamed testnet deb files 2023-09-29 05:46:47 +00:00
Vivek Teegalapally
61d16907a1 Added testnet deb files 2023-09-29 05:44:08 +00:00
Vivek Teegalapally
930a069511 Reorganized deb files 2023-09-29 05:40:35 +00:00
26 changed files with 269 additions and 552 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

12
.env.example Normal file
View File

@ -0,0 +1,12 @@
BACKEND_IMAGE=vivekteega/blockbook:1.0.0
FRONTEND_IMAGE=vivekteega/blockbook:1.0.0
BACKEND_CONTAINER_NAME=blockbook-backend
FRONTEND_CONTAINER_NAME=blockbook-frontend
BACKEND_BOOTSTRAP_FILE=/path/to/your/bootstrap-blockbook-flo-mainnet-backend.tar.gz # Set to empty string if not provided
FRONTEND_BOOTSTRAP_FILE=/path/to/your/bootstrap-blockbook-flo-mainnet-frontend.tar.gz # Set to empty string if not provided
BACKEND_BOOTSTRAP_URL=/path/to/your/bootstrap-blockbook-flo-mainnet-backend.tar.gz # Set to empty string if not provided
FRONTEND_BOOTSTRAP_URL=/path/to/your/bootstrap-blockbook-flo-mainnet-frontend.tar.gz # Set to empty string if not provided
BACKEND_PORT_1=38366
BACKEND_PORT_2=8066
FRONTEND_PORT_1=9166
FRONTEND_PORT_2=9066

36
.github/workflows/docker-image.yml vendored Normal file
View File

@ -0,0 +1,36 @@
name: Docker Image CI
on:
push:
branches: [ "upgrade/separate-images/ci-cd-testing" ]
pull_request:
branches: [ "upgrade/separate-images/ci-cd-testing" ]
jobs:
build:
runs-on: self-hosted
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Log in to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Build and push Docker image
uses: docker/build-push-action@v4
with:
context: .
push: true
tags: ${{ secrets.DOCKER_HUB_USERNAME }}/blockbook:1.0.0
- name: Log out from Docker Hub
run: docker logout

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
.env
playbook.yml

View File

@ -1,42 +0,0 @@
[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

@ -1,38 +0,0 @@
[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,52 +1,21 @@
# Use a base image
FROM cruizba/ubuntu-dind:latest
FROM ubuntu:22.04
# Install necessary packages
RUN apt-get update && \
apt-get install -y wget gnupg2 software-properties-common supervisor make git sudo
# Backend
COPY ./deb-files/backend-flo_0.15.1.1-satoshilabs-1_amd64.deb /opt/backend.deb
COPY ./deb-files/blockbook-flo_0.4.0_amd64.deb /opt/blockbook.deb
# Mount the Docker socket from the host into the container
# VOLUME /var/run/docker.sock:/var/run/docker.sock
RUN apt update && apt install -y /opt/backend.deb /opt/blockbook.deb curl && \
sed -i 's/daemon=1/daemon=0/' /opt/coins/nodes/flo/flo.conf && \
sed -i '/rpcport=8066/a rpcallowip=0.0.0.0/0' /opt/coins/nodes/flo/flo.conf && \
echo "addnode=ramanujam.ranchimall.net" >> /opt/coins/nodes/flo/flo.conf && \
echo "addnode=turing.ranchimall.net" >> /opt/coins/nodes/flo/flo.conf && \
echo "addnode=stevejobs.ranchimall.net" >> /opt/coins/nodes/flo/flo.conf && \
echo "addnode=brahmagupta.ranchimall.net" >> /opt/coins/nodes/flo/flo.conf && \
echo "addnode=feynman.ranchimall.net" >> /opt/coins/nodes/flo/flo.conf
# 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
WORKDIR /opt/coins/blockbook/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"]
# Execution
COPY ./entrypoint.sh /opt/entrypoint.sh
RUN chmod +x /opt/entrypoint.sh
ENTRYPOINT ["/opt/entrypoint.sh"]

View File

@ -1,52 +0,0 @@
# 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"]

View File

@ -1,55 +0,0 @@
# syntax=docker/dockerfile:1.3-labs
# Use a base image
FROM cruizba/ubuntu-dind:focal-24.0.6
# Install necessary packages
RUN apt update && \
apt install -y wget gnupg2 software-properties-common supervisor sudo unzip
# 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 --security=insecure cd /blockbook && 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-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
# 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
COPY prebuilt-helper.sh /
# 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", "/prebuilt-helper.sh"]

View File

@ -1,16 +0,0 @@
# 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"]

181
README.md
View File

@ -1,177 +1,48 @@
# Blockbook docker
## Roadmap for upgrade
## 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)
- [ ] How to set this up in production
- [ ] Think of how Blockbook container will detect the status of backend container
- [ ] Figure out if multiple volume path need to be mounted
- [ ] See if creating a new network for both the containers will be a good option.
---
- [X] [Unable to build frontend separately since having backend package installed is a dependency] Create separate images for both backend and blockbook.
- [X] Attach the same volume to both the running containers of the images.
## Video-Demonstration For Testnet
+ https://youtu.be/EnX3-cBbpcE (Both Text And Audio)
## Quickstart
## Pre-requisites
Should have [sysbox installed on your machine](https://github.com/nestybox/sysbox/blob/master/docs/developers-guide/build.md)
To run the services using this file create a .env file using .env.example file, fill info and run the following command in the same directory:
## 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
sudo docker-compose up -d
```
## 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-->
## Running blockbook manually
```
## How to see available ports ?
docker volume create blockbook
+ Open a new terminal on your Ubuntu system and copy the code given below:
```
docker network create blockbook
# Specify the range of ports you want to check (e.g., 8000 to 9000)
start_port=8000
end_port=9000
# Run backend in "it" mode for testing
docker run -it --name blockbook-backend --mount source=blockbook,target=/opt -p 38366:38366 -p 8066:8066 --network=blockbook vivekteega/blockbook:1.0.0 backend
# 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
# Run backend in daemon mode for production
docker run -d --name blockbook-backend --mount source=blockbook,target=/opt -p 38366:38366 -p 8066:8066 --network=blockbook vivekteega/blockbook:1.0.0 backend
```
# Run backend in daemon mode for production with Bootstrap
docker run -d --name blockbook-backend --mount source=blockbook,target=/opt -p 38366:38366 -p 8066:8066 --network=blockbook --env BOOTSTRAP_URL=https://bootstrap.ranchimall.net/blockbook-flo-backend1.tar.gz vivekteega/blockbook:1.0.0 backend
# Run frontend in "it" mode for testing
docker run -it --name blockbook-frontend --mount source=blockbook,target=/opt -p 9166:9166 -p 9066:9066 --network=blockbook vivekteega/blockbook:1.0.0 frontend 172.20.0.2
## Running Manually For Both Mainnet And Testnet
# Run frontend in daemon mode for production
docker run -d --name blockbook-frontend --mount source=blockbook,target=/opt -p 9166:9166 -p 9066:9066 --network=blockbook vivekteega/blockbook:1.0.0 frontend 172.20.0.2
+ 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
# Bootstrap
docker run -d --name blockbook-frontend --mount source=blockbook,target=/opt -p 9166:9166 -p 9066:9066 --network=blockbook --env BOOTSTRAP_URL=https://bootstrap.ranchimall.net/blockbook-flo-frontend.tar.gz vivekteega/blockbook:1.0.0 frontend 172.20.0.2
```
sudo docker build -t blockbook-althelper -f Dockerfile-althelper .
sudo docker run -d --privileged -p 9166:9166 d5e56e218acd
```
```
docker buildx create --driver-opt image=moby/buildkit:master --use --name insecure-builder --buildkitd-flags '--allow-insecure-entitlement security.insecure'
docker buildx use insecure-builder
docker buildx build --allow security.insecure ...(other build args)...
sudo docker buildx build --allow security.insecure -t blockbook .
docker buildx rm insecure-builder
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.

View File

@ -1,24 +0,0 @@
# 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"]

View File

@ -1,23 +0,0 @@
# 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"]

View File

@ -1,28 +0,0 @@
cd /blockbook && sudo make all-flo
#1. Install deb files
cd /blockbook/build && sudo apt install -y ./backend-flo_0.15.1.1-satoshilabs-1_amd64.deb
cd /blockbook/build && sudo apt install -y ./blockbook-flo_0.4.0_amd64.deb
#2. create run flo dir
mkdir -p /run/flo
#3. create a group and add flo and blockbook-flo & set permission for dir
# Create a common group (e.g., flo-group)
groupadd flo-group
# Add users to the common group
usermod -aG flo-group flo
usermod -aG flo-group blockbook-flo
# Set the common group ownership on the directory
chown :flo-group /run/flo
# Give the group read-write permissions on the directory
chmod 777 /run/flo
# 4. run main commands as user
su -s /bin/bash -c "/opt/coins/nodes/flo/bin/flod -datadir=/opt/coins/data/flo/backend -conf=/opt/coins/nodes/flo/flo.conf -pid=/run/flo/flo.pid" flo
su -s /bin/bash -c "cd /opt/coins/blockbook/flo && /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" blockbook-flo

View File

@ -1,8 +0,0 @@
[program:backend-flo]
command=/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
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/backend-flo.log
stderr_logfile=/var/log/backend-flo-error.log

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

View File

@ -1,8 +0,0 @@
[program:blockbook-flo]
command=/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=root
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/blockbook-flo.log
stderr_logfile=/var/log/blockbook-flo-error.log

View File

@ -1,35 +0,0 @@
# Install make and git
apt install -y make git sudo
wget https://github.com/ranchimall/blockbook/releases/download/flo-v0.4.0-ubuntu/backend-flo_0.15.1.1-satoshilabs-1_amd64.deb
wget https://github.com/ranchimall/blockbook/releases/download/flo-v0.4.0-ubuntu/blockbook-flo_0.4.0_amd64.deb
#1. Install deb files
apt install sudo
sudo apt install -y /opt/backend-flo_0.15.1.1-satoshilabs-1_amd64.deb
sudo apt install -y /opt/blockbook-flo_0.4.0_amd64.deb
#2. create run flo dir
mkdir -p /run/flo
#3. create a group and add flo and blockbook-flo & set permission for dir
# Create a common group (e.g., flo-group)
groupadd flo-group
# Add users to the common group
usermod -aG flo-group flo
usermod -aG flo-group blockbook-flo
# Set the common group ownership on the directory
chown :flo-group /run/flo
# Give the group read-write permissions on the directory
chmod 777 /run/flo
# 4. run main commands as user
# su -s /bin/bash -c "/opt/coins/nodes/flo/bin/flod -datadir=/opt/coins/data/flo/backend -conf=/opt/coins/nodes/flo/flo.conf -pid=/run/flo/flo.pid" flo
# su -s /bin/bash -c "/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" blockbook-flo

Binary file not shown.

45
docker-compose.yml Normal file
View File

@ -0,0 +1,45 @@
version: '3.8'
services:
blockbook-backend:
image: ${BACKEND_IMAGE}
container_name: ${BACKEND_CONTAINER_NAME}
networks:
- blockbook
volumes:
- blockbook:/opt
- ${BACKEND_BOOTSTRAP_FILE:-/dev/null}:/local-bootstrap/bootstrap-blockbook-flo-mainnet-backend.tar.gz # Use /dev/null if no file
ports:
- "${BACKEND_PORT_1}:38366"
- "${BACKEND_PORT_2}:8066"
command: backend
environment:
- BOOTSTRAP_FILE=/local-bootstrap/bootstrap-blockbook-flo-mainnet-backend.tar.gz # Set to empty string if not provided
- BOOTSTRAP_URL=${BACKEND_BOOTSTRAP_URL:-} # Set to empty string if not provided
blockbook-frontend:
image: ${FRONTEND_IMAGE}
container_name: ${FRONTEND_CONTAINER_NAME}
networks:
- blockbook
volumes:
- blockbook:/opt
- ${FRONTEND_BOOTSTRAP_FILE:-/dev/null}:/local-bootstrap/bootstrap-blockbook-flo-mainnet-frontend.tar.gz # Use /dev/null if no file
ports:
- "${FRONTEND_PORT_1}:9166"
- "${FRONTEND_PORT_2}:9066"
depends_on:
- blockbook-backend
entrypoint: /bin/sh -c
command: >
"/opt/entrypoint.sh frontend $(getent hosts blockbook-backend | awk '{ print $1 }')"
environment:
- BOOTSTRAP_FILE=/local-bootstrap/bootstrap-blockbook-flo-mainnet-frontend.tar.gz # Set to empty string if not provided
- BOOTSTRAP_URL=${FRONTEND_BOOTSTRAP_URL:-} # Set to empty string if not provided
volumes:
blockbook:
networks:
blockbook:
driver: bridge

131
entrypoint.sh Normal file
View File

@ -0,0 +1,131 @@
#!/bin/sh
set -e
# Paths for frontend bootstrap files
FRONTEND_BOOTSTRAP_URL_FILE="/opt/coins/data/flo/blockbook/bootstrap-url.txt"
FRONTEND_BOOTSTRAP_FILE_HASH_FILE="/opt/coins/data/flo/blockbook/bootstrap-file-hash.txt"
# Paths for backend bootstrap files
BACKEND_BOOTSTRAP_URL_FILE="/opt/coins/data/flo/backend/bootstrap-url.txt"
BACKEND_BOOTSTRAP_FILE_HASH_FILE="/opt/coins/data/flo/backend/bootstrap-file-hash.txt"
# Function to calculate the hash of a file
calculate_file_hash() {
local file=$1
sha256sum "$file" | awk '{print $1}'
}
# Function to update config file
update_config_file() {
local config_path=$1
local new_ip=$2
if [ -n "$new_ip" ]; then
echo "Updating config file: $config_path with IP: $new_ip"
if ! sed -i "s/127.0.0.1/$new_ip/g" "$config_path"; then
echo "Failed to update config file: $config_path"
exit 1
fi
fi
}
# Function to handle bootstrap from URL
handle_bootstrap_url() {
local bootstrap_url=$1
local destination_dir=$2
local url_file=$3
local bootstrap_file=$4
if [ -z "$bootstrap_url" ]; then
echo "No bootstrap URL provided, skipping download."
return
fi
if [ -f "$url_file" ]; then
local existing_url
existing_url=$(cat "$url_file")
if [ "$existing_url" = "$bootstrap_url" ]; then
echo "Bootstrap URL already processed, skipping download and extraction."
return
fi
fi
echo "Downloading bootstrap file from: $bootstrap_url"
curl -L -o "/tmp/$bootstrap_file" "$bootstrap_url"
echo "Cleaning and extracting bootstrap file to: $destination_dir"
mkdir -p "$destination_dir"
rm -rf "$destination_dir"/*
tar -xzvf "/tmp/$bootstrap_file" -C "$destination_dir"
rm "/tmp/$bootstrap_file"
echo "$bootstrap_url" > "$url_file"
}
# Function to handle bootstrap from file
handle_bootstrap_file() {
local bootstrap_file=$1
local destination_dir=$2
local hash_file=$3
if [ -z "$bootstrap_file" ] || [ ! -f "$bootstrap_file" ]; then
echo "No valid bootstrap file provided, skipping extraction."
return
fi
local new_hash
new_hash=$(calculate_file_hash "$bootstrap_file")
if [ -f "$hash_file" ]; then
local existing_hash
existing_hash=$(cat "$hash_file")
if [ "$existing_hash" = "$new_hash" ]; then
echo "Bootstrap file already processed, skipping extraction."
return
fi
fi
echo "Using bootstrap file: $bootstrap_file"
echo "Cleaning and extracting bootstrap file to: $destination_dir"
mkdir -p "$destination_dir"
rm -rf "$destination_dir"/*
tar -xzf "$bootstrap_file" -C "$destination_dir"
echo "$new_hash" > "$hash_file"
}
case "$1" in
"frontend")
if [ -z "$2" ]; then
echo "Missing parameter: new_ip for frontend"
exit 1
fi
new_ip=$2
echo "Running frontend command with IP: $new_ip"
if [ -n "$BOOTSTRAP_FILE" ] && [ -f "$BOOTSTRAP_FILE" ]; then
handle_bootstrap_file "$BOOTSTRAP_FILE" "/opt/coins/data/flo/blockbook" "$FRONTEND_BOOTSTRAP_FILE_HASH_FILE"
elif [ -n "$BOOTSTRAP_URL" ]; then
handle_bootstrap_url "$BOOTSTRAP_URL" "/opt/coins/data/flo/blockbook" "$FRONTEND_BOOTSTRAP_URL_FILE" "bootstrap-frontend.tar.gz"
fi
update_config_file "/opt/coins/blockbook/flo/config/blockchaincfg.json" "$new_ip"
cd /opt/coins/blockbook/flo
exec /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
;;
"backend")
echo "Running backend command"
if [ -n "$BOOTSTRAP_FILE" ] && [ -f "$BOOTSTRAP_FILE" ]; then
handle_bootstrap_file "$BOOTSTRAP_FILE" "/opt/coins/data/flo/backend" "$BACKEND_BOOTSTRAP_FILE_HASH_FILE"
elif [ -n "$BOOTSTRAP_URL" ]; then
handle_bootstrap_url "$BOOTSTRAP_URL" "/opt/coins/data/flo/backend" "$BACKEND_BOOTSTRAP_URL_FILE" "bootstrap-backend.tar.gz"
fi
cd /opt/coins/nodes/flo
exec /opt/coins/nodes/flo/bin/flod -datadir=/opt/coins/data/flo/backend -conf=/opt/coins/nodes/flo/flo.conf -pid=/run/flo/flo.pid
;;
*)
echo "Invalid option: $1"
echo "Usage: $0 {frontend new_ip|backend}"
exit 1
;;
esac

View File

@ -1,3 +0,0 @@
sudo systemctl start backend-flo.service
sudo systemctl start blockbook-flo.service

View File

@ -1,3 +0,0 @@
su -s /bin/bash -c "/opt/coins/nodes/flo/bin/flod -datadir=/opt/coins/data/flo/backend -conf=/opt/coins/nodes/flo/flo.conf -pid=/run/flo/flo.pid" flo
su -s /bin/bash -c "cd /opt/coins/blockbook/flo && /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" blockbook-flo

View File

@ -1,13 +0,0 @@
[supervisord]
nodaemon=true
user=root
[program:backend-flo]
command=/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
autostart=false
autorestart=false
redirect_stderr=true
stdout_logfile=/var/log/backend-flo.log
stderr_logfile=/var/log/backend-flo-error.log