gcx/blockchain/genex-chain/Dockerfile

91 lines
2.3 KiB
Docker

# ============================================================
# Genex Chain — Multi-stage Docker Build
# ============================================================
# 基于 cosmos/evm v0.5.1, Cosmos SDK v0.53.5, CometBFT v0.38.19
#
# 用法:
# docker build -t genex-chain:latest .
# docker run -p 26657:26657 -p 8545:8545 genex-chain:latest
# ============================================================
# ========================
# Stage 1: Builder
# ========================
FROM golang:1.23-alpine AS builder
RUN apk add --no-cache \
make \
gcc \
musl-dev \
linux-headers \
git \
bash \
curl
WORKDIR /build
# Copy go.mod first for dependency caching
COPY go.mod ./
RUN go mod download 2>/dev/null || true
# Copy source code
COPY . .
# Resolve all dependencies
RUN go mod tidy
# Build the binary with CGO (required for Cosmos SDK crypto)
RUN CGO_ENABLED=1 GOOS=linux go build \
-ldflags "-X github.com/cosmos/cosmos-sdk/version.Name=GenexChain \
-X github.com/cosmos/cosmos-sdk/version.AppName=genexd \
-X github.com/cosmos/cosmos-sdk/version.Version=1.0.0 \
-X github.com/cosmos/cosmos-sdk/version.Commit=$(git rev-parse --short HEAD 2>/dev/null || echo 'dev') \
-X github.com/cosmos/cosmos-sdk/version.BuildTags=netgo,ledger \
-w -s" \
-tags "netgo,ledger" \
-trimpath \
-o /build/bin/genexd \
./cmd/genexd/
# ========================
# Stage 2: Runtime
# ========================
FROM alpine:3.19
RUN apk add --no-cache \
ca-certificates \
bash \
curl \
jq
# Create non-root user
RUN addgroup -S genex && adduser -S genex -G genex
# Copy binary from builder
COPY --from=builder /build/bin/genexd /usr/local/bin/genexd
# Copy initialization scripts
COPY scripts/ /opt/genex/scripts/
RUN chmod +x /usr/local/bin/genexd && \
chmod +x /opt/genex/scripts/*.sh 2>/dev/null || true
# Set up data directory
RUN mkdir -p /home/genex/.genexd && \
chown -R genex:genex /home/genex
USER genex
WORKDIR /home/genex
# Expose ports
# P2P: 26656, RPC: 26657, EVM JSON-RPC: 8545, EVM WS: 8546
# REST API: 1317, gRPC: 9090, gRPC-web: 9091
EXPOSE 26656 26657 8545 8546 1317 9090 9091
# Health check
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD curl -f http://localhost:26657/status || exit 1
ENTRYPOINT ["genexd"]
CMD ["start"]