mirror of
https://github.com/sonr-io/sonr.git
synced 2026-08-02 09:21:39 +00:00
78 lines
2.0 KiB
Docker
78 lines
2.0 KiB
Docker
# Use build argument for base image to allow using pre-cached base
|
|
ARG BASE_IMAGE=golang:1.24.7-alpine3.22
|
|
|
|
# --------------------------------------------------------
|
|
# Highway service build stage
|
|
FROM ${BASE_IMAGE} AS builder
|
|
SHELL ["/bin/sh", "-ecuxo", "pipefail"]
|
|
|
|
# Install build dependencies
|
|
RUN apk add --no-cache \
|
|
ca-certificates \
|
|
build-base \
|
|
git \
|
|
linux-headers \
|
|
bash
|
|
|
|
WORKDIR /code
|
|
|
|
# Copy entire source code
|
|
COPY . .
|
|
|
|
# Fix git ownership issue
|
|
RUN git config --global --add safe.directory /code
|
|
|
|
# Download Go modules
|
|
RUN --mount=type=cache,target=/go/pkg/mod \
|
|
--mount=type=cache,target=/root/.cache/go-build \
|
|
go mod download
|
|
|
|
# Build Highway binary
|
|
RUN --mount=type=cache,target=/go/pkg/mod \
|
|
--mount=type=cache,target=/root/.cache/go-build \
|
|
set -eux; \
|
|
VERSION=$(git describe --tags --always 2>/dev/null || echo "dev"); \
|
|
COMMIT=$(git log -1 --format='%H' 2>/dev/null || echo "unknown"); \
|
|
CGO_ENABLED=1 GOOS=linux \
|
|
go build \
|
|
-mod=readonly \
|
|
-ldflags "-X main.Version=${VERSION} \
|
|
-X main.Commit=${COMMIT} \
|
|
-w -s" \
|
|
-buildvcs=false \
|
|
-trimpath \
|
|
-o /code/build/hway \
|
|
./cmd/hway
|
|
|
|
# --------------------------------------------------------
|
|
# Highway runtime image
|
|
FROM alpine:3.17
|
|
|
|
LABEL org.opencontainers.image.title="Sonr Highway Service"
|
|
LABEL org.opencontainers.image.source="https://github.com/sonr-io/sonr"
|
|
|
|
# Copy binary from builder
|
|
COPY --from=builder /code/build/hway /usr/bin/hway
|
|
|
|
# Install runtime dependencies
|
|
RUN apk add --no-cache ca-certificates wget
|
|
|
|
# Create non-root user
|
|
RUN adduser -D -u 1000 highway
|
|
|
|
# Set working directory
|
|
WORKDIR /home/highway
|
|
|
|
# Switch to non-root user
|
|
USER highway
|
|
|
|
# Health check endpoint
|
|
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
|
CMD wget --spider -q http://localhost:8090/health || exit 1
|
|
|
|
# Expose Highway port
|
|
EXPOSE 8090
|
|
|
|
# Set default command
|
|
ENTRYPOINT ["/usr/bin/hway"]
|