Capital Index Database Middleware

Overview

About This Project

The Capital Index Database Middleware provides an abstraction layer for your database, enhancing query management and change monitoring. It streamlines database interactions while ensuring efficient performance and security.

Repository Contents

This repository includes:

  • Middleware Source Code The core logic for database interaction.
  • Dockerfile Configuration for containerized deployment.
  • Install & Management Scripts Scripts for streamlined installation and maintenance.

Table of Content:

Getting Started

Installation

Step 1: Install Required Dependencies

Before installing, ensure you have the necessary dependencies to download and build the Docker container.

Debian/Ubuntu
sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install -y wget git docker.io

[Optional] Install Docker BuildKit:

sudo apt-get install -y docker-buildx
CentOS/Fedora

Note: If using CentOS 7, replace dnf with yum.

sudo dnf update -y && sudo dnf upgrade -y
sudo dnf install -y wget git docker

[Optional] Install Docker BuildKit:

sudo dnf install -y docker-buildx
Arch Linux
sudo pacman -Syu --noconfirm
sudo pacman -S --noconfirm wget git docker

[Optional] Install Docker BuildKit:

sudo pacman -S --noconfirm docker-buildx
Alpine Linux
sudo apk update && sudo apk upgrade
sudo apk add --no-cache wget git docker

[Optional] Install Docker BuildKit:

sudo apk add --no-cache docker-cli-buildx

Step 2: Run the Setup Script

After installing dependencies, configure Docker permissions and run the setup script:

  1. Add your user to the Docker group and re-login:

    sudo usermod -aG docker $USER && sudo su - $USER
    
  2. Download and execute the setup.sh script:

    mkdir -p ~/.db-middleware/scripts \
    && rm -rf ~/.db-middleware/scripts/* \
    && cd ~/.db-middleware/scripts \
    && wget -qO setup.sh https://gitea.abdulhade.com/abdulhade/db-middleware/raw/branch/main/scripts/setup.sh \
    && bash setup.sh
    
  3. Give the container permission to edit its files:

    sudo groupadd -g 2000 dbmiddleware
    sudo usermod -aG dbmiddleware $USER
    sudo chown -R $USER:dbmiddleware /home/$USER/.db-middleware/files
    sudo chmod -R 775 /home/$USER/.db-middleware/files
    

Configuration

During installation, you will be prompted to configure the following variables:

1. API_PORT

  • Defines the port the middleware listens on.
  • Default: 8080
  • Access within your machine: http://localhost:8080
  • Ensure this port is forwarded if external access is required.

2. CONTAINER_NAME

  • Specifies the name of the Docker container running the middleware.

3. HAS_LOCAL_DBS

Determines how the middleware connects to databases:

  • Enter 0 If all the databases are hosted on a remote server.
  • Enter 1 If one or more of the database runs on the same machine.

Note: By default, Docker containers operate on an isolated network. If your database is local, the middleware must be configured to run on the same network to ensure connectivity.

Test your setup

Using the status command:

Check the status of the container

$ db-middleware status

If the container is stopped, run db-middleware start command.

It shows something like this:
Config file loaded successfully.

+------------------------------+
| Checking container status... |
+------------------------------+


+--------------------------------------------+
| Database Middleware Status:                |
|                                            |
|                                            |
| [Container]                                |
|                                            |
|   Name: con-db-middleware                  |
|   Status: Up 11 minutes                    |
|                                            |
| [Performance]                              |
|                                            |
|   CPU Usage: 0.33%                         |
|   Memory Usage: 62.27MiB / 3.63GiB (1.68%) |
|   Block I/O: 0B / 0B                       |
|   Network I/O: 6.34kB / 4.09kB             |
|                                            |
| [Network]                                  |
|                                            |
|   Network Mode: bridge                     |
|   IP Address: 172.17.0.2                   |
| 172.17.0.2                                 |
|   Ports: 0.0.0.0:8080->8080/tcp            |
|                                            |
| [App]                                      |
|                                            |
|   Run Command: "bash /app/scripts/run.sh"  |
+--------------------------------------------+

Using the test_setup command:

If the container is created and running, use the test setup command:

$ db-middleware test_setup
Config file loaded successfully.

+-------------------------------------------+
| Container 'con-db-middleware' is Found.   |
| Container 'con-db-middleware' is running. |
| App returned Ok to ping request.          |
+-------------------------------------------+

Run it and make it available to use

First make sure it is running by calling the db-middleware start command.

Create your first admin user

We have two types of users, admin and regular (called just user), the admin can add/update/delete database connections, and create/delete normal users.

We recommend creating one admin user, and use that to create normal users via the API.

To create your first admin user, simply use the create_user command:

$ db-middleware create_user
Config file loaded successfully.
Enter username: myadmin
Enter role (admin/user): admin

+-----------------------------------------------------------------------------+
| > User 'myadmin' with role 'admin' created successfully.                    |
| > API Key: 4887f28e378dfd99e622833ccbebc174a45d                             |
+-----------------------------------------------------------------------------+

You don't need passwords for this, just the username and role.

Expose the API

This app currently runs on your local network only, we need to expose it so the data consumer on the Data Analysis product can access it and consume the data it provides.

  1. Create the config file:

    /etc/nginx/sites-available/your_domain_com.conf


server {

    server_name "your_domain.com";   # Replace with your domain
    
    listen 80;
    listen [::]:80; 
    client_max_body_size 10G;

    proxy_connect_timeout 7d;
    proxy_send_timeout    7d;
    proxy_read_timeout    7d;
    send_timeout          7d;
    keepalive_timeout     7d;

    proxy_buffer_size 128k;
    proxy_buffers 4 256k;
    proxy_busy_buffers_size 256k;

    proxy_set_header Accept-Encoding "";

    location / {
        proxy_pass http://localhost:8080; # Replace with the port you set [default 8080].
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
  1. Enable the Config

sudo ln -s /etc/nginx/sites-available/your_domain_com.conf /etc/nginx/sites-enabled/
sudo nginx -t  # Test config
sudo systemctl restart nginx


For further assistance, refer to the project documentation or open an issue in the repository.

Description
No description provided
Readme 165 KiB
Languages
Python 70.1%
Shell 27.8%
Dockerfile 1.4%
Mako 0.7%