builds a network of nodes

This commit is contained in:
geoffsee
2025-06-15 16:01:06 -04:00
parent 6276ee52c2
commit ff956c98da
3 changed files with 187 additions and 0 deletions

28
.dockerignore Normal file
View 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
View 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
View 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