builds a network of nodes
This commit is contained in:
28
.dockerignore
Normal file
28
.dockerignore
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
# Rust build artifacts
|
||||||
|
/target/
|
||||||
|
**/*.rs.bk
|
||||||
|
|
||||||
|
# Git directory
|
||||||
|
.git/
|
||||||
|
.github/
|
||||||
|
.gitignore
|
||||||
|
|
||||||
|
# Editor files
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
|
||||||
|
# Node.js files (from packages directory)
|
||||||
|
node_modules/
|
||||||
|
npm-debug.log
|
||||||
|
|
||||||
|
# Other unnecessary files
|
||||||
|
*.md
|
||||||
|
LICENSE
|
||||||
|
*.log
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# Keep necessary files
|
||||||
|
!Cargo.toml
|
||||||
|
!Cargo.lock
|
73
Dockerfile
Normal file
73
Dockerfile
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
# Multistage Dockerfile for gsio-node
|
||||||
|
|
||||||
|
# Build stage
|
||||||
|
FROM rust:slim as builder
|
||||||
|
|
||||||
|
# Install build dependencies
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get install -y --no-install-recommends \
|
||||||
|
pkg-config \
|
||||||
|
libssl-dev \
|
||||||
|
build-essential \
|
||||||
|
git \
|
||||||
|
ca-certificates \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Create a new empty project
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY Cargo.toml Cargo.lock ./
|
||||||
|
COPY crates/gsio-node/Cargo.toml ./crates/gsio-node/
|
||||||
|
COPY crates/gsio-relay/Cargo.toml ./crates/gsio-relay/
|
||||||
|
COPY crates/gsio-client/Cargo.toml ./crates/gsio-client/
|
||||||
|
COPY crates/gsio-wallet/Cargo.toml ./crates/gsio-wallet/
|
||||||
|
|
||||||
|
# Create dummy source files to build dependencies
|
||||||
|
RUN mkdir -p crates/gsio-node/src && \
|
||||||
|
echo 'fn main() { println!("Dummy!"); }' > crates/gsio-node/src/main.rs && \
|
||||||
|
mkdir -p crates/gsio-relay/src && \
|
||||||
|
echo 'fn main() { println!("Dummy!"); }' > crates/gsio-relay/src/lib.rs && \
|
||||||
|
mkdir -p crates/gsio-client/src && \
|
||||||
|
echo 'fn main() { println!("Dummy!"); }' > crates/gsio-client/src/main.rs && \
|
||||||
|
mkdir -p crates/gsio-wallet/src && \
|
||||||
|
echo 'pub fn dummy() {}' > crates/gsio-wallet/src/lib.rs
|
||||||
|
|
||||||
|
# Create dummy source files to build dependencies
|
||||||
|
|
||||||
|
|
||||||
|
# Build dependencies - this will be cached if dependencies don't change
|
||||||
|
RUN cargo build --release --bin gsio-node
|
||||||
|
|
||||||
|
# Remove the dummy source files
|
||||||
|
RUN rm -rf crates/*/src
|
||||||
|
|
||||||
|
# Copy the actual source code
|
||||||
|
COPY crates ./crates
|
||||||
|
|
||||||
|
# Build the application
|
||||||
|
RUN cargo build --release --bin gsio-node
|
||||||
|
|
||||||
|
# Runtime stage
|
||||||
|
FROM debian:bookworm-slim
|
||||||
|
|
||||||
|
# Install runtime dependencies
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get install -y --no-install-recommends \
|
||||||
|
ca-certificates \
|
||||||
|
libssl3 \
|
||||||
|
wget \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Create a non-root user to run the application
|
||||||
|
RUN useradd -m appuser
|
||||||
|
USER appuser
|
||||||
|
WORKDIR /home/appuser
|
||||||
|
|
||||||
|
# Copy the binary from the builder stage
|
||||||
|
COPY --from=builder --chown=appuser:appuser /app/target/release/gsio-node .
|
||||||
|
|
||||||
|
# Expose the port the app runs on
|
||||||
|
EXPOSE 3000
|
||||||
|
|
||||||
|
# Command to run the application
|
||||||
|
CMD ["./gsio-node"]
|
86
docker-compose.yml
Normal file
86
docker-compose.yml
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
version: '3.8'
|
||||||
|
# GSIO-Net Docker Compose Configuration
|
||||||
|
#
|
||||||
|
# This file defines a network of GSIO-Net nodes that can communicate with each other.
|
||||||
|
# It creates three nodes, each exposing the API on a different host port:
|
||||||
|
# - node1: http://localhost:3001
|
||||||
|
# - node2: http://localhost:3002
|
||||||
|
# - node3: http://localhost:3003
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# - Start the network: docker-compose up -d
|
||||||
|
# - View logs: docker-compose logs -f
|
||||||
|
# - Stop the network: docker-compose down
|
||||||
|
# - Stop and remove volumes: docker-compose down -v
|
||||||
|
|
||||||
|
services:
|
||||||
|
# Node 1
|
||||||
|
node1:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
container_name: gsio-node1
|
||||||
|
ports:
|
||||||
|
- "3001:3000" # Map to different host ports to avoid conflicts
|
||||||
|
volumes:
|
||||||
|
- node1-data:/home/appuser/data
|
||||||
|
networks:
|
||||||
|
- gsio-network
|
||||||
|
restart: unless-stopped
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "wget", "-q", "--spider", "http://localhost:3000"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
start_period: 10s
|
||||||
|
|
||||||
|
# Node 2
|
||||||
|
node2:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
container_name: gsio-node2
|
||||||
|
ports:
|
||||||
|
- "3002:3000"
|
||||||
|
volumes:
|
||||||
|
- node2-data:/home/appuser/data
|
||||||
|
networks:
|
||||||
|
- gsio-network
|
||||||
|
restart: unless-stopped
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "wget", "-q", "--spider", "http://localhost:3000"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
start_period: 10s
|
||||||
|
|
||||||
|
# Node 3
|
||||||
|
node3:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
container_name: gsio-node3
|
||||||
|
ports:
|
||||||
|
- "3003:3000"
|
||||||
|
volumes:
|
||||||
|
- node3-data:/home/appuser/data
|
||||||
|
networks:
|
||||||
|
- gsio-network
|
||||||
|
restart: unless-stopped
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "wget", "-q", "--spider", "http://localhost:3000"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
start_period: 10s
|
||||||
|
|
||||||
|
# Define volumes for persistent storage
|
||||||
|
volumes:
|
||||||
|
node1-data:
|
||||||
|
node2-data:
|
||||||
|
node3-data:
|
||||||
|
|
||||||
|
# Define a custom network for the nodes to communicate
|
||||||
|
networks:
|
||||||
|
gsio-network:
|
||||||
|
driver: bridge
|
Reference in New Issue
Block a user