2025-11-02 10:42:25 +01:00
# syntax=docker/dockerfile:1
2023-10-29 02:44:06 +01:00
# Build stage
2025-12-19 08:18:01 +01:00
FROM docker.io/library/golang:1.25-alpine3.22 AS build-env
2018-03-12 10:59:13 +01:00
2025-11-02 10:42:25 +01:00
ARG GOPROXY = direct
2019-08-04 23:58:16 +02:00
2018-03-12 10:59:13 +01:00
ARG GITEA_VERSION
2018-10-23 19:47:59 +08:00
ARG TAGS = "sqlite sqlite_unlock_notify"
2024-06-21 17:08:42 +02:00
ENV TAGS = " bindata timetzdata $TAGS "
2020-06-06 23:42:32 +02:00
ARG CGO_EXTRA_CFLAGS
2018-03-12 10:59:13 +01:00
2023-10-29 02:44:06 +01:00
# Build deps
RUN apk --no-cache add \
build-base \
git \
nodejs \
2025-11-02 10:42:25 +01:00
pnpm
2018-03-12 10:59:13 +01:00
WORKDIR ${GOPATH}/src/code.gitea.io/gitea
2025-11-02 10:42:25 +01:00
# Use COPY but not "mount" because some directories like "node_modules" contain platform-depended contents and these directories need to be ignored.
# ".git" directory will be mounted later separately for getting version data.
# TODO: in the future, maybe we can pre-build the frontend assets on one platform and share them for different platforms, the benefit is that it won't be affected by webpack plugin compatibility problems, then the working directory can be fully mounted and the COPY is not needed.
COPY --exclude= .git/ . .
2018-03-12 10:59:13 +01:00
2025-11-02 10:42:25 +01:00
# Build gitea, .git mount is required for version data
RUN --mount= type = cache,target= /go/pkg/mod \
--mount= type = cache,target= "/root/.cache/go-build" \
--mount= type = cache,target= /root/.local/share/pnpm/store \
--mount= type = bind,source= ".git/" ,target= ".git/" \
make
2018-03-12 10:59:13 +01:00
2023-10-29 02:44:06 +01:00
COPY docker/root /tmp/local
2025-11-02 10:42:25 +01:00
# Set permissions for builds that made under windows which strips the executable bit from file
2023-10-29 02:44:06 +01:00
RUN chmod 755 /tmp/local/usr/bin/entrypoint \
2025-10-25 10:54:55 +08:00
/tmp/local/usr/local/bin/* \
2023-10-29 02:44:06 +01:00
/tmp/local/etc/s6/gitea/* \
/tmp/local/etc/s6/openssh/* \
/tmp/local/etc/s6/.s6-svscan/* \
2025-10-25 10:54:55 +08:00
/go/src/code.gitea.io/gitea/gitea
2023-10-29 02:44:06 +01:00
2025-12-19 08:18:01 +01:00
FROM docker.io/library/alpine:3.22 AS gitea
2015-08-25 12:41:01 +08:00
2016-11-28 14:13:18 +01:00
EXPOSE 22 3000
2015-08-25 12:41:01 +08:00
2017-05-08 13:09:20 +02:00
RUN apk --no-cache add \
2016-11-28 14:13:18 +01:00
bash \
2018-03-12 10:59:13 +01:00
ca-certificates \
curl \
gettext \
2016-11-28 14:13:18 +01:00
git \
linux-pam \
openssh \
2018-03-12 10:59:13 +01:00
s6 \
sqlite \
su-exec \
2025-11-02 10:42:25 +01:00
gnupg
2018-03-12 10:59:13 +01:00
2017-06-30 14:10:37 +08:00
RUN addgroup \
2016-11-28 17:37:31 +01:00
-S -g 1000 \
2016-11-28 14:13:18 +01:00
git && \
2016-11-28 17:22:22 +01:00
adduser \
-S -H -D \
-h /data/git \
2016-11-28 14:13:18 +01:00
-s /bin/bash \
-u 1000 \
2016-11-28 17:22:22 +01:00
-G git \
2016-12-15 10:16:55 +01:00
git && \
2021-04-29 19:48:52 +02:00
echo "git:*" | chpasswd -e
2015-08-17 03:10:23 -04:00
2025-11-02 10:42:25 +01:00
COPY --from= build-env /tmp/local /
COPY --from= build-env /go/src/code.gitea.io/gitea/gitea /app/gitea/gitea
2024-06-21 17:08:42 +02:00
ENV USER = git
ENV GITEA_CUSTOM = /data/gitea
2016-01-25 13:07:37 +00:00
2015-10-02 10:56:36 +01:00
VOLUME [ "/data" ]
2016-11-28 14:13:18 +01:00
2026-01-30 10:23:38 +08:00
# HINT: HEALTH-CHECK-ENDPOINT: don't use HEALTHCHECK, search this hint keyword for more information
2016-11-28 14:13:18 +01:00
ENTRYPOINT [ "/usr/bin/entrypoint" ]
2024-12-22 20:31:53 +02:00
CMD [ "/usr/bin/s6-svscan" , "/etc/s6" ]