mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
4c3347a77f
* Rename /site to /project * Add ldflags * Add go and node to the default image * Add Dart Sass to the default image * Build the extended version by default * Add "npm i" install support with custom entry script override * Adjust cache logic to speed up CGO rebuilds Closes #12920 See #12885
95 lines
2.9 KiB
Docker
Executable file
95 lines
2.9 KiB
Docker
Executable file
# GitHub: https://github.com/gohugoio
|
|
# Twitter: https://twitter.com/gohugoio
|
|
# Website: https://gohugo.io/
|
|
|
|
ARG GO_VERSION="1.23.2"
|
|
ARG ALPINE_VERSION=3.20
|
|
|
|
FROM --platform=$BUILDPLATFORM tonistiigi/xx:1.5.0 AS xx
|
|
FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine${ALPINE_VERSION} AS gobuild
|
|
FROM golang:${GO_VERSION}-alpine${ALPINE_VERSION} AS gorun
|
|
|
|
|
|
FROM gobuild AS build
|
|
|
|
RUN apk add clang lld
|
|
|
|
# Set up cross-compilation helpers
|
|
COPY --from=xx / /
|
|
|
|
ARG TARGETPLATFORM
|
|
RUN xx-apk add musl-dev gcc g++
|
|
|
|
# Optionally set HUGO_BUILD_TAGS to "none" or "nodeploy" when building like so:
|
|
# docker build --build-arg HUGO_BUILD_TAGS=nodeploy .
|
|
#
|
|
# We build the extended version by default.
|
|
ARG HUGO_BUILD_TAGS="extended"
|
|
ENV CGO_ENABLED=1
|
|
ENV GOPROXY=https://proxy.golang.org
|
|
ENV GOCACHE=/root/.cache/go-build
|
|
ENV GOMODCACHE=/go/pkg/mod
|
|
ARG TARGETPLATFORM
|
|
|
|
WORKDIR /go/src/github.com/gohugoio/hugo
|
|
|
|
# For --mount=type=cache the value of target is the default cache id, so
|
|
# for the go mod cache it would be good if we could share it with other Go images using the same setup,
|
|
# but the go build cache needs to be per platform.
|
|
# See this comment: https://github.com/moby/buildkit/issues/1706#issuecomment-702238282
|
|
RUN --mount=target=. \
|
|
--mount=type=cache,target=/go/pkg/mod \
|
|
--mount=type=cache,target=/root/.cache/go-build,id=go-build-$TARGETPLATFORM <<EOT
|
|
set -ex
|
|
xx-go build -tags "$HUGO_BUILD_TAGS" -ldflags "-s -w -X github.com/gohugoio/hugo/common/hugo.vendorInfo=docker" -o /usr/bin/hugo
|
|
xx-verify /usr/bin/hugo
|
|
EOT
|
|
|
|
FROM gorun AS final
|
|
|
|
COPY --from=build /usr/bin/hugo /usr/bin/hugo
|
|
|
|
# libc6-compat are required for extended libraries (libsass, libwebp).
|
|
RUN apk add --no-cache \
|
|
libc6-compat \
|
|
git \
|
|
runuser \
|
|
curl \
|
|
nodejs \
|
|
npm
|
|
|
|
RUN mkdir -p /var/hugo/bin && \
|
|
addgroup -Sg 1000 hugo && \
|
|
adduser -Sg hugo -u 1000 -h /var/hugo hugo && \
|
|
chown -R hugo: /var/hugo && \
|
|
# For the Hugo's Git integration to work.
|
|
runuser -u hugo -- git config --global --add safe.directory /project && \
|
|
# See https://github.com/gohugoio/hugo/issues/9810
|
|
runuser -u hugo -- git config --global core.quotepath false
|
|
|
|
VOLUME /project
|
|
WORKDIR /project
|
|
USER hugo:hugo
|
|
ENV HUGO_CACHEDIR=/cache
|
|
ARG BUILDARCH
|
|
ENV BUILDARCH=${BUILDARCH}
|
|
ENV PATH="/var/hugo/bin:$PATH"
|
|
|
|
COPY scripts/docker scripts/docker
|
|
COPY scripts/docker/entrypoint.sh /entrypoint.sh
|
|
|
|
# Install default dependencies.
|
|
RUN scripts/docker/install_runtimedeps_default.sh
|
|
# Update PATH to reflect the new dependencies.
|
|
# For more complex setups, we should probably find a way to
|
|
# delegate this to the script itself, but this will have to do for now.
|
|
# Also, the dart-sass binary is a little special, other binaries can be put/linked
|
|
# directly in /var/hugo/bin.
|
|
ENV PATH="/var/hugo/bin/dart-sass:$PATH"
|
|
|
|
# Expose port for live server
|
|
EXPOSE 1313
|
|
|
|
ENTRYPOINT ["/entrypoint.sh"]
|
|
CMD ["--help"]
|
|
|