Installation

Build docker images and run guide for Mega

Clone Repository and Run with Docker

To get started, you can clone the mega repository directly from GitHub.

1

Step 1: Clone the Mega Repository

Begin by cloning the Mega repository from GitHub:

git clone https://github.com/web3infra-foundation/mega.git
2

Step 2: Access the Project Directory and Build Docker Images

After cloning, navigate into the project directory to building the Docker images:

cd mega
git submodule update --init --recursive
docker buildx build -t mega:mono-pg-0.1-pre-release -f ./docker/mono-pg-dockerfile .
docker buildx build -t mega:mono-engine-0.1-pre-release -f ./docker/mono-engine-dockerfile .
docker buildx build -t mega:mono-ui-0.1-pre-release -f ./docker/mono-ui-dockerfile .
3

Step 3: Initialize for mono-engine and PostgreSQL

Initialize the configuration for the mono-engine and PostgreSQL:

Warning:

After initializing the configuration, you need to edit the config.toml file to set the correct values for your environment.

for Linux or MacOS:

./docker/init-volume.sh /mnt/data ./docker/config.toml

for Windows:

.\init-volume.ps1 -baseDir "D:\" -configFile ".\config.toml"
4

Step 4: Start Whole Mono Engine Stack on local or server with domain

Start whole mono engine stack on local for testing

  # create network
  docker network create mono-network

  # run postgres
  docker run --rm -it -d --name mono-pg --network mono-network -v /tmp/data/mono/pg-data:/var/lib/postgresql/data -p 5432:5432 mega:mono-pg-0.1-pre-release
  docker run --rm -it -d --name mono-engine --network mono-network -v /tmp/data/mono/mono-data:/opt/mega -p 8000:8000 mega:mono-engine-0.1-pre-release
  docker run --rm -it -d --name mono-ui --network mono-network -e MEGA_INTERNAL_HOST=http://mono-engine:8000 -e MEGA_HOST=http://localhost:8000 -p 3000:3000 mega:mono-ui-0.1-pre-release

Start whole mono engine stack on server with domain

  # create network
  docker network create mono-network

  # run postgres
  docker run --rm -it -d --name mono-pg --network mono-network --memory=4g -v /mnt/data/mono/pg-data:/var/lib/postgresql/data -p 5432:5432 mega:mono-pg-0.1-pre-release
  docker run --rm -it -d --name mono-engine --network mono-network --memory=8g -v /mnt/data/mono/mono-data:/opt/mega -p 8000:8000 -p 22:9000 mega:mono-engine-0.1-pre-release
  docker run --rm -it -d --name mono-ui --network mono-network --memory=1g -e MEGA_INTERNAL_HOST=http://mono-engine:8000 -e MEGA_HOST=https://git.gitmega.dev -p 3000:3000 mega:mono-ui-0.1-pre-release
5

Option: Nginx Configuration for Mono

server {
    listen 80;
    listen [::]:80;
    server_name git.gitmega.dev;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name git.gitmega.org;

    ssl_certificate /etc/letsencrypt/live/git.gitmega.dev/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/git.gitmega.dev/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_session_tickets off;

    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    add_header Strict-Transport-Security "max-age=63072000" always;

    client_max_body_size 5G;

    access_log /var/log/nginx/git.gitmega.access.log;
    error_log /var/log/nginx/git.gitmega.error.log;

    location / {
        proxy_pass  http://127.0.0.1:8000;
    }

}

server {
    listen 80;
    listen [::]:80;
    server_name console.gitmega.dev;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name console.gitmega.dev;

    ssl_certificate /etc/letsencrypt/live/console.gitmega.dev/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/console.gitmega.dev/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_session_tickets off;

    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    add_header Strict-Transport-Security "max-age=63072000" always;

    access_log /var/log/nginx/console.gitmega.access.log;
    error_log /var/log/nginx/console.gitmega.error.log;

    location / {
        proxy_pass  http://127.0.0.1:3000;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_set_header Origin $scheme://$host;
    }

}

Quick Setup with Docker Hub

For a faster setup, pull images from the Docker Hub in one step:

docker pull genedna/mega:mono-pg-0.1-pre-release
docker pull genedna/mega:mono-engine-0.1-pre-release
docker pull genedna/mega:mono-ui-0.1-pre-release

Warning:

Befor run with the following commands, you must initialize the volume and configuration files for mono-engine and PostgreSQL.

# create network
$ docker network create mono-network

# run postgres
$ docker run --rm -it -d --name mono-pg --network mono-network -v /tmp/data/mono/pg-data:/var/lib/postgresql/data -p 5432:5432 genedna/mega:mono-pg-0.1-pre-release
$ docker run --rm -it -d --name mono-engine --network mono-network -v /tmp/data/mono/mono-data:/opt/mega -p 8000:8000 genedna/mega:mono-engine-0.1-pre-release
$ docker run --rm -it -d --name mono-ui --network mono-network -e MEGA_INTERNAL_HOST=http://mono-engine:8000 -e MEGA_HOST=http://console.gitmega.dev -p 3000:3000 genedna/mega:mono-ui-0.1-pre-release