mirror of
https://github.com/NoFxAiOS/nofx.git
synced 2025-12-06 13:54:41 +08:00
71 lines
3.3 KiB
Docker
71 lines
3.3 KiB
Docker
# docker/backend/Dockerfile
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# NOFX Backend Dockerfile (Go + TA-Lib)
|
|
# Multi-stage build with shared TA-Lib compilation stage
|
|
# Versions extracted as ARGs for maintainability
|
|
# ═══════════════════════════════════════════════════════════════
|
|
|
|
ARG GO_VERSION=1.25-alpine
|
|
ARG ALPINE_VERSION=latest
|
|
ARG TA_LIB_VERSION=0.4.0
|
|
|
|
# ──────────────────────────────────────────────────────────────
|
|
# TA-Lib Build Stage (shared across builds)
|
|
# ──────────────────────────────────────────────────────────────
|
|
FROM alpine:${ALPINE_VERSION} AS ta-lib-builder
|
|
ARG TA_LIB_VERSION
|
|
|
|
RUN apk update && apk add --no-cache \
|
|
wget tar make gcc g++ musl-dev autoconf automake
|
|
|
|
RUN wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-${TA_LIB_VERSION}-src.tar.gz && \
|
|
tar -xzf ta-lib-${TA_LIB_VERSION}-src.tar.gz && \
|
|
cd ta-lib && \
|
|
if [ "$(uname -m)" = "aarch64" ]; then \
|
|
CONFIG_GUESS=$(find /usr/share -name config.guess | head -1) && \
|
|
CONFIG_SUB=$(find /usr/share -name config.sub | head -1) && \
|
|
cp "$CONFIG_GUESS" config.guess && \
|
|
cp "$CONFIG_SUB" config.sub && \
|
|
chmod +x config.guess config.sub; \
|
|
fi && \
|
|
./configure --prefix=/usr/local && \
|
|
make && make install && \
|
|
cd .. && rm -rf ta-lib ta-lib-${TA_LIB_VERSION}-src.tar.gz
|
|
|
|
# ──────────────────────────────────────────────────────────────
|
|
# Backend Build Stage (Go Application)
|
|
# ──────────────────────────────────────────────────────────────
|
|
FROM golang:${GO_VERSION} AS backend-builder
|
|
|
|
RUN apk update && apk add --no-cache git make gcc g++ musl-dev
|
|
|
|
COPY --from=ta-lib-builder /usr/local /usr/local
|
|
|
|
WORKDIR /app
|
|
COPY go.mod go.sum ./
|
|
RUN go mod download
|
|
|
|
COPY . .
|
|
RUN CGO_ENABLED=1 GOOS=linux \
|
|
CGO_CFLAGS="-D_LARGEFILE64_SOURCE" \
|
|
go build -trimpath -ldflags="-s -w" -o nofx .
|
|
|
|
# ──────────────────────────────────────────────────────────────
|
|
# Runtime Stage (Minimal Executable Environment)
|
|
# ──────────────────────────────────────────────────────────────
|
|
FROM alpine:${ALPINE_VERSION}
|
|
|
|
RUN apk update && apk add --no-cache ca-certificates tzdata
|
|
|
|
COPY --from=ta-lib-builder /usr/local /usr/local
|
|
WORKDIR /app
|
|
COPY --from=backend-builder /app/nofx .
|
|
|
|
EXPOSE 8080
|
|
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
|
|
CMD wget --no-verbose --tries=1 --spider http://localhost:8080/api/health || exit 1
|
|
|
|
CMD ["./nofx"]
|