From d54ce8823ed06adcd4b128f661ad8fc45a2ff19d Mon Sep 17 00:00:00 2001 From: khuzama98 Date: Sun, 6 Jul 2025 10:35:35 +0500 Subject: [PATCH 1/2] feat(docker): add Docker support and usage instructions in README --- .dockerignore | 42 ++++++++++++++++++++++++++++++++++++++++++ Dockerfile | 45 +++++++++++++++++++++++++++++++++++++++++++++ README.md | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 121 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..8473e2a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,42 @@ +# Build artifacts +target/ +**/*.rs.bk +*.pdb + +# IDE files +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# OS generated files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# Git +.git/ +.gitignore + +# Docker +Dockerfile +.dockerignore + +# Documentation and assets +README.md +LICENSE +assets/ +**/*.md + +# GitHub +.github/ + +# Other +.env +.env.local +.env.*.local \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..c1301b1 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,45 @@ +# Multi-stage build for Rex CLI +# Stage 1: Build stage +FROM rustlang/rust:nightly-slim AS builder + +# Install system dependencies needed for building +RUN apt-get update && apt-get install -y \ + git \ + pkg-config \ + libssl-dev \ + && rm -rf /var/lib/apt/lists/* + +# Set working directory +WORKDIR /rex + +# Copy workspace files +COPY Cargo.toml Cargo.lock ./ +COPY cli/ ./cli/ +COPY sdk/ ./sdk/ + +# Build the CLI binary with optimizations +RUN cargo build --release --bin rex + +# Stage 2: Runtime stage +FROM debian:bookworm-slim + +# Install runtime dependencies +RUN apt-get update && apt-get install -y \ + ca-certificates \ + && rm -rf /var/lib/apt/lists/* + +# Create non-root user +RUN useradd -r -s /bin/false rex + +# Copy the built binary from builder stage +COPY --from=builder /rex/target/release/rex /usr/local/bin/rex + +# Set permissions +RUN chmod +x /usr/local/bin/rex + +# Switch to non-root user +USER rex + +# Set entrypoint +ENTRYPOINT ["rex"] +CMD ["--help"] \ No newline at end of file diff --git a/README.md b/README.md index ba5e038..90a891a 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,40 @@ To install it, you need to clone the repository and run the following command to make cli ``` +#### Using Docker + +Alternatively, you can use Docker to run Rex without installing Rust: + +```Shell +# Build the Docker image +docker build -t rex . + +# Run rex commands +docker run --rm rex --help +docker run --rm rex balance 0x... --rpc-url https://ethereum.node.url + +# For interactive usage, you can create an alias +alias rex="docker run --rm rex" +``` + +##### Docker Networking + +To access services running on your host machine (like local blockchain nodes): + +```Shell +# For local RPC nodes (e.g., local Ethereum node on port 8545) +docker run --rm --add-host=host.docker.internal:host-gateway rex balance 0x... --rpc-url http://host.docker.internal:8545 + +# Create an alias for easier usage with host access +alias rex="docker run --rm --add-host=host.docker.internal:host-gateway rex" + +# Now you can use rex normally with local services +rex balance 0x... --rpc-url http://host.docker.internal:8545 +rex l2 deposit --amount 1000000000000000000 --rpc-url http://host.docker.internal:8545 +``` + +**Note**: By default, Docker containers cannot access `localhost` services on your host machine. The `--add-host=host.docker.internal:host-gateway` flag creates a bridge that allows the container to reach your host's services via `host.docker.internal`. + ### Using the CLI After installing the CLI with `make cli`, run `rex` to display the help message and see the available commands. From 3500bd714d1ae22583dbdac29338f8313c6f00fb Mon Sep 17 00:00:00 2001 From: khuzama98 Date: Mon, 21 Jul 2025 21:06:45 +0500 Subject: [PATCH 2/2] fix(cli): update README to remove unnecessary --rpc-url flag in Docker commands --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 90a891a..bb4e57d 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ docker build -t rex . # Run rex commands docker run --rm rex --help -docker run --rm rex balance 0x... --rpc-url https://ethereum.node.url +docker run --rm rex balance 0x... https://ethereum.node.url # For interactive usage, you can create an alias alias rex="docker run --rm rex" @@ -49,14 +49,14 @@ To access services running on your host machine (like local blockchain nodes): ```Shell # For local RPC nodes (e.g., local Ethereum node on port 8545) -docker run --rm --add-host=host.docker.internal:host-gateway rex balance 0x... --rpc-url http://host.docker.internal:8545 +docker run --rm --add-host=host.docker.internal:host-gateway rex balance 0x... http://host.docker.internal:8545 # Create an alias for easier usage with host access alias rex="docker run --rm --add-host=host.docker.internal:host-gateway rex" # Now you can use rex normally with local services -rex balance 0x... --rpc-url http://host.docker.internal:8545 -rex l2 deposit --amount 1000000000000000000 --rpc-url http://host.docker.internal:8545 +rex balance 0x... http://host.docker.internal:8545 +rex l2 deposit --amount 1000000000000000000 http://host.docker.internal:8545 ``` **Note**: By default, Docker containers cannot access `localhost` services on your host machine. The `--add-host=host.docker.internal:host-gateway` flag creates a bridge that allows the container to reach your host's services via `host.docker.internal`.