README.md
Rendering markdown...
FROM alpine:latest AS source
ARG ECH0_TAG=4.2.1
RUN apk add --no-cache git ca-certificates
RUN git clone --depth 1 --branch "v${ECH0_TAG}" https://github.com/lin-snow/Ech0.git /src
FROM node:25-alpine AS frontend-builder
WORKDIR /web
RUN npm install -g [email protected]
COPY --from=source /src/web/package.json /src/web/pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile
COPY --from=source /src/web/ ./
RUN pnpm run build --mode production
FROM golang:1.26.1-alpine AS backend-builder
RUN apk add --no-cache git ca-certificates tzdata gcc musl-dev
WORKDIR /app
COPY --from=source /src/go.mod /src/go.sum ./
RUN go mod download
COPY --from=source /src/ ./
COPY --from=frontend-builder /template/dist /app/template/dist
ARG TARGETOS
ARG TARGETARCH
RUN CGO_ENABLED=1 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build \
-tags netgo \
-ldflags="-linkmode external -extldflags '-static' -w -s" \
-o ech0 ./cmd/ech0
FROM alpine:latest
WORKDIR /app
ENV TZ=Asia/Shanghai
RUN mkdir -p /app/data /app/backup /app/template
COPY --from=backend-builder /app/ech0 /app/ech0
RUN chmod +x /app/ech0
EXPOSE 6277
EXPOSE 6278
ENTRYPOINT ["/app/ech0"]
CMD ["serve"]