mirror of
https://github.com/go-gitea/gitea.git
synced 2026-05-08 17:21:01 +01:00
23a5bc5e64
1. Copy dependency manifests before the full source copy so that dependency installation gets its own cached layer. When only source code changes, the dependency layers are reused. 2. Remove the `GOPROXY=direct` override which was bypassing the Go module proxy, causing build failures when git servers are unreachable. The Go default (`https://proxy.golang.org,direct`) is now used instead. --------- Co-authored-by: Claude (Opus 4.6) <noreply@anthropic.com>
89 lines
2.4 KiB
Docker
89 lines
2.4 KiB
Docker
# syntax=docker/dockerfile:1
|
|
# Build frontend on the native platform to avoid QEMU-related issues with esbuild/webpack
|
|
FROM --platform=$BUILDPLATFORM docker.io/library/golang:1.26-alpine3.23 AS frontend-build
|
|
RUN apk --no-cache add build-base git nodejs pnpm
|
|
WORKDIR /src
|
|
COPY package.json pnpm-lock.yaml .npmrc ./
|
|
RUN --mount=type=cache,target=/root/.local/share/pnpm/store pnpm install --frozen-lockfile
|
|
COPY --exclude=.git/ . .
|
|
RUN make frontend
|
|
|
|
# Build backend for each target platform
|
|
FROM docker.io/library/golang:1.26-alpine3.23 AS build-env
|
|
|
|
ARG GITEA_VERSION
|
|
ARG TAGS="sqlite sqlite_unlock_notify"
|
|
ENV TAGS="bindata timetzdata $TAGS"
|
|
ARG CGO_EXTRA_CFLAGS
|
|
|
|
# Build deps
|
|
RUN apk --no-cache add \
|
|
build-base \
|
|
git
|
|
|
|
WORKDIR ${GOPATH}/src/code.gitea.io/gitea
|
|
COPY go.mod go.sum ./
|
|
RUN go mod download
|
|
# See the comments in Dockerfile
|
|
COPY --exclude=.git/ . .
|
|
COPY --from=frontend-build /src/public/assets public/assets
|
|
|
|
# Build gitea, .git mount is required for version data
|
|
RUN --mount=type=cache,target="/root/.cache/go-build" \
|
|
--mount=type=bind,source=".git/",target=".git/" \
|
|
make backend
|
|
|
|
COPY docker/rootless /tmp/local
|
|
|
|
# Set permissions for builds that made under windows which strips the executable bit from file
|
|
RUN chmod 755 /tmp/local/usr/local/bin/* \
|
|
/go/src/code.gitea.io/gitea/gitea
|
|
|
|
FROM docker.io/library/alpine:3.23 AS gitea-rootless
|
|
|
|
EXPOSE 2222 3000
|
|
|
|
RUN apk --no-cache add \
|
|
bash \
|
|
ca-certificates \
|
|
dumb-init \
|
|
gettext \
|
|
git \
|
|
curl \
|
|
gnupg \
|
|
openssh-keygen
|
|
|
|
RUN addgroup \
|
|
-S -g 1000 \
|
|
git && \
|
|
adduser \
|
|
-S -H -D \
|
|
-h /var/lib/gitea/git \
|
|
-s /bin/bash \
|
|
-u 1000 \
|
|
-G git \
|
|
git
|
|
|
|
RUN mkdir -p /var/lib/gitea /etc/gitea
|
|
RUN chown git:git /var/lib/gitea /etc/gitea
|
|
|
|
COPY --from=build-env /tmp/local /
|
|
COPY --from=build-env --chown=root:root /go/src/code.gitea.io/gitea/gitea /app/gitea/gitea
|
|
|
|
# git:git
|
|
USER 1000:1000
|
|
ENV GITEA_WORK_DIR=/var/lib/gitea
|
|
ENV GITEA_CUSTOM=/var/lib/gitea/custom
|
|
ENV GITEA_TEMP=/tmp/gitea
|
|
ENV TMPDIR=/tmp/gitea
|
|
|
|
# TODO add to docs the ability to define the ini to load (useful to test and revert a config)
|
|
ENV GITEA_APP_INI=/etc/gitea/app.ini
|
|
ENV HOME="/var/lib/gitea/git"
|
|
VOLUME ["/var/lib/gitea", "/etc/gitea"]
|
|
WORKDIR /var/lib/gitea
|
|
|
|
# HINT: HEALTH-CHECK-ENDPOINT: don't use HEALTHCHECK, search this hint keyword for more information
|
|
ENTRYPOINT ["/usr/bin/dumb-init", "--", "/usr/local/bin/docker-entrypoint.sh"]
|
|
CMD []
|