From 02490ea8a226052eaff7d0b103b47bb4cae4feed Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Tue, 22 Apr 2025 22:48:04 +0200 Subject: [PATCH] Add mcpbox dockerfile and entrypoint Signed-off-by: mudler --- Dockerfile.mcpbox | 47 ++++++++++++++++++++++++++++++++++++++++++++++ cmd/mcpbox/main.go | 38 +++++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 Dockerfile.mcpbox create mode 100644 cmd/mcpbox/main.go diff --git a/Dockerfile.mcpbox b/Dockerfile.mcpbox new file mode 100644 index 0000000..b79efe8 --- /dev/null +++ b/Dockerfile.mcpbox @@ -0,0 +1,47 @@ +# Build stage +FROM golang:1.21-alpine AS builder + +# Install build dependencies +RUN apk add --no-cache git + +# Set working directory +WORKDIR /app + +# Copy go mod files +COPY go.mod go.sum ./ + +# Download dependencies +RUN go mod download + +# Copy source code +COPY . . + +# Build the application +RUN CGO_ENABLED=0 GOOS=linux go build -o mcpbox ./cmd/mcpbox + +# Final stage +FROM alpine:3.19 + +# Install runtime dependencies +RUN apk add --no-cache ca-certificates tzdata + +# Create non-root user +RUN adduser -D -g '' appuser + +# Set working directory +WORKDIR /app + +# Copy binary from builder +COPY --from=builder /app/mcpbox . + +# Use non-root user +USER appuser + +# Expose port +EXPOSE 8080 + +# Set entrypoint +ENTRYPOINT ["/app/mcpbox"] + +# Default command +CMD ["-addr", ":8080"] diff --git a/cmd/mcpbox/main.go b/cmd/mcpbox/main.go new file mode 100644 index 0000000..b39b1f3 --- /dev/null +++ b/cmd/mcpbox/main.go @@ -0,0 +1,38 @@ +package main + +import ( + "flag" + "log" + "os" + "os/signal" + "syscall" + + "github.com/mudler/LocalAGI/pkg/stdio" +) + +func main() { + // Parse command line flags + addr := flag.String("addr", ":8080", "HTTP server address") + flag.Parse() + + // Create and start the server + server := stdio.NewServer() + + // Handle graceful shutdown + sigChan := make(chan os.Signal, 1) + signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM) + + go func() { + log.Printf("Starting server on %s", *addr) + if err := server.Start(*addr); err != nil { + log.Fatalf("Failed to start server: %v", err) + } + }() + + // Wait for shutdown signal + <-sigChan + log.Println("Shutting down server...") + + // TODO: Implement graceful shutdown if needed + os.Exit(0) +}