# syntax=docker/dockerfile:1 ARG NODE_VERSION=20 ARG GO_VERSION=1.22 FROM node:${NODE_VERSION}-bookworm AS web-builder WORKDIR /src COPY frontend/package*.json ./frontend/ RUN cd frontend && npm install COPY frontend ./frontend COPY core ./core RUN cd frontend && npm run build:pro FROM golang:${GO_VERSION}-bookworm AS go-builder WORKDIR /src ARG GOTOOLCHAIN=auto ENV GOTOOLCHAIN=${GOTOOLCHAIN} ENV CGO_ENABLED=0 COPY core/go.mod core/go.sum ./core/ COPY agent/go.mod agent/go.sum ./agent/ RUN cd core && go mod download RUN cd agent && go mod download COPY . . COPY --from=web-builder /src/core/cmd/server/web /src/core/cmd/server/web RUN cd core && go build -trimpath -ldflags "-s -w" -o /out/1panel-core ./cmd/server/main.go RUN cd agent && go build -trimpath -ldflags "-s -w" -o /out/1panel-agent ./cmd/server/main.go FROM debian:bookworm-slim RUN apt-get update \ && apt-get install -y --no-install-recommends bash ca-certificates tzdata tar gzip grep sed \ && rm -rf /var/lib/apt/lists/* COPY --from=go-builder /out/1panel-core /usr/local/bin/1panel-core COPY --from=go-builder /out/1panel-agent /usr/local/bin/1panel-agent COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh COPY docker/1pctl /usr/local/bin/1pctl COPY core/cmd/server/conf/app.yaml /usr/local/share/1panel/app.yaml RUN chmod 755 /usr/local/bin/entrypoint.sh /usr/local/bin/1pctl \ && mkdir -p /opt/1panel/conf EXPOSE 9999 ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]