# syntax=docker/dockerfile:1.6 ARG GO_PROXY=https://goproxy.cn,direct # ======================================== # Stage 1: Backend build (frontend pre-built locally -> application/statics/assets.zip) # ======================================== FROM golang:1.23-alpine AS backend-build ARG GO_PROXY WORKDIR /src RUN apk add --no-cache git tzdata gcc musl-dev ENV CGO_ENABLED=0 \ GOOS=linux \ GOARCH=amd64 \ GOPROXY=${GO_PROXY} COPY go.mod go.sum ./ RUN --mount=type=cache,target=/go/pkg/mod \ go mod download COPY . . RUN --mount=type=cache,target=/go/pkg/mod \ --mount=type=cache,target=/root/.cache/go-build \ go generate ./ent RUN --mount=type=cache,target=/go/pkg/mod \ --mount=type=cache,target=/root/.cache/go-build \ go build -trimpath -ldflags "-s -w -X 'github.com/cloudreve/Cloudreve/v4/pkg/conf.BackendVersion=byw-${BUILD_DATE:-dev}'" -o /cloudreve . # ======================================== # Stage 2: Runtime image # ======================================== FROM alpine:latest AS runtime WORKDIR /cloudreve RUN apk update && \ apk add --no-cache tzdata vips-tools ffmpeg libreoffice aria2 supervisor font-noto font-noto-cjk libheif libraw-tools && \ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ echo "Asia/Shanghai" > /etc/timezone && \ mkdir -p ./data/temp/aria2 && \ chmod -R 766 ./data/temp/aria2 && \ rm -rf /var/cache/apk/* ENV CR_ENABLE_ARIA2=1 \ CR_SETTING_DEFAULT_thumb_ffmpeg_enabled=1 \ CR_SETTING_DEFAULT_thumb_vips_enabled=1 \ CR_SETTING_DEFAULT_thumb_libreoffice_enabled=1 \ CR_SETTING_DEFAULT_media_meta_ffprobe=1 \ CR_SETTING_DEFAULT_thumb_libraw_enabled=1 COPY .build/aria2.supervisor.conf .build/entrypoint.sh ./ COPY --from=backend-build /cloudreve ./cloudreve RUN chmod +x ./cloudreve && \ chmod +x ./entrypoint.sh EXPOSE 5212 443 6888 6888/udp VOLUME ["/cloudreve/data"] ENTRYPOINT ["sh", "./entrypoint.sh"]