91 lines
2.3 KiB
Docker
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"]
|