removed the fucking vendor files
This commit is contained in:
141
Dockerfile.production
Normal file
141
Dockerfile.production
Normal file
@@ -0,0 +1,141 @@
|
||||
# Multi-stage Production Dockerfile for MEV Bot
|
||||
# Optimized for security, performance, and minimal attack surface
|
||||
|
||||
# Build stage
|
||||
FROM golang:1.21-alpine AS builder
|
||||
|
||||
# Install build dependencies
|
||||
RUN apk add --no-cache \
|
||||
git \
|
||||
ca-certificates \
|
||||
tzdata \
|
||||
gcc \
|
||||
musl-dev
|
||||
|
||||
# Set working directory
|
||||
WORKDIR /build
|
||||
|
||||
# Copy go mod files first for better caching
|
||||
COPY go.mod go.sum ./
|
||||
|
||||
# Download dependencies
|
||||
RUN go mod download && go mod verify
|
||||
|
||||
# Copy source code
|
||||
COPY . .
|
||||
|
||||
# Build the application with optimizations
|
||||
RUN CGO_ENABLED=1 GOOS=linux GOARCH=amd64 \
|
||||
go build \
|
||||
-a \
|
||||
-installsuffix cgo \
|
||||
-ldflags='-w -s -extldflags "-static"' \
|
||||
-o mev-bot \
|
||||
./cmd/mev-bot
|
||||
|
||||
# Generate contract bindings if not already present
|
||||
RUN if [ ! -d "bindings" ] || [ -z "$(ls -A bindings)" ]; then \
|
||||
echo "Generating contract bindings..." && \
|
||||
make generate-bindings || echo "Warning: Could not generate bindings"; \
|
||||
fi
|
||||
|
||||
# Test stage (optional, can be skipped in production builds)
|
||||
FROM builder AS tester
|
||||
RUN go test -v ./... -short
|
||||
|
||||
# Production stage
|
||||
FROM alpine:3.18 AS production
|
||||
|
||||
# Install runtime dependencies
|
||||
RUN apk add --no-cache \
|
||||
ca-certificates \
|
||||
tzdata \
|
||||
curl \
|
||||
&& update-ca-certificates
|
||||
|
||||
# Create non-root user for security
|
||||
RUN addgroup -g 1001 -S mevbot && \
|
||||
adduser -u 1001 -S mevbot -G mevbot
|
||||
|
||||
# Set working directory
|
||||
WORKDIR /app
|
||||
|
||||
# Copy binary from builder
|
||||
COPY --from=builder /build/mev-bot /app/mev-bot
|
||||
|
||||
# Copy configuration files
|
||||
COPY --from=builder /build/config /app/config
|
||||
COPY --from=builder /build/bindings /app/bindings
|
||||
|
||||
# Create necessary directories
|
||||
RUN mkdir -p /app/data /app/logs /app/keys && \
|
||||
chown -R mevbot:mevbot /app
|
||||
|
||||
# Create health check script
|
||||
RUN echo '#!/bin/sh' > /app/healthcheck.sh && \
|
||||
echo 'curl -f http://localhost:8080/health || exit 1' >> /app/healthcheck.sh && \
|
||||
chmod +x /app/healthcheck.sh
|
||||
|
||||
# Switch to non-root user
|
||||
USER mevbot
|
||||
|
||||
# Expose ports
|
||||
EXPOSE 8080 9090
|
||||
|
||||
# Set environment variables
|
||||
ENV GO_ENV=production \
|
||||
LOG_LEVEL=info \
|
||||
LOG_FORMAT=json \
|
||||
METRICS_ENABLED=true \
|
||||
METRICS_PORT=9090
|
||||
|
||||
# Health check
|
||||
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
|
||||
CMD ["/app/healthcheck.sh"]
|
||||
|
||||
# Default command
|
||||
CMD ["/app/mev-bot", "start"]
|
||||
|
||||
# Development stage (for local development)
|
||||
FROM golang:1.21-alpine AS development
|
||||
|
||||
# Install development tools
|
||||
RUN apk add --no-cache \
|
||||
git \
|
||||
ca-certificates \
|
||||
gcc \
|
||||
musl-dev \
|
||||
make \
|
||||
bash \
|
||||
curl \
|
||||
jq
|
||||
|
||||
# Install Go tools
|
||||
RUN go install github.com/air-verse/air@latest && \
|
||||
go install github.com/ethereum/go-ethereum/cmd/abigen@latest
|
||||
|
||||
# Set working directory
|
||||
WORKDIR /app
|
||||
|
||||
# Copy go mod files
|
||||
COPY go.mod go.sum ./
|
||||
|
||||
# Download dependencies
|
||||
RUN go mod download
|
||||
|
||||
# Copy source code
|
||||
COPY . .
|
||||
|
||||
# Create necessary directories
|
||||
RUN mkdir -p /app/data /app/logs /app/keys
|
||||
|
||||
# Expose ports for development
|
||||
EXPOSE 8080 9090 2345
|
||||
|
||||
# Set development environment
|
||||
ENV GO_ENV=development \
|
||||
LOG_LEVEL=debug \
|
||||
DEBUG=true
|
||||
|
||||
# Default command for development (with hot reload)
|
||||
CMD ["air", "-c", ".air.toml"]
|
||||
Reference in New Issue
Block a user