All checks were successful
ci / build (push) Successful in 3m10s
Use Docker's TARGETARCH variable to download the correct architecture
binaries for Go and Hugo during multi-platform builds. This fixes the
build failure for linux/arm64 where amd64 binaries were being downloaded.
- Add ARG TARGETARCH to capture target architecture
- Replace hardcoded linux-amd64 with linux-${TARGETARCH}
- Applies to both Go and Hugo downloads
- Backwards compatible with local single-platform builds
69 lines
2.7 KiB
Docker
69 lines
2.7 KiB
Docker
# Build arguments for version pinning (matching devbox.json)
|
|
ARG NODE_VERSION=24.10.0
|
|
ARG GO_VERSION=1.25.1
|
|
ARG HUGO_VERSION=0.151.0
|
|
|
|
# Build stage - use same versions as local devbox environment
|
|
FROM node:${NODE_VERSION}-bookworm AS builder
|
|
|
|
# Get target architecture for multi-platform builds
|
|
ARG TARGETARCH
|
|
|
|
# Install Git (needed for Hugo's enableGitInfo)
|
|
RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*
|
|
|
|
# Install Go (map TARGETARCH: amd64->amd64, arm64->arm64)
|
|
ARG GO_VERSION
|
|
RUN wget -q https://go.dev/dl/go${GO_VERSION}.linux-${TARGETARCH}.tar.gz && \
|
|
tar -C /usr/local -xzf go${GO_VERSION}.linux-${TARGETARCH}.tar.gz && \
|
|
rm go${GO_VERSION}.linux-${TARGETARCH}.tar.gz
|
|
|
|
ENV PATH="/usr/local/go/bin:${PATH}"
|
|
ENV GOPATH="/go"
|
|
ENV PATH="${GOPATH}/bin:${PATH}"
|
|
|
|
# Install Hugo extended (map TARGETARCH: amd64->amd64, arm64->arm64)
|
|
ARG HUGO_VERSION
|
|
RUN wget -q https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-${TARGETARCH}.tar.gz && \
|
|
tar -xzf hugo_extended_${HUGO_VERSION}_linux-${TARGETARCH}.tar.gz && \
|
|
mv hugo /usr/local/bin/ && \
|
|
rm hugo_extended_${HUGO_VERSION}_linux-${TARGETARCH}.tar.gz && \
|
|
hugo version
|
|
|
|
WORKDIR /src
|
|
|
|
# Copy package files and install npm dependencies
|
|
COPY package*.json ./
|
|
RUN npm ci
|
|
|
|
# Copy all source files
|
|
COPY . .
|
|
|
|
# Build Hugo site (Git info wird aus dem aktuellen Kontext genommen, nicht aus .git)
|
|
# Hugo sucht nach .git, findet es nicht, und überspringt Git-Info automatisch
|
|
RUN hugo --gc --minify
|
|
|
|
# Runtime stage - nginx to serve static content
|
|
FROM nginx:1.27-alpine
|
|
|
|
# Copy built site from builder
|
|
COPY --from=builder /src/public /usr/share/nginx/html
|
|
|
|
# Copy custom nginx config
|
|
RUN echo 'server {' > /etc/nginx/conf.d/default.conf && \
|
|
echo ' listen 80;' >> /etc/nginx/conf.d/default.conf && \
|
|
echo ' server_name _;' >> /etc/nginx/conf.d/default.conf && \
|
|
echo ' root /usr/share/nginx/html;' >> /etc/nginx/conf.d/default.conf && \
|
|
echo ' index index.html;' >> /etc/nginx/conf.d/default.conf && \
|
|
echo '' >> /etc/nginx/conf.d/default.conf && \
|
|
echo ' location / {' >> /etc/nginx/conf.d/default.conf && \
|
|
echo ' try_files $uri $uri/ /index.html;' >> /etc/nginx/conf.d/default.conf && \
|
|
echo ' }' >> /etc/nginx/conf.d/default.conf && \
|
|
echo '' >> /etc/nginx/conf.d/default.conf && \
|
|
echo ' gzip on;' >> /etc/nginx/conf.d/default.conf && \
|
|
echo ' gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;' >> /etc/nginx/conf.d/default.conf && \
|
|
echo '}' >> /etc/nginx/conf.d/default.conf
|
|
|
|
EXPOSE 80
|
|
|
|
CMD ["nginx", "-g", "daemon off;"]
|